2011-05-29 57 views
5

可能重複:
PHP: 「Notice: Undefined variable」 and 「Notice: Undefined index」

我剛學PHP和我不斷收到一個未定義的索引錯誤。我是從學習這本書有一個HTML表單和處理表單,使用以下格式PHP頁面:

<!-- The form fields are all set up something like this --> 
<input type="text" id="howlong" name="howlong" /><br /> 

// The PHP starts with one line like this for each of the form fields in the HTML 
$how_long = $_POST ['howlong']; 

// And there is one line for each one like this to output the form data: 
echo ' and were gone for ' . $how_long . '<br />'; 

我的工作的例子有大約12表單域。

奇怪的是,並非所有的變量都會拋出這個錯誤,但我看不到它的模式。

我已經檢查過所有的HTML字段名與我輸入的PHP $ _POST變量名匹配,並且我已經確定當我填寫表單並提交時,所有字段都填充了某些內容。有趣的是,可以爲該書下載的完整代碼也會引發此錯誤。

我意識到這個代碼可能不反映最佳實踐,它是從書的第一章,顯然我是一個小白:)

如果它的確與衆不同,我使用PHP 5.3.5上XAMPP 1.7.4與Windows 7家庭高級版。

回答

6
的名字

記得設置上張貼的形式標記的方法...

繼承人的代碼,我曾經嘗試你的,和它的工作對我說:在一個名爲test.php的文件

<html> 
    <body> 
    <form method="POST" action="testProc.php"> 
     <input type="text" id="howlong" name="howlong" /><br/> 
     <input type="submit" value="submit"/> 
    </form> 
    </body> 
</html> 

和testProc.php:

<?php 
if (isset($_POST)) { 
    if (isset($_POST["howlong"])){ 
    $howlong = $_POST['howlong']; 
    echo ' and were gone for ' . $howlong . '<br />'; 
    } 
} 
?> 

只是作爲一個提醒,使顯示的控制與樣式表我建議把一個表中的形式,就像這樣:

<html> 
    <body> 
    <form method="POST" action="testProc.php"> 
     <table> 
     <tbody> 
      <tr> 
      <th> 
       <label for="howlong">How long? :</label> 
      </th> 
      <td> 
       <input type="text" id="howlong" name="howlong" /> 
      </td> 
      </tr> 
      <tr> 
      <input type="submit" value="submit"/> 
      </tr> 
     </tbody> 
     </table> 
    </form> 
    </body> 
</html> 

希望你可以使用這...

+0

什麼是最好的方式使用isset()爲十幾個表單字段? – red4d 2011-05-30 23:04:59

+0

Pffft。我讓一個簡單的語法錯誤在那裏出現三次...使用了一個美元符號,我不應該'$ _POST ['$ howlong']'。如果我沒有運行你推薦的isset,我會不停地撓撓我的腦袋。現在工作!謝謝! – red4d 2011-05-30 23:57:13

+0

發生了很多...我個人不喜歡使用美元符號來表示變量。關於你的第一個評論,我想到的一件事就是用你想要測試的鍵組成一個數組(讓我們稱之爲「a = {」name「,」passwd「,」email「,...};' )並遍歷它,在'for'循環內一次性調用每個鍵的'isset($ _ POST [$ a [i]])'。儘管我從來沒有這樣做過,但我一直都在測試每一個關鍵的東西。然而,我認爲你應該儘可能縮短表單的「用戶友好性」hehehe – Throoze 2011-05-31 03:19:05

1

您可以測試以查看是否使用isset()函數設置了變量。

此外,並非所有HTML表單元素都會在所有情況下發布值。常見的例子是複選框;未經檢查的複選框不構成發佈回服務器的數據的一部分。因此,您期望設置的$ _POST元素將不會被設置。

2

你需要檢查表單提交,然後你可以嘗試使用$ _POST數組,所以你應該把這個代碼上面:

if(isset($_POST['send'])) { 

,其中「送」是提交按鈕