Link in progress
Обо мне
GET и удаление данных из БД. Уроки PHP

GET - передача переменных в PHP В прошлом уроке мы модернизировали наши мини сайт, теперь он знает, какие файлы можно загружать, какой максимальный размер этот файл может иметь, знает что делать, когда загрузка файла окончилась ошибкой, а также сам чистит файлы, которые были загружены с ошибкой. На сегодня все, даже малостраничные сайты могут иметь админ-панель. Что это такое, я думаю, вы знаете – это то место, где определенный человек может модерировать сайт: удалять, добавлять, изменять данные в БД. В этом уроке мы создадим такую возможность и нашему сайту.
План:
1. Создание страницы для администратора;
2. Знакомство с GET и удаление данных из ДБ.

1. Создание страницы для администратора

Сегодня мы сделаем станицу администратора, которую дальше еще будем усовершенствовать, которая будет просто выводить список всех участников их БД с кнопкой удаления конкретного участника. Как делать удаления записей из БД мы уже знаем. Приступим, создаем новый файл admin.php:

1
2
3
4
<?php
require_once('config/config.php');
require_once('config/vars.php');
?>

Импортируем файлы подключения к БД и файл настроек.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// ---------- //
    $connect = mysqli_connect( BDHost, BDLogin, BDPass, BDName ) or die ( 'Нет подключения к базе данных' );
    mysqli_query($connect, "SET CHARACTER SET 'utf8'");
// ---------- //
    $query = "SELECT * FROM sport ORDER BY weight DESC, date ASC";
    $result = mysqli_query($connect, $query);
// ---------- //
    echo '<table>';
    while ($row = mysqli_fetch_array($result)) {
        echo '<tr><td>' . $row['name'] .'</td>';
        echo '<td>' . $row['date'] .'</td>';
        echo '<td>' . $row['weight'] .'</td>';
        echo '<td><a href="remove.php?id=' . $row['id'] . '&amp;name=' . $row['name'] . '&amp;weight=' . $row['weight'] . '&amp;photo=' . $row['photo'] . '">Удалить</a></td></tr>';
       
    }
    echo '</table>';
?>

Нового ничего не написано. Все просто: выводим список, сортируем его средствами SQL по дате от А до Я, в нашем случае от самого большего значения поднятого веса, и если есть совпадения по колонке weight, сортировать по дате от самого давнейшего. Как это работает: если у нас есть 2 человека, которые указали поднятый вес в 100кг. То в списке будет идти первый тот, кто первый добавился в рейтинг. Далее, используя цикл while, выводим данные из БД в виде списка и ссылкой «Удалить». Плюсом еще будет оформить страницу:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html><head>
<title>Админ-панель. PHP Уроки.GloGla.net.</title>
    <meta http-equiv="Content-Type" content="text/html; charset="utf-8" />
    <link href="../style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="body">

PHP

</div>
<div id="right">
    &#9658; <a href="rank.php">Рейтинг учасников</a><br />
    &#9658; <a href="add_athlete.php">Добавить учасника</a><br />
    &#9658;&#9658; <a href="admin.php">Админ-панель</a>
</div>
</body>
</html>

2. Знакомство с GET и удаление данных из ДБ

Непосредственно страница admin.php не удаляет данные, она вообще ничего не может кроме того, что выводить данные из БД. Но делает одно важное дело: формирует ссылку на удаления данных. Эта ссылка – «Удалить». Посмотрите ее внимательно. Отлично! Теперь нужно создать файл, который будет обрабатывать эту ссылку. Назовем его remove.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
if (isset($_GET['id']) && isset($_GET['name']) && isset($_GET['weight']) && isset($_GET['photo'])) {
    $id = $_GET['id'];
    $name = $_GET['name'];
    $weight = $_GET['weight'];
    $photo = $_GET['photo'];
} else if (isset($_POST['id']) && isset($_POST['name']) && isset($_POST['weight']) && isset($_POST['photo'])) {
    $id = $_POST['id'];
    $name = $_POST['name'];
    $weight = $_POST['weight'];
    $photo = $_POST['photo'];
} else {
    echo '<span class="error">А что мы удаляем?</span>';
}

Тут мы проверяем, как у нам пришли данные: если данные пришли по ссылке, то есть методом $_GET, тогда проверяем на все интересующие нам данные и записываем их в переменные. Но есть данные приходят на файл методом $_POST, делаем то же самое, проверяем и записываем в переменные. Далее нужен код, который будет непосредственно удалять данных их БД:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if (isset($_POST['dell']) && $_POST['confirm'] == 'YES') {
        @unlink(IMAGE_PAPH . $photo);
        $connect = mysqli_connect( BDHost, BDLogin, BDPass, BDName ) or die ( 'Нет подключения к базе данных' );
        mysqli_query($connect, "SET CHARACTER SET 'utf8'");
        $query = "DELETE FROM sport WHERE id=$id AND weight=$weight LIMIT 1";
        mysqli_query($connect, $query);
        mysqli_close($connect);
        echo 'Рейтинг учасника <strong>' . $name . ' ' . $photo . '</strong>, осилив <strong>' . $weight . 'кг.</strong> успешно удален!';
    } else if (isset($_GET['id']) && isset($_GET['name']) && isset($_GET['weight'])) {
   
    echo 'Вы хотите удалить учасника:<br />';
    echo 'Имя:' . $name . '<br />';
    echo 'Поднял:' . $weight . '<br />';
    echo 'Фото: <img src="' . IMAGE_PAPH . $photo . '" width="100px"/><br />';
    echo '<form method="post" action="remove.php">';
    echo '<input type="hidden" name="confirm" value="YES"/>';
    echo '<input type="submit" name="dell" value="Удалить" />';
    echo '<input type="hidden" name="id" value=" ' . $id . '"/>';
    echo '<input type="hidden" name="name" value=" ' . $name . '"/>';
    echo '<input type="hidden" name="weight" value=" ' . $weight . '"/>';
    echo '<input type="hidden" name="photo" value=" ' . $photo . '"/>';
    echo '</form';
}

echo '<br /><br /><a href="admin.php">Назак к списку.</a><br />';

И тут ничего сложного: сначала проверяем, была ли форма отправлена нам при помощи нажатия кнопки с идентификатором «dell»; проверяем, присвоено ли переменной confirm значение «YES», это для того, что бы после нажатия на кнопку в админ панели «удалить» данные не сразу удалялись, а выдавался вопрос о подтверждении действия. Если все условия соблюдены, удаляем из БД данные. В конце SQL запроса было добавлено «LIMIT 1» — это означает, что будет удалено только одно значение. Мы же удаляем не пачкой данные, и только одного участника. Это не обязательный метод, но это считается хорошим методом программирования. Далее, если мы нажимаем на кнопку «Удалить» — запись удаляется. Очень хорошо и правильно удалять и картинку и записью и БД. Это можна сделать таким способом:

1
unlink(IMAGE_PAPH . $photo);

Но у меня почему-то не получается таким способом удалить файл. Если исполнить такой код:

1
2
3
4
5
6
7
$photo = 'my_pic.jpg';
unlink(IMAGE_PAPH . $photo);
if (file_exists(IMAGE_PAPH . $photo)) {
    echo '<br />Все ок!<br />';
} else {
    echo '<br />Что то пошло не так...<br />';
}

Тогда файл, имя которого в записан в переменную $photo успешно удаляется. Попробуйте у себя удалить файл вместе с записью.

Все мы знаем, что есть люди, которых заходят навредить вам, зайти по ссылке admin.php и удалить чужие рейтинги. Что бы такого не было, нужно себя обезопасить, создать логин и пароль для входи в админ панель, этим мы и займемся в следующем уроке.
С уважением, ProIN!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Max quality, min price, min time expenditure
Send me a message to: work@glogla.net
Portfolio