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

时间:2017-01-04 06:23:04

标签: php forms post

如果单击“提交”按钮,我需要包含多个错误。如果用户没有填写所有必填字段,则应该在表单顶部显示错误 目前,当我点击提交按钮时,错误指向“评论”行并且仅显示“评论”错误

我用过 - $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>'; 
    }
}
?>

2 个答案:

答案 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