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);
        ?>
4

3 に答える 3

3

フォームエラーを空の配列に設定しています。

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

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

したがって、。という要素はありません['fname']

コードをさらに読むと、次のことが起こっています。

関数に空の配列(これは問題ありません)を送信していますが、エラーが発生した場合にのみ情報を入力しています-これまでのところ問題ありません。ただし、HTMLコードでは、何かが含まれているかどうかを確認しません(すべての情報が投稿されている場合は何も表示されません)が、エラーにアクセスしようとします。

次のコード行を変更することをお勧めします。

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

このようなものに:

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

これにより、エラー配列がループされ、発生したすべてのエラーが出力され<td>ます。必要に応じて、エラーごとに行を表示するように変更できます。

于 2012-09-28T07:57:50.383 に答える
0

これに使用issetする

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

これはあなたの問題を解決します

于 2012-09-28T07:58:10.147 に答える
0

これを変える :

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

に :

<td>
    <?php 
        if(isset($errors['fname'])){ 
            echo $errors['fname']; 
        } 
    ?>
</td>
于 2012-09-28T09:10:22.940 に答える