2013-08-21 40 views
-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。我怎样才能让它如此逗号显示,以便删除正确的评论?

+0

在你的文章中发送正确的数据 – Musa

+0

你为什么要调用'$ id = addslashes($ info ['id']);'为HTML生成输出? – Sven

回答

-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> 
+0

逃跑失败!该脚本与原始脚本一样脆弱。必须至少有一次调用'mysql_real_escape_string()' – Sven

+0

这不是我的代码(它被调整了)。我正在使用提问者的代码。你的评论是粗鲁的。 – Mic1780

+0

但是转义必须在你添加代码的地方进行。 – Sven

0

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

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

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

也请注意,mysql_*功能已被弃用,请发展与mysqli_*PDO新代码。