2012-10-15 47 views
0

我試着用這個URL來刪除數據庫中的東西:通過url查詢從mysql中刪除。錯誤「的查詢是空的」

siteurl.com/mail.php?action=delete&mail_id=10 

與此代碼:

if ($action == delete) { 
    if(isset($_GET['id'])) { 
     $deleteid = $_GET['id']; 
     $sql = "DELETE FROM mail WHERE mail_id = ".$deleteid." LIMIT 1"; 
     $query = mysql_query($sql);  
     header('Location: '.$_SERVER['HTTP_REFERER'].' '); 
     exit(); 
    } 
} 

但它不工作,它顯示錯誤:Query was empty

怎麼了?

+2

我相信你在這裏得到一個錯字:: $ deleteid = $ _GET ['mail_id']; – s3polz

+0

$ action = $ _GET ['action']; $ deteleid = $ _GET ['mail_id']; if($ action ==「delete」) – thomasbabuj

+0

另外,除非你用define('delete','delete')設置一個常量,否則GET方法提交的任何值實際上都是一個字符串,它需要被封裝引號(除非數字)像'if($ _ GET ['action'] =='delete'){}' – inhan

回答

2

你有沒有得到這個動作?而不是獲得ID,你應該得到郵件ID。

$_GET['action'] 
$_GET['mail_id'] 
2

你在你的PHP代碼中使用的URL mail_idid。在兩個地方使用同一個,它會工作。

但是,這非常重要,您編寫的代碼有一個巨大的安全問題,稱爲SQL注入。 mysql_*函數已被棄用,所以請學習如何使用mysqli_*和/或PDO,並使用準備好的語句,以免它們受SQL注入攻擊。

+0

對於重要的SQL注入註釋+1。 – kapa

0

在您的查詢字符串中,您傳遞的變量名稱爲mail_id,但檢索時只使用了id。您必須使用mail_id,並且您不檢索變量值action。您應該使用$_GET['action'] == delete而不是此$action == delete。所以最後你的代碼應該是這樣的

if ($_GET['action'] == delete) { 
    if(isset($_GET['mail_id'])) { 
     $deleteid = $_GET['mail_id']; 
     $sql = "DELETE FROM mail WHERE mail_id = ".$deleteid." LIMIT 1"; 
     $query = mysql_query($sql);  
     header('Location: '.$_SERVER['HTTP_REFERER'].' '); 
     exit(); 
    } 
}