繁体   English   中英

验证所有字段以在PHP的联系表单中显示错误消息

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM