我的简单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>';
}