如何摆脱“注意:未定义的索引:C:\xampp\htdocs\cpages\cmain\userfooter.php 中的颜色在第 31 行错误”?
$color = ($_POST['color']);
mysql_query("UPDATE `theme` SET color = '$color' WHERE username='plmexico'");
如何摆脱“注意:未定义的索引:C:\xampp\htdocs\cpages\cmain\userfooter.php 中的颜色在第 31 行错误”?
$color = ($_POST['color']);
mysql_query("UPDATE `theme` SET color = '$color' WHERE username='plmexico'");
发出“未定义索引”通知,因为color
. $_POST
这是因为color
没有从前一页传递过来。您可以在尝试访问之前检测密钥是否存在:
if(array_key_exists("color", $_POST)) {
$color = $_POST["color"];
}else{
$color = "red"; // no color given; default to red
}
您还应该知道您的代码包含一个明显的SQL 注入漏洞。您可以通过在将其插入查询之前转义来解决此$color
问题:mysql_real_escape_string
mysql_query("UPDATE theme SET color = '" . mysql_real_escape_string($color) . "' WHERE username='plmexico'");
您也可以使用准备好的语句来修复它。
首先,您应该始终确保在将数据插入 SQL 查询之前清理数据。您的代码目前很容易受到攻击。最简单的方法是使用mysql_real_escape_string
. 另一种方法是发送您已经定义的颜色的 id。这样您就可以 100% 确定插入到 SQL 查询中的值是“安全的”。
发生错误是因为参数color
未发送到服务器。
您可以在发送数据之前对其进行验证(例如使用 Javascript),也可以在服务器上对其进行验证。您可以使用该isset()
函数来测试参数是否存在。所以在你的情况下 -
if (!isset($_POST['color'])){
// return an error here! The color paramter was not sent!
}
参考 -
该“通知”是一个错误。它的消息“未定义索引”意味着您正在尝试在不存在的键处访问数组的值。您应该在访问它之前检查该值是否已设置(如果未设置,则可选择将其设置为默认值,例如黑色)。
$color = isset($_POST['color']) ? $_POST['color'] : "#000000";
另外,请注意 mysql 数据库功能正在弃用,不再更新。您应该改为使用 mysqli 或 PDO 进行数据库交互。
此外,您的代码在当前状态下极易受到 SQL 注入的攻击。您应该使用mysql_real_escape_string
(如果您选择升级到其中一个 API,则使用它的 mysqli/PDO 等效项)来防止它们。