如何摆脱通知:未定义的索引:第31行的C:\ xampp \ htdocs \ cpages \ cmain \ userfooter.php中的颜色错误
$color = ($_POST['color']);
mysql_query(“UPDATE theme
SET color ='$ color'WHERE username ='plmexico'”);
答案 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漏洞。您可以先将$color
与mysql_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等效项)来阻止它们。