所以我正在尝试验证php的表单。
我的联系表格是您的典型表格
<form method="post" action="contact.php">
<table class="contact">
<tr>
<th>
<label for="name">Name</label>
</th>
<td>
<input type="text" name="name" id="name">
</td>
</tr>
<tr>
<th>
<label for="email">Email</label>
</th>
<td>
<input type="text" name="email" id="email">
</td>
</tr>
<tr>
<th>
<label for="message">Message</label>
</th>
<td>
<textarea name="message" id="message"></textarea>
</td>
</tr>
</table>
<input type="submit" value="Send">
现在我想为此添加php验证,所以我创建了以下内容:
if (empty($_POST) === false) {
$errors = array();
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
if(empty($name) === true || empty($email) === true || empty($message) === true) {
$errors[] = 'Please fill out all the required forms!';
} else {
if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
$errors[] = 'Sorry please enter a valid email address';
}
if (ctype_alpha($name) === false) {
$errors[] = 'Sorry, name must contain only letters!';
}
}
print_r ($errors);
现在我尝试将其打印出来,数组显示数据被归入字段,并且所有验证都能正常工作。我的问题是下一步我添加php以回显列表中的数组。
我在表单上方添加的代码是一个foreach循环,假设列出了任何验证失败时显示的错误:
<?php
if (empty($errors) === false) {
echo '<ul>';
foreach($errors as $error) {
echo '<li>' , $error ,'</li>';
}
echo '</ul>';
}
?>
但现在的问题是这样的:现在每次我填写表格,错误不会产生一个列表,他们只是生成原始数组,如果没有看到foreach。
任何建议或帮助都会很棒!
谢谢你们,
答案 0 :(得分:1)
if (count($errors)) echo '<ul><li>'.implode('</li><li>', $errors).'</li></ul>';
else echo 'No errors';
这是你看到“没有错误”吗?
除此之外,没有必要这样做
if(empty($name) === true)
empty($ name)为true或false。无需将其与真实比较。
if(empty($name))
非常好,否则就像问
if ((count(12)>0)==true)!=false)
这将是荒谬的。实际上
if(empty($name.$email.$message))
字符要少得多,结果与
相同if(empty($name) === true || empty($email) === true || empty($message) === true)