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