Php 如何处理和显示多个表单验证错误?

Php 如何处理和显示多个表单验证错误?,php,html,forms,Php,Html,Forms,所以我有一个表单,需要验证它。所以我现在做的是 if(empty($name) || empty($username) || empty($email) || empty($password)){ $_SESSION['comp_form'] = "Complete all fields"; header('Location: register.php'); } if(strlen($password) < 5){ $_SESSION['pass_leng'] =

所以我有一个表单,需要验证它。所以我现在做的是

if(empty($name) || empty($username) || empty($email) || empty($password)){
    $_SESSION['comp_form'] = "Complete all fields";
    header('Location: register.php');
}
if(strlen($password) < 5){
    $_SESSION['pass_leng'] = "Choose a longer password";
    header('Location: register.php');
}

您可以尝试以下方法:

$_SESSION['error'] = 0;
if(empty($name) || empty($username) || empty($email) || empty($password)){
    $_SESSION['comp_form'] = "Complete all fields";
    $_SESSION['error'] = 1;
}
if(strlen($password) < 5){
    $_SESSION['pass_leng'] = "Choose a longer password";
    $_SESSION['error'] = 1;
}
if($_SESSION['error'] == 1){
    header('Location: register.php');
}
$\u会话['error']=0;
if(空($name)| |空($username)| |空($email)| |空($password)){
$\会话['comp_form']=“填写所有字段”;
$\u会话['error']=1;
}
if(strlen($password)<5){
$\会话['pass\u leng']=“选择更长的密码”;
$\u会话['error']=1;
}
如果($\u会话['error']==1){
标题('Location:register.php');
}

除非您想使用AJAX,它将以使用JavaScript为代价提高站点的平滑度。

您可以尝试以下方法:

$_SESSION['error'] = 0;
if(empty($name) || empty($username) || empty($email) || empty($password)){
    $_SESSION['comp_form'] = "Complete all fields";
    $_SESSION['error'] = 1;
}
if(strlen($password) < 5){
    $_SESSION['pass_leng'] = "Choose a longer password";
    $_SESSION['error'] = 1;
}
if($_SESSION['error'] == 1){
    header('Location: register.php');
}
$\u会话['error']=0;
if(空($name)| |空($username)| |空($email)| |空($password)){
$\会话['comp_form']=“填写所有字段”;
$\u会话['error']=1;
}
if(strlen($password)<5){
$\会话['pass\u leng']=“选择更长的密码”;
$\u会话['error']=1;
}
如果($\u会话['error']==1){
标题('Location:register.php');
}

除非您想使用AJAX,它将以使用JavaScript为代价来提高站点的平滑度。

您可以在验证过程中建立一个错误数组,然后检查数组中是否有错误,如果有错误,则重定向。您还可以使用数组键来标识显示每个错误的字段

下面是一个例子:

$errors = array();

if(empty($name) || empty($username) || empty($email) || empty($password)){
    $errors['comp_form'] = "Complete all fields";
}
if(strlen($password) < 5){
    $errors['pass_leng'] = "Choose a longer password";
}

// more validation here if you wish
if(count($errors) > 0) {
    $_SESSION['errors'] = $errors;
    header("Location: register.php");
    exit;
} else {
    // clean up previous validation errors, everything's fine
    unset($_SESSION['errors']);
}
$errors=array();
if(空($name)| |空($username)| |空($email)| |空($password)){
$errors['comp_form']=“填写所有字段”;
}
if(strlen($password)<5){
$errors['pass_leng']=“选择更长的密码”;
}
//如果您愿意,请在此进行更多验证
如果(计数($errors)>0){
$\会话['errors']=$errors;
标题(“位置:register.php”);
出口
}否则{
//清除以前的验证错误,一切正常
取消设置($_会话['errors');
}
然后,您可以在表单上检查错误:

<!-- add hasError class to input when validation failed to allow you to style it -->
<input type="password" name="password" class="<?php if(isset($_SESSION['errors']['pass_leng'])) echo 'hasError'; ?>">
<!-- if there's an error, output it on a generic error message element -->
<?php if(isset($_SESSION['errors']['pass_leng'])) echo '<p class="formError">' . $_SESSION['errors']['pass_leng'] . '</p>'; ?>


您可以在验证期间建立一个错误数组,然后检查数组中是否有错误,如果有错误,则重定向。您还可以使用数组键来标识显示每个错误的字段

下面是一个例子:

$errors = array();

if(empty($name) || empty($username) || empty($email) || empty($password)){
    $errors['comp_form'] = "Complete all fields";
}
if(strlen($password) < 5){
    $errors['pass_leng'] = "Choose a longer password";
}

// more validation here if you wish
if(count($errors) > 0) {
    $_SESSION['errors'] = $errors;
    header("Location: register.php");
    exit;
} else {
    // clean up previous validation errors, everything's fine
    unset($_SESSION['errors']);
}
$errors=array();
if(空($name)| |空($username)| |空($email)| |空($password)){
$errors['comp_form']=“填写所有字段”;
}
if(strlen($password)<5){
$errors['pass_leng']=“选择更长的密码”;
}
//如果您愿意,请在此进行更多验证
如果(计数($errors)>0){
$\会话['errors']=$errors;
标题(“位置:register.php”);
出口
}否则{
//清除以前的验证错误,一切正常
取消设置($_会话['errors');
}
然后,您可以在表单上检查错误:

<!-- add hasError class to input when validation failed to allow you to style it -->
<input type="password" name="password" class="<?php if(isset($_SESSION['errors']['pass_leng'])) echo 'hasError'; ?>">
<!-- if there's an error, output it on a generic error message element -->
<?php if(isset($_SESSION['errors']['pass_leng'])) echo '<p class="formError">' . $_SESSION['errors']['pass_leng'] . '</p>'; ?>


创建一个需要验证的字段数组(与它们的
$\u POST
名称匹配):

然后循环它们,如果它们无效,将它们添加到您的
$\u会话['errors']
数组中:

$_SESSION['errors'] = array(); 

foreach ($fields as $field => $niceName) {
    if (empty($_POST[$field])) {
        $_SESSION['errors'][$field] = $niceName . ' cannot be empty';
    } elseif ($field == 'password' && strlen($_POST[$field]) < 5) {
       $_SESSION['errors'][$field] = 'Choose a longer password';
    }      
}

创建一个需要验证的字段数组(与它们的
$\u POST
名称匹配):

然后循环它们,如果它们无效,将它们添加到您的
$\u会话['errors']
数组中:

$_SESSION['errors'] = array(); 

foreach ($fields as $field => $niceName) {
    if (empty($_POST[$field])) {
        $_SESSION['errors'][$field] = $niceName . ' cannot be empty';
    } elseif ($field == 'password' && strlen($_POST[$field]) < 5) {
       $_SESSION['errors'][$field] = 'Choose a longer password';
    }      
}


仅供参考,您正在展示的示例很可能使用客户端验证。请在验证期间建立一个错误数组,然后检查数组中是否有错误,如果有错误,请重定向。你也可以使用数组键来识别显示每个错误的字段。是的,我知道。我只想在服务器端@PatrickQCan执行此操作,您可以演示一个示例吗?我是个新手,任何帮助都会很好@scrowlerFYI,您正在展示的示例很可能使用客户端验证。在验证过程中建立一个错误数组,然后检查数组中是否有错误,如果有,则重定向。你也可以使用数组键来识别显示每个错误的字段。是的,我知道。我只想在服务器端@PatrickQCan执行此操作,您可以演示一个示例吗?我是新来的,任何帮助都会很好。@scrowlert这是正确的。当您执行
标题('Location:register.php'),就好像您编写了
exit()
return
。代码后面的任何内容都不会生效,因为用户当时已经“离开”了页面。只需先收集所有错误,然后执行重定向,就像这里建议的那样。这是正确的。当您执行
标题('Location:register.php'),就好像您编写了
exit()
return
。代码后面的任何内容都不会生效,因为用户当时已经“离开”了页面。只需先收集所有错误,然后执行重定向,就像这里建议的那样。谢谢您的回答。;)不客气。我建议一定量的客户端验证将在用户体验方面对您有所帮助,例如在表单生效时清除错误消息。不过,验证服务器端也是完全必要的。我只添加了一件事,以便在刷新页面时清除错误。我使用了
unset($_SESSION['errors')在实际表单上。因此,把它放在回答中可能是值得的。谢谢你的回答不客气。我建议一定量的客户端验证将在用户体验方面对您有所帮助,例如在表单生效时清除错误消息。不过,验证服务器端也是完全必要的。我只添加了一件事,以便在刷新页面时清除错误。我使用了
unset($_SESSION['errors')在实际表单上。因此,将其放在回答中可能是值得的。您应该实现一个键->值对,为每个字段提供一个用户标签,显示“名称不能为空”看起来有点不自然,特别是如果使用更复杂的字段名称<代码>确认密码
foo\u客户端_age\u bar
等。同意,在进行输入验证时,我通常会做与上述类似的事情。我认为