从MySQL数据库中删除一条记录

问题描述:

我试图做一个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 2012-01-28 15:24:41

+0

@ jeroen不,因为我把onClick,这意味着我必须点击做一个动作。谢谢:) – 2012-01-28 15:27:13

+0

是的,因为在页面发送到浏览器之前处理php。 – jeroen 2012-01-28 15:28:26

正如吉荣指出的意见,你的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变量useId。这个页面一旦被表单提交,就会存在。 (我假设你在表单中使用method =“POST”,如果你使用GET,那么就相应地更新)。请注意,删除查询应在运行$ q查询之前真正运行,以便在页面刷新后看不到列表中已删除的人员。

我还检查useId是数字(假设您的用户ID是数字)作为安全检查,以确保有人不会将伪造数据发送到您的查询。最后,我将隐藏字段添加到包含用户标识的表单中。

编辑:忘记也表明,您的表中的每一行都需要是一个单独的窗体才能正常工作,因为您只希望该行的用户ID作为useID值发送。或者,您也可以使用JS来确定要删除哪一行,并将该用户标识作为GET var。

+0

这将总是删除最后一条记录,因为所有隐藏的输入都被命名为'userId'。检查我的答案,您需要为每个条目添加一个表单以使此配置生效。 – jeroen 2012-01-28 15:49:05

+0

是的,我意识到只要我发布:)我会更新代码 – TheOx 2012-01-28 15:52:04

的PHP是前处理/同时输出发送到浏览器,所以要删除所有记录,而你的网页正在建设中。

你需要在很短做的是(这只是一个方法来解决它...):

  • 给每个条目的单独形式
  • 添加一个隐藏字段的标识进入
  • 发表您的形式到另一个网页,做删除操作,当用户提交表单