[英]How to validate contact form required fields and display the error message accordingly
[英]Validating all the fields to display the error message in Contact Form in PHP
如果我单击“提交”按钮,则需要包含多个错误。 如果用户未填写所有必填字段,则错误应显示在表单顶部。当前,当我单击“提交”按钮时,错误指向“注释”行,并且仅显示“注释”错误
我用了- $error=$error."<br/> or $error.="<br />
它们都不如预期那样工作
如何用和错误信息显示我的所有字段? 我的代码如下所示
<?php
if ($_POST["submit"]) {
if($_POST['email']) {
$error="<br/>Please enter your Email address";
}
if($_POST['dest']) {
$error.="<br/>Please enter your Destination Name ";
}
if($_POST['dcity']) {
$error.="<br/>Please enter your Departure City ";
}
if($_POST['name']) {
$error.="<br/>Please enter your Name ";
}
if($_POST['cnum']) {
$error.="<br/>Please enter your Contact Number";
}
if($_POST['adults']) {
$error.="<br/>Please enter Number Of Adults";
}
if($_POST['child']) {
$error.="<br/>Please enter Number Of Children";
}
if($_POST['comment']) {
$error.="<br/>Please enter Your Comments ";
}
if ($error){
$result='<div class="alert alert-danger"><strong>There were error(s) in your form:</strong>' .$error.' </div>';
}
}
?>
首先,您应该正确检查字段是否为空,如下所示:
if(empty($_POST['email'])) {
您的代码实际上是相反的,如果变量为true(-ish),则当前条件已匹配。 在任何情况下,为了避免警告,请使用empty()
或!empty()
-如果是POST数据; 否则也为isset()
等isset()
而不是直接测试可能存在或可能不存在的变量。
其次,您应该:使用数组汇总错误: $error = []; ... $error[] = 'This error';
$error = []; ... $error[] = 'This error';
-或者:首先定义一个空字符串, $error = '';
尝试与.=
连接之前。 就目前而言,您的代码仅在未设置email
字段的情况下定义错误变量。 使用数组也可以避免<br />
串联的麻烦; 只是implode('<br />', $error)
。
编辑:如果您想摆脱所有的重复检查和冗余代码,并在将来使您的应用程序更容易扩展,则可以对内容进行抽象化并执行以下操作:
$err_msgs = [
'email' => 'your Email address',
'dest' => 'your Destination Name',
'dcity' => 'your Departure City',
'name' => 'your Name',
'cnum' => 'your Contact Number',
'adults' => 'Number Of Adults',
'child' => 'Number Of Children',
'comment' => 'your Comments',
];
$errors = [];
foreach($err_msgs as $key => $msg) {
if (empty($_POST[$key])) {
$errors[] = 'Please enter ' . $msg;
}
}
if (count($errors) > 0) { // OR: if (!empty($errors)) {
$result = '<div class="alert alert-danger"><strong>
There were error(s) in your form:</strong><br />'
. implode('<br />', $errors)
. ' </div>';
}
这里发生的事情:我们在数组中将所有期望的字段及其唯一错误消息定义为键/消息对,这些键与表单字段的名称相同。 然后,我们遍历数组并检查空字段,并在一处生成所有错误消息,并将它们添加到数组中。 最后,如果$errors
数组包含消息,我们将它们打印出来。
最佳解决方案:分配一个空字符串: $error = '';
然后将其连接起来。 即
if($_POST['some_key']){
$error .= 'this is an error';
}
//...
if($error != '') {
echo $error;
}
我认为您遇到的问题是由于一个案例:
如果存在电子邮件,则此后将连接什么$error
。
但是像往常一样,我们验证如下所示:
if(isset($_POST['some_key']) && empty(trim($_POST['some_key']) {
//put error string here
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.