2013-08-21 61 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新代碼。