如何解决'Undefined Index'错误?

时间:2012-09-28 07:54:50

标签: php

以下是我的代码。验证完成后我得到一个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);
        ?>

3 个答案:

答案 0 :(得分: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>";
    }
}

这将遍历您的errors数组并为您遇到的每个错误打印<td> - 如果需要,您可以修改它以显示每个错误的行。

答案 1 :(得分:0)

将<{1}}用于此

isset

这将解决您的问题

答案 2 :(得分:0)

改变这个:

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

到:

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