【问题标题】:undefined index未定义索引
【发布时间】:2013-03-26 07:22:36
【问题描述】:

这句话有什么问题吗?

错误返回:

注意:未定义索引:inputBlock

注意:未定义索引:inputHouseUnit

代码:

if($conn){
    $insertData = "INSERT INTO ESTATEUNIT (BLOCK, UNIT) VALUES ('$_POST[inputBlock]', '$_POST[inputHouseUnit]')";
}

【问题讨论】:

  • 不要直接使用$_POST,在您的查询中未经验证。
  • 它说您在 $_POST 中没有带有这些名称的密钥 -> 检查您的 $_POST 中是否有任何东西,我认为这些代码的执行发生在发布之前
  • 你可以试试' or '1'='1' /* ';DROP TABLE tablename 这真的很神奇我的意思是你的代码容易受到sql注入如果你不想让其他人对你的数据库进行pow3ed,请转义所有请求

标签: php database


【解决方案1】:

PHP 数组索引可以是数字或字符串。

如果inputBlockinputHouseUnit 是字符串变量的标识符,则必须在它们前面加上$(例如$_POST[$inputBlock])。

如果它们是文字字符串,请将它们用'(单引号)或"(双引号)括起来(例如,$_POST["inputBlock"])。

显然,您必须小心转义单引号和双引号。此外,您应该在尝试将其放入数据库之前验证您的用户输入。

【讨论】:

  • 你如何对文本字段的名称进行分类?
  • @Bryan 抱歉,我不明白?
  • inputBlock 是文本字段的名称/ID。在这种情况下,它是否被视为文字字符串?
  • 是的,那么它是一个文字字符串。
【解决方案2】:
$insertData = "INSERT INTO ESTATEUNIT (BLOCK, UNIT) VALUES ('".$_POST['inputBlock']."', '".$_POST['inputHouseUnit']."')";

【讨论】:

    【解决方案3】:

    是的,有。它应该是这样的

    if($conn){
        $insertData = "INSERT INTO ESTATEUNIT (BLOCK, UNIT) VALUES ('" . $_POST["inputBlock"] . "', '" . $_POST["inputHouseUnit"] . "')";
    }
    

    我使用了字符串连接,因此您不必转义引号。

    您还应该考虑安全性,因为将原始帖子数据传递到数据库是非常不安全的 - 永远不要相信您的用户。

    【讨论】:

    • 为什么这个问题上的每个人都被否决了,没有明显的理由或评论为什么这样做?
    【解决方案4】:

    这里所有的答案都是错误的。甚至与问题相矛盾,其中显然指出inputBlock 被识别为数组索引。

    这句话有什么问题吗?

    不。你的陈述完全有效。

    您收到这些消息的原因是空的 $_POST 数组。很可能您正在使用 GET 方法调用此代码。

    将您的代码放入此 if 语句中:

    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        // your code goes here
    }
    

    此外,您必须始终正确格式化查询。至少描述的方式here

    【讨论】:

      【解决方案5】:

      确保这些变量是从

      $_POST[输入块] $_POST[inputHouseUnit]

      在 $sql 之前打印它们。

      另外,请确保您指定了 method=POST。如果没有,这些变量将作为 GET 提供。

      【讨论】:

        【解决方案6】:

        将各个 post 操作的值存储在单独的变量中,然后在 echo 函数中使用它们......就像这样......

        $x=$_POST[inputBlock];
        <br>$y=$_POST[inputHouseUnit];
        

        然后将echo函数中的变量代入....

        还要检查 post 方法是否接收到任何值,因为您可能只向您的 php 页面发送了一个值... 当变量没有从$_POST 数组中获得任何值时,通常会计算未定义的索引。

        【讨论】:

          猜你喜欢
          • 2012-12-08
          • 2012-09-18
          • 2015-03-08
          • 2018-08-02
          • 2012-08-24
          • 2016-10-24
          • 2015-03-23
          • 2023-03-29
          • 2013-01-26
          相关资源
          最近更新 更多