2012-09-28 72 views
0

以下是我的代碼。當驗證完成並即將填充「成功」消息時,我會得到一個undefined index error如何解決'未定義索引'錯誤?

我已經挖掘並確定問題所在(<td><?= $errors['fname'] ?></td>),但我不明白的是定義導致錯誤的索引的正確方法是什麼。有人能突出我出錯的地方嗎?謝謝。

  <?php 
     function VerifyForm(&$values, &$errors) 
     { 
     if($values['fname'] == "") 
     {$errors['fname'] = 'empty';} 
     } 
     function DisplayForm($values, $errors) 
     { 
     ?> 
     <html> 
     <head> 
     <title>Register</title> 
     </head> 
     <body> 
     <form action="<?= $_SERVER['PHP_SELF'] ?>" method="POST"> 
     <table border="1"> 
     <tr> 
     <td>First Name :</td> 
     <td><input type="text" name="fname" value="<?= htmlentities($values['fname']) ?>"/> 
     <td><?= $errors['fname'] ?></td> 
     </tr> 
     <tr><td colspan="2" align="center"><input type="submit" value="Submit"></td></tr> 
     </table> 
     </form> 
     </body> 
     </html> 
     <?php 
     } 
     function ProcessForm($values) 
     { 
     echo ("<p>Your record has been successfully added!</p>"); 
     } 
     if ($_SERVER['REQUEST_METHOD'] == 'POST') 
     { 
     $formValues = $_POST; 
     $formErrors = array(); 

     if (!VerifyForm($formValues, $formErrors)) 
     DisplayForm($formValues, $formErrors); 
     else 
     ProcessForm($formValues); 
     } 
     else 
     DisplayForm(null, null); 
     ?> 
+0

的錯誤意味着'$錯誤[」 fname']'沒有定義。您應該初始化它以擺脫錯誤消息。 – wroniasty

+0

感謝wroniasty。你能詳細介紹一下初始化部分。 –

+0

@MohanWijesena是你的代碼嗎? –

回答

3

要設置格式錯誤的空數組:

$formValues = $_POST; 
$formErrors = array(); 
// Did you mean to assign it some values before using it? 

if (!VerifyForm($formValues, $formErrors)) 

所以它有沒有所謂的['fname']元素。

通過您的代碼閱讀進一步,下面發生的事情:

您發送功能的空數組(這是好的),但你只用信息填充它,如果有一個錯誤 - 到目前爲止好。然而,在您的HTML代碼中,您不檢查它是否包含任何內容(並且如果它的所有信息都已發佈,則不會有任何內容),但仍嘗試訪問其中的任何錯誤。

你可能想改變這行代碼:通過你的錯誤陣列

if(!empty($errors)) 
{ 
    foreach($errors as $key => $val) 
    { 
     echo "<td>".$key." - ".$val."</td>"; 
    } 
} 

這將循環和你有每個錯誤打印出<td>

<td><?= $errors['fname'] ?></td> 

爲了這樣的事情 - 如果需要,您可以修改它以顯示每行錯誤的行。

+0

@MohanWijesena看到編輯,我給了你一些額外的代碼/信息。 – Fluffeh

0

<?php if(isset($errors['fname'])) { echo $errors['fname']; } ?> 

使用isset這將解決你的問題

0

改變這一點:

<td><?= $errors['fname'] ?></td> 

到:

<td> 
    <?php 
     if(isset($errors['fname'])){ 
      echo $errors['fname']; 
     } 
    ?> 
</td>