从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>
答
正如吉荣指出的意见,你的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。
答
的PHP是前处理/同时输出发送到浏览器,所以要删除所有记录,而你的网页正在建设中。
你需要在很短做的是(这只是一个方法来解决它...):
- 给每个条目的单独形式
- 添加一个隐藏字段的标识进入
- 发表您的形式到另一个网页,做删除操作,当用户提交表单
在我看来,它只是在您打开页面时删除所有记录。你正在混合使用JavaScript和PHP。 – jeroen 2012-01-28 15:24:41
@ jeroen不,因为我把onClick,这意味着我必须点击做一个动作。谢谢:) – 2012-01-28 15:27:13
是的,因为在页面发送到浏览器之前处理php。 – jeroen 2012-01-28 15:28:26