2012-01-28 7 views
0

Я пытаюсь создать скрипт PHP, который извлекает записи из базы данных, выборка работает нормально, но проблема в том, что при нажатии DELETE BUTTON она удаляет все записи из базы данных, что я нужно сделать здесь, чтобы удалить определенную запись (запись только в строке), как я могу это сделать?Удалить одну запись из базы данных MySQL

Вот мой код:

<table width="99%" border="0"> 
     <tr> 
      <td align="center">ID</td> 
      <td align="center">Username</td> 
      <td align="center">EDIT</td> 
      <td align="center">DELETE</td> 
     </tr> 

      <? 
     while ($fetch=mysql_fetch_array($q)) 
{ 
    ?>   
     <tr> 
      <td align="center"><? echo $fetch['useId']; ?></td> 
      <td align="center"><? echo $fetch['userUserName']; ?></td> 
      <td align="center"><? echo $fetch['useId']; ?></td> 
      <td align="center"> <input name="delete" type="submit" value="DELETE " onclick="<? mysql_query("DELETE FROM user WHERE useId = ". $fetch['useId'] ."") ?> "/></td> 
      </tr> 
      <? } ?> 

     </table> 
+1

Казалось бы, он удаляет все записи, когда вы просто открываете страницу. Вы смешиваете javascript и php. – jeroen

+0

@jeroen нет, это не потому, что я положил onClick, что означает, что я должен нажать, чтобы сделать действие. спасибо :) –

+0

Да, это так, потому что php обрабатывается до отправки страницы в браузер. – jeroen

ответ

1

Как Йерун отмечено в комментариях, вы смешиваете ваш PHP и JS. Вы не можете запускать PHP на странице, вызывая функцию JS, так как PHP анализируется до отображения страницы. Что вам нужно сделать, это использовать событие OnClick для отправки данных обратно на страницу, так что он перезагружается и называет код для удаления строки:

<table width="99%" border="0"> 
    <tr> 
    <td align="center">ID</td> 
    <td align="center">Username</td> 
    <td align="center">EDIT</td> 
    <td align="center">DELETE</td> 
    </tr> 

    <? 
    if(isset($_POST['useId']) && is_numeric($_POST['useId'])) 
    { 
     mysql_query("DELETE FROM user WHERE useId = ". $_POST['useId'] .""); 
    } 

    while ($fetch=mysql_fetch_array($q)) 
    { 
    ?> 
    <form method="post" action="yourPHPScript.php"/> 
    <tr> 
     <td align="center"><? echo $fetch['useId']; ?></td> 
     <td align="center"><? echo $fetch['userUserName']; ?></td> 
     <td align="center"><? echo $fetch['useId']; ?></td> 
     <input type="hidden" name="useId" value="<? echo $fetch['useId']; ?>"/> 
     <td align="center"> <input name="delete" type="submit" value="DELETE "/></td> 
    </tr> 
    </form> 
    <? } ?> 

    </table> 

Что я сделал здесь модифицируют свой код, чтобы добавить проверьте, используется ли переменная POST при загрузке страницы. Это будет существовать после того, как страница будет отправлена ​​формой. (Я предполагаю, что вы используете метод = «POST» в вашей форме, если вы используете GET, затем обновляете соответственно). Обратите внимание, что запрос удаления должен быть действительно запущен до того, как вы забудете свой запрос $ q, чтобы вы не увидели удаленных людей в своем списке после обновления страницы.

Я также проверяю, что useId является числовым (при условии, что ваши идентификаторы пользователей являются числовыми) в качестве проверки безопасности, чтобы убедиться, что кто-то не отправит фиктивные данные в ваш запрос. Наконец, я добавил скрытое поле в вашу форму, содержащую идентификатор пользователя.

EDIT: Забыл также указать, что каждая строка в таблице должна быть отдельной формой для правильной работы, так как вы хотите, чтобы только идентификатор пользователя для этой строки отправлялся как значение useID. Или, альтернативно, вы можете использовать JS, чтобы определить, какую строку вы удаляете и привязываете к идентификатору пользователя как GET var.

+0

Это всегда будет удалять последнюю запись, так как все скрытые входы называются 'userId'. Проверьте мой ответ, вам нужно добавить форму для каждой записи для этой конфигурации. – jeroen

+0

Да, я понял, что как только я разместил его :) Я обновлю код – TheOx

2

РНР обрабатывается до/в то время как вывод отправляется в браузер, так что вы удаляете все свои записи в то время как ваша страница строится.

Что вам нужно сделать, короче это (это только один из способов решить эту проблему ...):

  • дают каждой записи в отдельную форму
  • добавить скрытое поле для идентификатора запись
  • опубликовать форму на другую страницу, которая делает исключение, когда пользователь отправляет форму
Смежные вопросы