如何从表单字段返回多个错误消息

时间:2014-03-20 21:08:55

标签: php forms

首先,我会展示我所拥有的,然后我会解释:

if(isset($_POST['submitRegister'])) {

$username = $_POST['username'];
$password = $_POST['password'];
$password2 = $_POST['password2'];
$email = $_POST['email'];

if(!isset($username) || empty($username))
    $error1 = 'Please enter your Username';

if(!isset($password) || empty($password))
    $error2 = 'Please enter your Password';

if(!isset($password2) || empty($password2))
    $error3 = 'Please confirm your Password';

if(!isset($email) || empty($email))
    $error4 = 'Please enter your E-mail address';

if(!isset($_POST["terms"]))
    $error5 = 'You must accept the Terms and Conditions';

这很好用。如果我在没有输入任何条目的情况下提交表格,则错误将显示在各自的字段下方。

在我读过的所有内容中,他们说,如果该字段不包含“任何”打印错误,则祝贺您的表单已提交。

但是,我想更进一步。

例如:如果字段已设置且不为空,则检查它是否包含正确的字符I.e:

if (!preg_match('#^[a-zA-Z0-9_-]+$#', $username))
    $error1 = 'Username can only contain: A-Z a-z 0-9 _ -;

这也有效,除了我接下来的任何内容,总是会覆盖之前的错误。 换句话说,如果我要在没有在任何字段中输入任何内容的情况下再次提交表单,则用户名字段将收到第二个错误,而其余字段将收到第一个错误。 在此之后,我想检查它是否是正确的长度I.e:

if(strlen($username) < 6)
    $error1 = 'Username must have more than 6 characters';

同样,这将覆盖第一个错误,因为没有字符也小于6。

我知道我可以一次性做到这一点,但这不是我想要的。 我已经尝试过把它放在if else语句和各种各样的语句中,但是我无法让它工作。

希望有人可以提供帮助,非常感谢。

哇,这个网站很棒!我只去厕所喂猫! 谢谢大家的答案,如果我有任何问题,我会调查他们并回来。 我只是想补充一点,我已经尝试过$ error []等但是无法让它工作。认为它可能与此有关:

$smarty->assign('error',$error);
$smarty->assign('message',$message);
$smarty->display('register.tpl');

我正在使用Smarty作为模板系统。我宁愿没有,但我跟随的啧啧使用了它,我不知道如何在没有它的情况下显示我的.tpl,虽然我还没有看过这个。

再次,非常感谢!

3 个答案:

答案 0 :(得分:1)

您可以使用点连接字符串:

$error1='';
if(!isset($username) || empty($username))
    $error1 = 'Please enter your Username';
if (!preg_match('#^[a-zA-Z0-9_-]+$#', $username))
    $error1 = $error1.'Username can only contain: A-Z a-z 0-9 _ - ';

修改

根据你的评论我推断,这可能是你想要的:

if (!preg_match('#^[a-zA-Z0-9_-]+$#', $username))
    $error1 = 'Username can only contain: A-Z a-z 0-9 _ -';
if(strlen($username) < 6)
    $error1 = 'Username must have more than 6 characters';
if(!isset($username) || empty($username))
    $error1 = 'Please enter your Username';

这只显示一个错误。如果您将该字段留空,则为&#34;请输入您的用户名&#34;,如果您输入少于6个字符的内容,则为&#34;用户名必须超过6个字符&#34;最后,如果你输入超过6个字符,但用户名包含奇怪的东西,它将是&#34;用户名只能包含:A-Z a-z 0-9 _ - &#34;

我希望这会有所帮助。

答案 1 :(得分:0)

您可以将错误存储在数组中,如下所示:

$errorList = [
    'username' => [],
    'password' => [],
    // ...
];
if (!preg_match('#^[a-zA-Z0-9_-]+$#', $username))
    array_push($errorList['username'], 'Username can only contain: A-Z a-z 0-9 _ - ');
if(strlen($username) < 6)
    array_push($errorList['username'], 'Username must have more than 6 characters');

显示:

if ($errorList['username']) {
    foreach ($errorList['username'] as $error) {
        echo $error . "<br/">
    }
}

答案 2 :(得分:0)

我认为你可以为每组变量检查创建一个错误数组,例如

if(!isset($username) || empty($username))
    $error1[] = 'Please enter your Username';

if (!preg_match('#^[a-zA-Z0-9_-]+$#', $username))
    $error1[] = 'Username can only contain: A-Z a-z 0-9 _ - ';

if(strlen($username) < 6)
    $error1[] = 'Username must have more than 6 characters';

现在,您的$error1数组中发现了所有错误