2011-04-15 101 views
8

可能重复:
PHP: “Notice: Undefined variable” and “Notice: Undefined index”未定义指数PHP

美好的一天!

我有下面的错误在我的代码:

<?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 
    } 
?> 

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

+0

试着做一个'print_r($ _ POST)'或'var_dump($ _ POST)',看看阵列里有什么 – kjy112 2011-04-15 12:48:04

+4

尝试使用'isset()'和'!empty'而不是'!$ _ POST'。 – Robik 2011-04-15 12:49:09

+0

@ kjy112 Array() – newbie 2011-04-15 12:49:21

回答

14

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

要解决的是你得检查$_POST['submit']是否设置:

if(!isset($_POST['submit'])) { 
    ... 
} 
4
<?php 
    if (!isset($_POST['SUBMIT'])){ //ERROR: Undefined index 
?> 

这个测试,如果索引设置

7

这就是你测试一下,看看是ISN”那里。它应该是!isset($_POST['SUBMIT'])。这是因为索引SUBMIT将不会被设置,因此将不具有真实值来通过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.ini编辑设置
  • 在变量名的前面加一个@迹象,这将抑制该特定行上的错误。
  • 在进一步检查之前,将您的代码更改为使用isset($_POST['SUBMIT'])

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

+1

你提出的前两个要点是不好的做法,我不推荐。您想禁用警告的唯一时间是在生产环境中运行时。永远不要使用@。总是有更好的选择。 – 2011-11-26 23:34:06

+0

@奥利 - 当然我说过这些选项是可用的,但我不推荐它们;我明确指出'isset()'选项是最好的选择。 – Spudley 2011-11-27 18:10:01