За последние 24 часа нас посетили 17497 программистов и 1719 роботов. Сейчас ищут 1578 программистов ...

Кнопка: удаление записей из базы данных

Тема в разделе "PHP для новичков", создана пользователем DKelt, 24 апр 2012.

  1. DKelt

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

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Здравствуйте, передо мной стоит задача сделать кнопку, для удаление записей из базы данных. Т.е. Напротив каждой записи должна быть кнопка(ссылка) на удаление строки с этим id.
    Почитал несколько примеров, попробовал сделать - не получилось.

    Вот, собственно код, чувствую что чего-то не хватает, но не понимаю чего, подскажите пожалуйста, или скиньте ссылку на то, что можно почитать еще на эту тему, чтобы до меня дошло)

    Код (PHP):
    1. <html>
    2. <head>
    3. <title></title>
    4.  
    5. <link href="style.css" rel="stylesheet" type="text/css" />
    6. </head>
    7.  <div id="container">
    8.  <?
    9. include "Header.html";
    10. include "SideBar.html";
    11.  ?>
    12.  <body bgcolor="#FFFFFF" text="#000000">
    13.  
    14. <center mm_ta_src="dede">
    15. <h2>Подготовка новых лекционных курсов</h2>
    16. </center>
    17. <?
    18. /* Соединяемся с базой данных */
    19. $hostname = "localhost"; // название/путь сервера, с MySQL
    20. $username = "root"; // имя пользователя (в Denwer`е по умолчанию "root")
    21. $password = ""; // пароль пользователя (в Denwer`е по умолчанию пароль отсутствует, этот параметр можно оставить пустым)
    22. $dbName = "Diplom"; // название базы данных
    23.  
    24. /* Таблица MySQL, в которой хранятся данные */
    25. $table = "Podgotovka_Lekc_Kursov1";
    26.  
    27. /* Создаем соединение */
    28. mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");
    29.  
    30. // в какой кодировке получать данные от клиента
    31. @mysql_query('set character_set_client="utf8"');
    32.  
    33. // в какой кодировке получать данные от БД для вывода клиенту
    34. @mysql_query('set character_set_results="utf8"');
    35.  
    36. // кодировка в которой будут посылаться служебные команды для сервера
    37. @mysql_query('set collation_connection="utf8_general_ci"');
    38.  
    39. /* Выбираем базу данных. Если произойдет ошибка - вывести ее */
    40. mysql_select_db($dbName) or die (mysql_error());
    41.  
    42. /* Если была нажата ссылка удаления, удаляем запись */
    43. $del = $query = "delete from $table where (id='$del')";
    44. /* Выполняем запрос. Если произойдет ошибка - вывести ее. */
    45. mysql_query($query) or die(mysql_error());
    46.  
    47. /* Заносим в переменную $res всю базу данных */
    48. $query = "SELECT * FROM $table";
    49. /* Выполняем запрос. Если произойдет ошибка - вывести ее. */
    50. $res = mysql_query($query) or die(mysql_error());
    51. /* Узнаем количество записей в базе данных */
    52. $row = mysql_num_rows($res);
    53.  
    54. /* Выводим данные из таблицы */
    55. echo ("
    56. <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
    57. <html xmlns=\"http://www.w3.org/1999/xhtml\">
    58.  
    59. <head>
    60.  
    61.     <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf8_general_ci\" />
    62.  
    63.     <title>Вывод и удаление данных из MySQL</title>
    64.  
    65. <style type=\"text/css\">
    66. <!--
    67. body { font: 12px Georgia; color: #666666; }
    68. h3 { font-size: 16px; text-align: center; }
    69. table { width: 700px; border-collapse: collapse; margin: 0px auto; background: #E6E6E6; }
    70. td { padding: 3px; text-align: center; vertical-align: middle; }
    71. .buttons { width: auto; border: double 1px #666666; background: #D6D6D6; }
    72. -->
    73. </style>
    74.  
    75. </head>
    76.  
    77. <body>
    78.  
    79. <h3>Вывод и удаление ранее сохраненных данных из таблицы MySQL</h3>
    80.  
    81. <table border=\"1\" cellpadding=\"0\" cellspacing=\"0\">
    82.  <tr style=\"border: solid 1px #000\">
    83.   <td><b>№</b></td>
    84.   <td align=\"center\"><b>ФИО</b></td>
    85.   <td align=\"center\"><b>Наимнование курсов</b></td>
    86.   <td align=\"center\"><b>Объем часов</b></td>
    87.   <td align=\"center\"><b>Семестр</b></td>
    88.   <td align=\"center\"><b>Год</b></td>
    89.     <td align=\"center\"><b>Удаление</b></td>
    90.  </tr>
    91. ");
    92.  
    93. /* Цикл вывода данных из базы конкретных полей */
    94. while ($row = mysql_fetch_array($res)) {
    95.         echo "<tr>\n";
    96.     echo "<td>".$row['id']."</td>\n";
    97.     echo "<td>".$row['FIO']."</td>\n";
    98.     echo "<td>".$row['CourseName']."</td>\n";
    99.     echo "<td>".$row['Hours']."</td>\n";
    100.     echo "<td>".$row['Semestr']."</td>\n";
    101.     echo "<td>".$row['Year']."</td>\n";
    102.     /* Генерируем ссылку для удаления поля */
    103.  echo "<td><a name=\"del\" href=\"3_del.php?del=".$row["id"]."\">Удалить</a></td>\n";
    104.     echo "</tr>\n";
    105. }
    106.  
    107. echo ("</table>\n");
    108.  
    109. /* Закрываем соединение */
    110.  
    111. /* Выводим ссылку возврата */
    112. echo ("<div style=\"text-align: center; margin-top: 10px;\"><a href=\"index.html\">Вернуться назад</a></div>");
    113.  include "Footer.html";
    114. ?>
    115. </div>
    116. </body>
    117.  
    118. </html>
     
  2. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Код (PHP):
    1. $del = $query = "delete from $table where (id='$del')"; 
    у тебя $del пустой
    Код (PHP):
    1. $del=$_GET['del'];
    2. $query = "DELETE FROM {$table} WHERE (id='{$del}')"; 
    только так лучше не делать
     
  3. DKelt

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

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Все равно не удаляет, он просто обновляет страницу.
    А почему так лучше не делать?
     
  4. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    SQL-инъекция
     
  5. DKelt

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

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Ясно, спасибо, буду знать)
    Но мне все еще интересно почему это не работает(
     
  6. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    может круглые скобочки надо убрать...
     
  7. DKelt

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

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Убрал, не помогает, мне кажется ошибка где-то тут:
    Код (PHP):
    1.  echo "<td><a name=\"del\" href=\"3_del.php?del=".$row["id"]."\">Удалить</a></td>\n"; 
    Хотя может и нет, не знаю(
     
  8. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Вообще правильнее было бы как-то так:
    Код (PHP):
    1. /* Если была нажата ссылка удаления, удаляем запись */
    2. if(isset($_GET['del'])) {
    3.     $del = (int) $_GET['del'];
    4.     $query = "DELETE FROM `$table` WHERE `id` = $del";
    5.     /* Выполняем запрос. Если произойдет ошибка - вывести ее. */
    6.     mysql_query($query) or die($query . '<br />' . mysql_error());
    7. } 
    Запрос на удаление ты передаёшь скрипту 3_del.php . Тот код, который ты выложил в теме - это и есть тот самый 3_del.php?
     
  9. DKelt

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

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
  10. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    $row["id"] замени на $row['id']

    Добавлено спустя 21 секунду:
    и всё заработает

    Добавлено спустя 2 минуты 27 секунд:
    Вообще, всегда пиши индексы ассоциативных массивов в одинарных кавычках. А если уж так хочется в двойные засунуть - тогда в фигурные скобки
    Код (PHP):
    1. echo "<td><a name=\"del\" href=\"3_del.php?del={$row["id"]}\">Удалить</a></td>\n"; 
     
  11. DKelt

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

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Эмм сделал как вы сказали, все равно не работает(((
     
  12. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Отлаживай.
    Начни с самого начала - смотри, приходят ли параметры ГЕТ в твой скрипт. Для этого можешь написать где-нибудь в начале скрипта
    Код (Text):
    1. print_r($_GET);
    и потом посмотреть на странице, что тебе приходит в ГЕТ, когда нажимаешь ссылку свою.
     
  13. DKelt

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

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Попробовал, вот результат:
    Array ( [del] => )
     
  14. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Видимо в этом месте
    Код (PHP):
    1. echo "<td><a name=\"del\" href=\"3_del.php?del=".$row["id"]."\">Удалить</a></td>\n"; 
    в переменной
    Код (PHP):
    1. $row['id'] 
    скорее всего, ничего нет. Или вообще такой переменной не существует. Чтобы убедиться - можешь открыть исходный код сгенерированной HTML-странички в браузере (вроде везде ctrl+u) и посмотреть что там на месте, где должен быть id.
    Возможно, нету в б.д. такого поля? Может быть оно называется как-то по-другому? Может быть, там id написан с заглавной буквы?
    Можешь там, где в цикле выводятся строки написать print_r($row); и посмотреть, какие переменные приходят из б.д.
     
  15. DKelt

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

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Огромнейшее спасибо!! У меня действительно в базе было ID, а тут id, ппц, глупейшая ошибка. Огромное спасибо, а то 4 дня мучился: "что не так?"