2011-04-15 278 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