【问题标题】:Undefined index in PHP [duplicate]PHP中未定义的索引[重复]
【发布时间】:2011-08-06 07:47:07
【问题描述】:

可能重复:
PHP: “Notice: Undefined variable” and “Notice: Undefined index”

美好的一天!

我的代码中出现以下错误:

<?php
if (!$_POST['SUBMIT']){   //ERROR: Undefined index
?>
    <H2>Add Employee</H2>
    <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="POST">
    <table width="400" border="0" cellspacing="1" cellpadding="2">
       <tr>
            <td width="100">SSN</td>
            <td><input name="SSN" type="text" id="SSN"></td>
       </tr>
       <tr>
            <td width="100">&nbsp;</td>
            <td><input name="SUBMIT" type="SUBMIT" id="ADD" value="ADD"></td>
       </tr>
    </table>
    </form>
 <?php
    }
    else {
    //code here
    }
?>

如何消除上述错误?谢谢。

【问题讨论】:

  • 尝试执行 print_r($_POST)var_dump($_POST) 并首先查看数组中的内容
  • 尝试使用isset()!empty 而不是!$_POST

标签: php


【解决方案1】:

这应该是一个通知,而不是一个错误。

要解决这个问题,您必须检查是否设置了 $_POST['submit']

if(!isset($_POST['submit'])) {
    ...
}

【讨论】:

    【解决方案2】:

    这是您测试的地方,看看它不存在。应该是!isset($_POST['SUBMIT'])。这是因为不会设置索引SUBMIT,因此不会有诸如true 之类的值来传递if(...)isset() 检查是否实际设置了索引/变量。

    试试这个:

    <?php
        if (!isset($_POST['SUBMIT'])){   //ERROR: Undefined index
    ?>
    <H2>Add Employee</H2>
    <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="POST">
    <table width="400" border="0" cellspacing="1" cellpadding="2">
       <tr>
            <td width="100">SSN</td>
            <td><input name="SSN" type="text" id="SSN"></td>
       </tr>
       <tr>
            <td width="100">&nbsp;</td>
            <td><input name="SUBMIT" type="SUBMIT" id="ADD" value="ADD"></td>
       </tr>
    </table>
    </form>
    <?php
        }
        else {
        //code here
        }
    ?>
    

    【讨论】:

      【解决方案3】:
      <?php
        if (!isset($_POST['SUBMIT'])){   //ERROR: Undefined index
      ?>
      

      这会测试是否设置了索引

      【讨论】:

        【解决方案4】:

        选项:

        • 通过编辑 PHP.ini 中的设置禁用警告消息
        • 在变量名前添加@ 符号,这将抑制该特定行的错误。
        • 在进一步检查之前将您的代码更改为使用isset($_POST['SUBMIT'])

        其中,第三种选择绝对是最好的。您不应该假设用户提供的任何变量都将按照您的预期设置;您应该始终检查它是否已设置,并且是否已设置为预期值。否则你很容易受到黑客攻击。

        【讨论】:

        • 您建议的前两个要点是不好的做法,我不推荐。您要禁用警告的唯一时间是在生产环境中运行。永远不要使用@,永远。总有更好的选择。
        • @Ollie - 当然我说过这些选项是可用的,但我不推荐它们;我明确表示isset() 选项是要选择的选项。
        猜你喜欢
        • 1970-01-01
        • 2011-06-18
        • 2014-01-27
        • 2013-05-22
        • 1970-01-01
        • 1970-01-01
        • 2020-08-10
        • 2012-11-14
        相关资源
        最近更新 更多