За последние 24 часа нас посетили 22514 программистов и 1279 роботов. Сейчас ищут 797 программистов ...

Удаление записей с таблицы

Тема в разделе "PHP для новичков", создана пользователем Kylun-Serg, 11 мар 2018.

Метки:
  1. Kylun-Serg

    Kylun-Serg Новичок

    С нами с:
    28 фев 2018
    Сообщения:
    16
    Симпатии:
    1
    Добрый день) Есть код, который отрисовует таблицу с БД и у него есть функция удаление записей с таблицы. Все вроде как-то работает, но при удалении записи, она удаляется не сразу, а только после обновления страницы. Можно ли как-то это исправить?
    PHP:
    1. <?php
    2.  
    3. define(HOST, 'localhost');
    4. define(USER, 'root');
    5. define(PASSWORD, '');
    6. define(DB_NAME, 'test');
    7.  
    8. $link = mysqli_connect(HOST, USER, PASSWORD, DB_NAME) or die(mysqli_connect_error($link));
    9.  
    10. mysqli_query($link, "SET NAMES 'utf8'");
    11.  
    12. $query = "SELECT * FROM workers";
    13.  
    14. $result = mysqli_query($link, $query) or die(mysqli_error($link));
    15.  
    16. while ($row = mysqli_fetch_assoc($result) ) {      
    17.     $mass[] = $row;  
    18. }
    19.  
    20. $show = '<table border = "1">';
    21.  
    22. $show .= '<tr>';
    23. foreach($mass[0] as $key => $val) {
    24. $show .= '<th>'.$key.'</th>';
    25. }
    26.  
    27. foreach ($mass as $value) {                
    28.     $show .= '<tr>';                              
    29.     foreach ($value as $subvalue) {      
    30.         $show .= '<td>'.$subvalue.'</td>';
    31.     }
    32.     $show .= '<td><a href="?del='.$value['id'].'">удалить</a></td>';
    33.     $show .= '</tr>';
    34. }
    35.  
    36. $show .= '</table>';
    37.  
    38. if(!empty($_GET['del'])){
    39.     $queryDel = "DELETE FROM `workers` WHERE id=".$_GET['del'];
    40.     mysqli_query($link, $queryDel) or die(mysqli_error($link));
    41. }
    42. mysqli_close($link);
    43.  
    44. ?>
    45.  
    46. <!DOCTYPE html>
    47. <html lang="en">
    48. <head>
    49.     <meta charset="UTF-8">
    50.     <title>Document</title>
    51.     <link rel="stylesheet" type="text/css" href="style/style.css">
    52. </head>
    53. <body>
    54.     <?=$show?>
    55. </body>
    56.  
    57. </html>
    [​IMG]
     
  2. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    А подумать?

    При клике, страница обновляется.

    1) Считывает 20 строк с таблицы базы данных
    2) Удаляет одну из строк.

    Интересно, что произойдет, если действия поменять местами?

    p.s. не айс код, проверки на существовании записи нет, + дыра.
     
    Kylun-Serg нравится это.
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    Век живи, век учись.
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    @Kylun-Serg, разделите вывод и собственно удаление. Для удаления в протоколе есть спец. метод, но HTML не позволяет его использовать, поэтому обычно ограничиваются методом POST. Метод GET также допустимо использовать для удаления, если способны обезопасить пользователя и собственно БД от «случайных удалений». Завершающим действием при удалении обычно является редирект методом GET на список «оставшихся» объектов или на спец. страницу результата операции (а в первом случае результат обычно выводится в тайле, т.е. спец. предназначенной для этого области или всплывающем окошке).
     
    Kylun-Serg нравится это.
  5. Kylun-Serg

    Kylun-Serg Новичок

    С нами с:
    28 фев 2018
    Сообщения:
    16
    Симпатии:
    1
    Я запостил вопрос, а потом минут через 30 мне дошло, что сначала нужно удалить, а потом рисовать))) Код учебный, изучаю пхп и практикуюсь, цели писать проверки не было, но для себя уже написал. +ДЫРА - Вы имеете в виду метод GET?
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Да, GET-парметр. Нет валидации/фильтрации. Также можете вставлять в запрос строкой (в кавычках), но тогда нужно экранировать плюс это чревато пропуском левых дублей, если не ошибаюсь.
    --- Добавлено ---
    P.S. Чтобы обезопасить код от «пропуска левых дублей», можно попробовать по ходу запроса перегонять значения поля id в символьный тип. Как-то так:
    Код (Text):
    1. ... WHERE CAST(`id` AS CHAR)='{$id}'
     
  7. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Бред.
    @Kylun-Serg named params.