2012-08-27 37 views
-5

怎麼辦擺脫通知:未定義指數:顏色在C:\ XAMPP \ htdocs中\ cpages \ CMAIN \ userfooter.php上線31錯誤PHP通知未定義指數擺脫它

$color = ($_POST['color']); 

mysql_query(「UPDATE theme SET color ='$ color'WHERE username ='plmexico'」);

+4

你應該知道這裏有一個公然的[SQL注入](https://en.wikipedia.org/wiki/SQL_injection)漏洞。 – icktoofay

+0

[**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再維護和[棄用過程](http:// j。mp/Rj2iVR)已經開始。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 –

回答

1

首先,您應該始終確保在將數據插入SQL查詢之前清理數據。你的代碼是vulnerable at the moment。最簡單的方法是使用mysql_real_escape_string。另一種方法是發送你已經定義的顏色的id。這樣你可以100%確定你插入SQL查詢的值是「安全的」。

由於沒有將參數color發送到服務器,因此發生錯誤。

您可以在發送數據之前驗證數據(例如使用Javascript),並在服務器上對其進行驗證。您可以使用isset()函數來測試參數是否存在。所以你的情況 -

if (!isset($_POST['color'])){ 
    // return an error here! The color paramter was not sent! 
} 

參考 -

+0

你沒有工作,但感謝您的幫助 –

+0

@pab - true:P我缺少if語句的右括號。 – Lix

+0

我已經知道了,不過謝謝:) –

4

由於$_POST中沒有color密鑰,因此發出'未定義索引'通知。這是因爲color未從上一頁傳遞。如果該鍵存在您嘗試訪問之前,您可以檢測:

if(array_key_exists("color", $_POST)) { 
    $color = $_POST["color"]; 
}else{ 
    $color = "red"; // no color given; default to red 
} 

你也應該知道你的代碼中包含一個公然SQL injection漏洞。您可以通過轉義$colormysql_real_escape_string將其插入查詢之前解決這個問題:

mysql_query("UPDATE theme SET color = '" . mysql_real_escape_string($color) . "' WHERE username='plmexico'"); 

您也可以通過使用準備好的語句解決這個問題。

+0

我已經將表單分隔到另一個頁面 –

+0

,這裏的形式爲

' –

+0

@Pablo:如果我理解你正確,您將表單移至與處理輸入的頁面分開的頁面。如果是這樣,您需要將'form'的'action'屬性設置爲處理輸入的頁面。 – icktoofay

1

即 「通知」 是一個錯誤。它的消息「未定義索引」意味着你正試圖訪問一個不存在的鍵的數組值。您應該在訪問之前檢查該值是否已設置(並且如果未設置,可以將其設置爲默認值,例如黑色)。

$color = isset($_POST['color']) ? $_POST['color'] : "#000000"; 

此外,請注意,mysql數據庫功能正在過時的道路上,不再被更新。您應該使用mysqli或PDO進行數據庫交互。

此外,您的代碼在當前狀態下極易受SQL注入攻擊。您應該使用mysql_real_escape_string(或者如果您選擇升級到其中一個API,則使用其等效的mysqli/PDO)以阻止它們。