2011-11-22 125 views
1

我目前正在嘗試通過PHP,它允許用戶更新我的數據庫中的數據的頁面。我遇到了兩個問題:首先,當我運行我的代碼時,出現「錯誤:查詢爲空」,但是對數據庫進行了更新,這導致我遇到了第二個問題。更新完成後,留空的字段(如果用戶不需要將數據輸入所有字段(如果只有一兩個要更新的話)將變爲空白。這是因爲我當前的腳本更新了所有的元素,但是有什麼辦法可以讓我把它放在哪裏如果用戶把輸入字段留空,當數據庫更新時什麼都不會改變?創建一個「更新」頁面MYSQL/PHP

這裏是我的代碼:

if (isset($_POST['submit'])) { 
    $id = $_POST['id']; 
    $lastname = $_POST['lastname']; 
    $firstname = $_POST['firstname']; 
    $color = $_POST['color']; 
    $number = $_POST['number']; 

    // need id to be filled and need at least one other content type for changes to be made 
    if (empty($id) || empty($lastname) and empty($firstname) and empty($major) and empty($gpa)) { 
     echo "<font color='red'>Invalid Submission. Make sure you have an ID and at least one other field filled. </font><br/>"; 
    } else {  
     // if all the fields are filled (not empty) 
     // insert data to database 
     mysql_query ("UPDATE students SET lastname = '$lastname', firstname = '$firstname', favoritecolor = '$color', favoritenumber = '$number' WHERE id = '$id'"); 

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

     // display success message 
     echo "<font color='blue'>Data updated successfully.</font>"; 
     // Close connection to the database 
     mysql_close($con); 
    } 
} 
+3

這無關你的問題,但你的腳本很容易受到一個非常危險的漏洞被稱爲[SQL注入(http://en.wikipedia.org/wiki/SQL_injection)。只是想確保你知道並瞭解到這一點。 –

回答

2

要回答你的問題,你需要捕捉查詢的結果並檢查錯誤。

$query = mysql_query(/*query*/); 
if (!$query) 
    //error handling 

請務必閱讀SQL注入,根據我的評論。

0

if (!mysql_query($sql,$con))這裏$sql$con沒有定義。你應該兩次運行mysql_query

0

一些猜測:

  1. 沒有連接mysql功能我想這就是所謂的其他地方
  2. 打印出您的查詢字符串。我總是發現明確表示什麼是字符串,以及'SELECT * FROM '.%tblvar.';';的變量是多少調試友好的。
1

爲了更好地幫助你瞭解你看到的行爲,我會向你解釋什麼是與您的代碼錯誤

mysql_query ("UPDATE students SET lastname = '$lastname', firstname = '$firstname', favoritecolor = '$color', favoritenumber = '$number' WHERE id = '$id'"); 

這第一部分是執行MySQL查詢,不管這一事實,你做了而不是把它的返回值賦給一個變量。

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

第二部分於試圖通過使還沒有被設定的第一參數$sql運行查詢,並且其也出現第二參數$con不被置位。您運行的第一個查詢執行得很好,而第二個查詢可能永遠不會執行。您的解決方案:

$result = mysql_query(
    "UPDATE students 
    SET lastname = '$lastname', firstname = '$firstname', 
     favoritecolor = '$color', favoritenumber = '$number' 
    WHERE id = '$id'" 
); 
if (!$result) { 
    throw new Exception('Error: ' . mysql_error()); 
    // or die() is fine too if that's what you really prefer 
}