如果单击“提交”按钮,我需要包含多个错误。如果用户没有填写所有必填字段,则应该在表单顶部显示错误 目前,当我点击提交按钮时,错误指向“评论”行并且仅显示“评论”错误
我用过 - $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>';
}
}
?>
答案 0 :(得分:2)
首先,您应该正确检查字段是否为空,如下所示:
if(empty($_POST['email'])) {
您的代码实际上正好相反,如果变量为true(-ish),则当前条件匹配。在任何情况下,为了避免出现警告,请使用empty()
或!empty()
- 如果是POST数据;否则也isset()
等 - 而不是直接测试可能存在或不存在的变量。
其次,您应该:使用数组来汇总错误:$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>';
}
这里发生了什么:我们将数组中的所有预期字段及其唯一错误消息定义为键/消息对,这些键与您的表单字段相同&#39;名。然后我们遍历数组并检查空字段,并在一个地方生成所有错误消息,将它们添加到一个数组中。最后,如果$errors
数组有消息,我们将其打印出来。
答案 1 :(得分:0)
最佳解决方案:
分配一个空字符串:x_test
然后你会连接它。即。
$error = '';
我认为由于案件而遇到的问题是:
如果存在电子邮件,那么if($_POST['some_key']){
$error .= 'this is an error';
}
//...
if($error != '') {
echo $error;
}
之后要连接。
但像往常一样,我们验证这样的人:
$error