2014-02-11 411 views
-2
$sql="DELETE FROM Persons WHERE Day = '$_POST[Day]' AND Time = '$_POST[Time]'"); 

if (!mysqli_query($con,$sql)) 
{ 
    die('Error: ' . mysqli_error($con)); 
} 
echo "Records Deleted"; 

我想從上一頁解析的信息中刪除記錄。我的發言不會運行,我很困惑。PHP SQL刪除語句不起作用

任何人知道我做錯了什麼?

+4

首先,*請* **不要**做到這一點!這是非常不安全的。您對SQL注入非常開放。如果發送'Day ='會怎樣? DROP TABLE人員; - 「到你的頁面?你應該使用預處理語句,或者至少使用* mysqli_real_escape_string'。其次,你是否看到任何錯誤?你添加錯誤檢查,你看到什麼了嗎? 'mysqli_error'打印了什麼?如果你做'echo $ sql;'你看到了什麼? –

+1

只是有一個提示@RocketHazmat,告訴他們爲什麼它不安全。 – Albzi

+0

@BeatAlex:好的,我會這麼做的。 –

回答

-3

變化

$sql="DELETE FROM Persons WHERE Day = '$_POST[Day]' AND Time = '$_POST[Time]' "); 

$sql= "DELETE FROM Persons WHERE `Day` = '".$mysqli->real_escape_string($_POST['Day'])."' AND `Time` = '".$mysqli->real_escape_string($_POST['Time'])."'"; 
+0

做''...日='$ _POST [日]'...「'是100%罰款。 http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.simple –

+0

這件作品魅力:)謝謝 – himmerz

+0

這解決了你的問題?這兩條線是相同的!只是因爲在行尾有多餘的')'而已? –

0

此: -

$sql="DELETE FROM Persons WHERE `Day` = '".$mysqli->real_escape_string($_POST['Day'])."' AND `Time` = '".$mysqli->real_escape_string($_POST['Time'])."' "); 

首先,你有SQL注入,這裏是你應該專注於一些好東西: - http://en.wikipedia.org/wiki/SQL_injection

http://en.wikipedia.org/wiki/SQL_injection#Escaping

http://en.wikipedia.org/wiki/SQL_injection#External_links

而且,我我不確定,你如何能夠創建保留「Day」和「Time」名稱的列,首先你需要改變/將名稱更改爲保留名稱以外的名稱。

+0

更新了我的答案。此前,我建議更改'列名'。 –

+0

+1正確答案:) –

4

你的代碼是敞開的SQL注入,你的問題是由使用保留的話時間和日期造成的,與``包起來:

$day=mysqli_real_escape_string($con, $_POST['day']); 
$time=mysqli_real_escape_string($con, $_POST['time']); 
$sql="DELETE FROM Persons WHERE `Day` = '$day' AND `Time` = '$time' ");