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
等。同意,在进行输入验证时,我通常会做与上述类似的事情。我认为