php notice未定义索引摆脱它

时间:2012-08-27 00:14:57

标签: php

如何摆脱通知:未定义的索引:第31行的C:\ xampp \ htdocs \ cpages \ cmain \ userfooter.php中的颜色错误

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

mysql_query(“UPDATE theme SET color ='$ color'WHERE username ='plmexico'”);

3 个答案:

答案 0 :(得分:4)

发布了“未定义的索引”通知,因为color中没有$_POST个密钥。这是因为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'");

您也可以使用预准备语句修复它。

答案 1 :(得分: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!
}

参考文献 -

答案 2 :(得分:1)

“通知”是一个错误。它的消息“未定义索引”表示您尝试以不存在的键访问数组的值。您应该在访问之前检查该值是否已设置(如果未设置,则可选择将其设置为默认值,如黑色)。

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

另请注意,mysql数据库函数正在弃用,不再更新。您应该使用mysqli或PDO进行数据库交互。

此外,您的代码在当前状态下极易受到SQL注入的攻击。如果您选择升级到其中一个API,则应使用mysql_real_escape_string(或其mysqli / PDO等效项)来阻止它们。