-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>";
    }
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,这甚至不是现有的 id。我怎样才能让它显示逗号以便删除正确的评论?

4

2 回答 2

0

您的问题不在于通过加入其他 ID 创建的 ID,而在于您的DELETE查询 - 应该没有*between DELETEandFROM关键字。您可以看到542,因为您在循环中回显每个 ID,查询后没有任何新行/空格/逗号。

在执行任何查询之前,您应该确保连接到其中的数据是安全且符合预期的。对于数字 ID,您可以使用intval()只有数字输入:

mysql_query("DELETE FROM shoutbox WHERE id = ". intval($item));

另请注意,该mysql_*功能已弃用,请使用mysqli_*或开发新代码PDO

于 2013-08-21T20:07:10.027 回答
-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>
于 2013-08-21T19:56:33.187 回答