我昨天制作了一个shoutbox,现在我正在尝试制作一个页面,网站管理员可以删除某些帖子。这是我目前的代码:
<form method="post">
<?PHP
include("config.php");
$data = mysql_query("SELECT * FROM shoutbox ORDER BY id DESC");
while ($info = mysql_fetch_array($data)) {
$id = addslashes($info['id']);
echo "<input type=\"checkbox\" value=\"$id\" name=\"delete[]\"><b>" .$info['name']. ": </b>" .$info['shout']."<br>";
}
if (isset($_POST['delete'])) {
foreach($_POST['delete'] as $item){
mysql_query("DELETE * FROM shoutbox WHERE id = ".$item." ");
echo "$item";
}
}
?>
<input type="submit" />
</form>
现在的问题是,在查询时它显示("id = ".$item.")
它正确地拉出了所有id,但是它们之间没有逗号,所以说我选择了id的5,4和2它插入了542而且它甚至都没有现有的身份证。我怎么能这样做,所以它会删除正确的评论?
答案 0 :(得分:0)
您的问题不是通过加入其他ID而创建的ID,而是使用DELETE
查询 - *
和DELETE
关键字之间不应有FROM
。您可以看到542
,因为您在循环中回显每个ID,在查询后没有任何新的行/空格/昏迷。
在执行任何查询之前,您应该确保连接到它的数据是安全的和预期的。对于数字ID,您可以使用intval()
仅包含数字输入:
mysql_query("DELETE FROM shoutbox WHERE id = ". intval($item));
另请注意,mysql_*
函数已弃用,请使用mysqli_*
或PDO
开发新代码。
答案 1 :(得分:-2)
试试这个
<form method="post">
<?PHP
include("config.php");
$data = mysql_query("SELECT * FROM shoutbox ORDER BY id DESC");
while ($info = mysql_fetch_array($data)) {
$id = addslashes($info['id']);
echo "<input type=\"checkbox\" value=\"$id\" name=\"delete[]\"><b>" .$info['name']. ": </b>" .$info['shout']."<br>";
}//END WHILE LOOP
if (isset($_POST['delete'])) {
$idList = "'" . mysql_real_escape_string(implode("','", $_POST['delete'])) . "'";
mysql_query("DELETE * FROM shoutbox WHERE id IN (" . $idList . ") ");
echo $idList;
}//END IF
?>
<input type="submit" />
</form>