2015-12-09 104 views
0

我試圖在帖子旁邊創建一個鏈接,以便我可以點擊鏈接並刪除帖子。現在,它似乎工作。但是,我似乎無法刪除其他用戶發佈的帖子。現在,使用下面的代碼,我可以刪除由我製作的帖子。從數據庫中刪除帖子

我該如何解決這個問題?

這裏是我的代碼:

<?php 

session_start(); 

//echo $_GET[ID]; 

if ($_SESSION['Access'] <> "D"){ 
    header("location:example.com"); 
    exit(); 
} 

$con = mysql_connect("---","---","---"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 
mysql_select_db("---", $con); 


$sql ="DELETE FROM Posts WHERE ID = '$_GET[id]'"; 

//$sql = 'INSERT INTO `Entries` (`ID`, `Date`, `Content`, `Username`) VALUES (NULL, CURDATE(), \'blah\', \'Ryan\');'; 

if (!mysql_query($sql,$con)) 
{ 
die('Error: ' . mysql_error()); 
} 

mysql_close($con); 

header("location:example.com"); 

exit(); 

?> 
+0

您收到了什麼錯誤?如果ID是一個整數,則可以在$ _GET [id]周圍放置單引號。另外,它似乎像$ _GET [id]應該是$ _GET [「id」]; – Josh

+0

此腳本易受SQL注入攻擊。查看準備好的陳述。 http://php.net/manual/en/pdo.prepared-statements.php – Josh

+0

嘗試var_dump($ _GET ['id'])來查看它是否有任何數據 –

回答

0

首先,mysql_庫已過時,在PHP的新版本中刪除。我們應該使用更新的更受支持的庫,如mysqlipdo。接下來,您將對SQL注入開放,這可能會讓您的應用程序完全容易受到惡意用戶的攻擊。

我們可以很容易地解決它們兩個。

首先,我們需要確保提供了id參數,以便我們的腳本不會不必要地產生undefined index錯誤。

$id = isset($_GET['id']) ? $_GET['id'] : false; 

if($id){ 
    //now we do everything else in here 
} 

接下來,我們將使用使用MySQLI庫創建面向對象的連接。這將繼續在if($id)有條件。

$con = new mysqli('host', 'user', 'pass', 'database'); 

現在,我們將繼續使用一個prepared語句來安全地刪除此並結合我們的價值觀來查詢,而不是將它們直接。

$stmt = $con->prepare('delete from Posts where ID = ?'); 
$stmt->bind_param('i', $id); 

$result = $stmt->execute(); 
$stmt->store_result(); 

if($result){ 
    echo 'Safely deleted '. $stmt->num_rows .' rows from the database.'; 
} else { 
    echo 'Failed to delete from the database.'; 
} 

這是執行刪除的安全和可靠的方法。但是,您還應該檢查用戶是否有權刪除等。否則,任何用戶都可以通過example.com/delete.php?id=18,並刪除ID爲18的帖子。

+0

好的,那麼我的最後一段代碼是什麼樣的? – Matt