-6

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

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

mysql_query("UPDATE `theme` SET color = '$color'  WHERE username='plmexico'");
4

3 回答 3

4

发出“未定义索引”通知,因为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'");

您也可以使用准备好的语句来修复它。

于 2012-08-27T00:19:19.363 回答
2

首先,您应该始终确保在将数据插入 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!
}

参考 -

于 2012-08-27T00:19:56.277 回答
2

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

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

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

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

于 2012-08-27T00:24:12.207 回答