【发布时间】:2016-06-16 13:21:57
【问题描述】:
这里是挖掘。我一遍又一遍地查看我的代码,直到我的头脑麻木,仍然无法弄清楚问题出在哪里。
我正在使用可在类似 CRM 的应用程序的后端使用的删除功能。表单内有一个用户列表,每个注册用户都有一个复选框,还有一个提交按钮,用于运行代码以通过他们的 ID 从数据库中删除选定的用户。
复选框在 foreach 循环中生成,该循环使用从选择查询返回的数组填充表。每个用户的每个复选框行都是这样的:
<input type="checkbox" name="checked[]" value="<?php echo ($userfromforeach['id']); ?>">
表单的提交按钮包含(name="deleteusers")。
而表单提交的实际删除代码如下:
// Delete users by selected as posted by form
if(isset($_POST['deleteusers']))
{
foreach($_POST['checked'] as $user)
{
$query = "
DELETE
FROM $usertable
WHERE id = $user
";
try
{
// These two statements run the query against your database table.
$stmt = $db->prepare($query);
$stmt->execute();
}
catch(PDOException $ex)
{
die("MySQL execution error, please contact technical support.");
}
}
// $_POST['checked'] = NULL;
header("Refresh:0");
}
由于某种我不知道的原因,一切似乎都在正确触发,但是没有从数据库中删除任何记录。没有返回 MySQL 错误,当我将 print_r 取出 $_POST['checked'] 变量时,它会按预期显示:
Array ( [0] => 122 [1] => 115 )
^ 每个键的值是用户的 ID。
有什么想法吗?我是否只是因为错过了一些完全基本的东西而在自己的脑海中提出了一个问题?非常感谢您的帮助。
【问题讨论】:
-
回显您正在生成的 SQL - 它看起来是否正常。另外-您没有正确使用准备好的语句。这个想法是你用占位符准备语句一次,然后执行多次,每次传入不同的参数。
-
你的
foreach好像不见了{ -
你使用的不是准备好的语句
-
回显 SQL 确实看起来应该也...我知道,我没有正确使用准备好的语句 - 我对 PHP 比较陌生,这是一个演示,我有一个时间限制,准备好的语句让我感到困惑,所以对于非生产演示,我决定运行未准备好的查询就可以了。 - 感谢您的提醒。抱歉,错字 - 在上面的问题中编辑。
-
echo
$query = "DELETE FROM $usertable WHERE id = $user";并粘贴它返回的内容