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

改变这个:

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

至 :

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

用于isset

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

这将解决您的问题

于 2012-09-28T07:58:10.147 回答