PHP验证单个表单字段,然后验证所有字段


PHP validating individual form fields then all of them

我的简单php表单验证脚本:

$email      = (isset($_POST['email'])) ? $_POST['email'] : '' ;
$password       = (isset($_POST['password'])) ? $_POST['password'] : '' ;
$fname      = (isset($_POST['fname'])) ? $_POST['fname'] : '' ;
$lname      = (isset($_POST['lname'])) ? $_POST['lname'] : '' ;
if (!empty($email) && !empty($password) && !empty($fname) && !empty($lname)) {
    $auth->createAccount($email, $password, $fname, $lname);
}

由于某些原因,我觉得它看起来不太好。

我如何检查每个表单字段以指示哪一个是需要填写的,然后在最后检查以确保在调用createAccount()函数之前填写所有字段。

注意:createAccount()函数会对输入进行消毒,所以这里不需要这样做。

试试这个:

<?php
$form_names = array(
    'email' => 'e-mail', 
    'password' => 'password',
    'fname' => 'firstname',
    'lname' => 'lastname'
); //So that the user understands the errors better
$errors = array();
foreach ($_POST as $field=>$val) {
    if (empty($val)) {
        array_push($errors, 'Please fill out ' . $form_names[$field]);
    }
}
if (count($errors) == 0) {
    //No errors call the submit PHP function
}
else {
    $string = implode('<br/>', $errors);
    echo '<p style="color:red;">' . $string . '</p>';
}
?>

然而,缺点是表单名称应该以一种可理解的方式返回给用户。由于有些表单可能需要空格,因此可以为连接到表单名的表单名创建一个数组,并使用该值通过回显给用户。$good_name = $form_names[$field]

我见过的最常见的处理方法是创建一个数组:

if (!$_POST['email']) {$errors[] = 'Email field is empty.';}
if (!$_POST['password']) {$errors[] = 'Password field is empty.';}
if (!$_POST['fname']) {$errors[] = 'First name field is empty.';}
if (!$_POST['lname']) {$errors[] = 'Last name field is empty.';}

然后循环遍历错误以显示它们:

foreach ($errors as $error) {
    echo $error.'<br>';
}