2011-03-11 83 views
0

我已經照着所有正確的MySQL的教程,但它仍然不會在我的表更新值,有人可以幫我?這些都是我下面的值:sql更新錯誤?

$editid = $_GET['id']; 
$newtitle = $_POST['title']; 
$newsneak = $_POST['sneak']; 
$newbody = $_POST['body']; 

$connect = mysql_connect("localhost","username","password") or die("Couldn't Connect. "); 
mysql_select_db("dr") or die ("Couldn't Find DB."); 

$query = mysql_query("SELECT * FROM news WHERE id=$editid"); 

$numrows = mysql_num_rows($query); 

if($numrows=!0) 
{ 
$querytitle = mysql_query("UPDATE news SET title=$newtitle WHERE id=$editid"); 
$querysneak = mysql_query("UPDATE news SET summary=$newsneak WHERE id=$editid"); 
$querybody = mysql_query("UPDATE news SET body=$newbody WHERE id=$editid"); 
header("Location: ../index.php"); 
} 
+0

您還應該將三個更新查詢合併爲一個。 – kjy112 2011-03-11 00:57:46

回答

3

在您的選擇(加myql_error檢查錯誤):

$result = mysql_query("SELECT * FROM news WHERE id='$editid'"); 
    if (!$result) { 
     die('Invalid query: ' . mysql_error()); 
    } 

您的更新:圍繞輸入數據

$querytitle = mysql_query("UPDATE news SET title='$newtitle' WHERE id='$editid'"); 
$querysneak = mysql_query("UPDATE news SET summary=$newsneak WHERE id='$editid'"); 
$querybody = mysql_query("UPDATE news SET body='$newbody' WHERE id='$editid'"); 

使用單引號也可以使用mysql_real_escape_string(); AV oid sql注入。

PHP mysql_real_escape_string


按@Tchalvak建議,包括結合提到,這些都是針對SQL注入以及更好的優化更多更新的工具,但要記住PDO如果你有PHP的MySQLi支持5+ :

PHP PDO

PHP MySQLi

+0

-1爲逃避而不是綁定。 – Kzqai 2011-04-14 02:35:57

+0

據我所知,我不認爲PHP的MySQL支持綁定參數(這是你所指的?)。它可能是mysqli或PDO。這需要海報有php5 +。海報使用mysql。請糾正我的錯誤。謝謝 – kjy112 2011-04-14 11:35:10

+0

我確實指的是使用PDO綁定,至少值得一提的是,'mysql_real_escape_string'確實比沒有好,但不是好得多。 – Kzqai 2011-04-14 15:50:45

1

您想使用mysql_error函數查看查詢返回的錯誤。

由於Jeremy Conley指出的集成,請注意不要讓mysql_error函數輸出在您的生產HTML中發佈。

1

我可以添加以及完成調試後請刪除任何mysql_error()輸出?這是攻擊者非常棒的信息,因爲它揭示了數據庫的細節。記錄它或不顯示錯誤...增加一點額外的安全性。

+0

當然,我會編輯我的答案。 – 2011-03-11 08:46:47