注册页面。在php中打印出用户错误
我已经创建了一个注册页面,用于检查错误并为用户打印出来。例如,如果他们没有有效的电子邮件地址,则会显示无效的电子邮件地址。在逻辑完成的顶部,它让网页知道是否有任何错误,以便以后我可以注册它们而不出错。在html文件的底部,我试图打印出错误,以便它们显示在文本字段旁边。我已经创建了一些错误,但由于某些原因,它们在用户打印任何内容之前就打印出来了。代码如下:注册页面。在php中打印出用户错误,php,html,registration,Php,Html,Registration,我已经创建了一个注册页面,用于检查错误并为用户打印出来。例如,如果他们没有有效的电子邮件地址,则会显示无效的电子邮件地址。在逻辑完成的顶部,它让网页知道是否有任何错误,以便以后我可以注册它们而不出错。在html文件的底部,我试图打印出错误,以便它们显示在文本字段旁边。我已经创建了一些错误,但由于某些原因,它们在用户打印任何内容之前就打印出来了。代码如下: <form action="" method="POST"> <input type
<form action="" method="POST">
<input type="hidden" name="action" value="register" />
<?php if(@$_POST['action'] == 'register') {
}
<input type="text" name="firstname" maxlength = "16" class="text-bars" placeholder="Firstname"/>
<input type="text" name="lastname" maxlength = "16" class="text-bars" placeholder="Lastname"/><br /><br />
<input type="text" name="username" maxlength = "16" class="text-bars" placeholder="Username" />
<?php if(user_exists($_POST['username']) === true){
echo "Username already exsits.";
}else if(preg_match("/\\s/", $_POST['username']) == true){
echo 'Your username must not contain spaces.';
}
?>
<br /><br />
<input type="password" name="password" maxlength = "16" class="text-bars" placeholder="Password" />
<input type="password" name="re_password" maxlength = "16" class="text-bars" placeholder="Re-Enter Password" />
if($_POST['password'] !== $_POST['re_password']){
echo "Your passwords do not match.";
}else if(strlen($_POST['password']) !== 0 && strlen($_POST['password']) < 6){
echo "Your password must be at least 6 characters.";
}
?>
<br /><br />
<input type="text" name="email" maxlength = "25" class="text-bars" placeholder="Email" />
<input type="text" name="re_email" maxlength = "25" class="text-bars" placeholder="Re-enter Email" />
<?php
if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false && $_POST['email'] !== 0){
echo "A valid email address is required.";
}else if(email_exists($_POST['email']) === true){
echo "Email address already in use.";
} else if($_POST['email'] !== $_POST['re_email']){
echo "Your emails do not match.";
}
?>
<br /><br />
<input type="text" name="zipcode" maxlength = "7" class="text-bars" placeholder="Zip Code" /><br /><br />
<input type="submit" value="Submit" />
</form>
如果($\u POST['password']!=$\u POST['re\u password'])){
回显“您的密码不匹配。”;
}else if(strlen($\u POST['password'])!==0&&strlen($\u POST['password'])<6){
echo“您的密码必须至少包含6个字符。”;
}
?>
检查密码的错误长度超过6个字符,并且当页面加载时,电子邮件验证似乎打印正确。这个问题有什么解决办法吗
谢谢大家
$errors = array();
if(empty($_POST) === false){
$required_fields = array('firstname', 'lastname', 'username', 'password', 're_password', 'email', 're_email', 'zipcode');
foreach($_POST as $key=>$value){
if(empty($value) && in_array($key, $required_fields) === true){
$errors[] = 'All fields are required';
break 1;
}
}
if(empty($errors) === true){
if(user_exists($_POST['username']) === true){
$errors[] = 'Username already exsits.';
}
if(preg_match("/\\s/", $_POST['username']) == true){
$errors[] = 'Your username must not contain spaces.';
}
if(strlen($_POST['password']) < 6){
$errors[] = 'Your password must be at least 6 characters.';
}
if($_POST['password'] !== $_POST['re_password']){
$errors[] = 'Your passwords do not match.';
}
if(strlen($_POST['password']) !== 0 && strlen($_POST['password']) < 6){
$errors[] = 'Your password must be at least 6 characters.';
}
if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false){
$errors[]= 'A valid email address is required.';
}
if(email_exists($_POST['email']) === true){
$errors[] = 'Email address already in use.';
}
if($_POST['email'] !== $_POST['re_email']){
$errors[] = 'Your emails do not match.';
}
}
$errors=array();
if(空($\u POST)==false){
$required_fields=数组('firstname','lastname','username','password','re_password','email','re_email','zipcode');
foreach($\发布为$key=>$value){
if(空($value)&&in_数组($key,$required_字段)==true){
$errors[]=“所有字段都是必填项”;
破口1;
}
}
if(空($errors)==true){
如果(用户存在($\u POST['username'])==true){
$errors[]=“用户名已存在。”;
}
if(preg_match(“/\\s/”,$\u POST['username'])==true){
$errors[]=“您的用户名不能包含空格。”;
}
如果(strlen($_POST['password'])<6){
$errors[]=“您的密码必须至少包含6个字符。”;
}
如果($\u POST['password']!=$\u POST['re\u password'])){
$errors[]=“您的密码不匹配。”;
}
if(strlen($\u POST['password'])!==0&&strlen($\u POST['password'])<6){
$errors[]=“您的密码必须至少包含6个字符。”;
}
if(filter_var($_POST['email'],filter_VALIDATE_email)==false){
$errors[]=“需要有效的电子邮件地址。”;
}
如果(email_存在($_POST['email'])==true){
$errors[]=“电子邮件地址已在使用中。”;
}
如果($\u POST['email']!=$\u POST['re\u email'])){
$errors[]='您的电子邮件不匹配';
}
}
}在
元素中添加一个隐藏到代码中的输入
<input type="hidden" name="action" value="register" />
围绕php代码,请使用以下命令
<?php if(@$_POST['action'] == 'register') {
} ?>
这将仅在用户提交表单时触发php代码
这正是您需要的代码
<?php
if(@$_POST['action'] == 'register') {
if(user_exists($_POST['username']) === true){
$errorUser = "Username already exsits.";
}else if(preg_match("/\\s/", $_POST['username']) == true){
$errorUser = 'Your username must not contain spaces.';
}
if($_POST['password'] !== $_POST['re_password']){
$errorPassword = "Your passwords do not match.";
}else if(strlen($_POST['password']) !== 0 && strlen($_POST['password']) < 6){
$errorPassword = "Your password must be at least 6 characters.";
}
if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false && $_POST['email'] !== 0){
$errorEmail = "A valid email address is required.";
}else if(email_exists($_POST['email']) === true){
$errorEmail = "Email address already in use.";
} else if($_POST['email'] !== $_POST['re_email']){
$errorEmail = "Your emails do not match.";
}
}
?>
<form action="" method="POST">
<input type="hidden" name="action" value="register" />
<input type="text" name="firstname" maxlength = "16" class="text-bars" placeholder="Firstname"/>
<input type="text" name="lastname" maxlength = "16" class="text-bars" placeholder="Lastname"/>
<?=@$errorUser;?>
<br /><br />
<input type="text" name="username" maxlength = "16" class="text-bars" placeholder="Username" />
<br /><br />
<input type="password" name="password" maxlength = "16" class="text-bars" placeholder="Password" />
<input type="password" name="re_password" maxlength = "16" class="text-bars" placeholder="Re-Enter Password" />
<?=@$errorPassword;?>
<br /><br />
<input type="text" name="email" maxlength = "25" class="text-bars" placeholder="Email" />
<input type="text" name="re_email" maxlength = "25" class="text-bars" placeholder="Re-enter Email" />
<?@$errorEmail;?>
<br /><br />
<input type="text" name="zipcode" maxlength = "7" class="text-bars" placeholder="Zip Code" /><br /><br />
<input type="submit" value="Submit" />
</form>
您的问题是,无论表单是否已提交,验证都会完成。我建议您在html之前使用PHP进行所有验证,您可以使用数组捕获错误并在表单中打印出来。这将使逻辑和内容在更大程度上分离,从而使调试更容易
<?php
if ($_POST) { //Check that the form has actually been submitted
$errors = array();
if(user_exists($_POST['username']) === true) {
$errors['user'] == 'Username exists';
}
... // more error checking
}
... //form output
<input type="text" name="username" maxlength = "16" class="text-bars" placeholder="Username" />
<?php print(isset($errors['username'])) ? $errors['username'] : ''; ?>
... //more form output
... //更多表单输出
这应该让您开始首先,声明错误
$errors = array();
每次捕获错误时,都将其附加到变量中
$errors[] = 'Your Error Text';
最后,打印错误
echo '<ul>';
foreach($errors as $error) {
echo "<li>$error</li>";
}
echo '</ul>';
echo'';
foreach($errors作为$error){
回显“- $error
”;
}
回声“
”;
我建议您在提交后在单独的代码块中验证用户输入,例如在脚本顶部:
if (isset($_POST("submit")) { // form has ben submitted...
// validate
if (!isset($_POST['firstname']) || strlen($_POST['firstname']) == 0)
$error['firstname'] = "Please enter a first name!";
// do this with all your fields
if (!isset($error)) { // no error = all fields valid
// save fields to database
// route to another page
exit();
} // if !isset $error
} // if isset
以你的形式,你
<form name="myform" method="post">
<?php=(isset($error)?'There were errors:':'')?>
<?php $fieldname = 'firstname'; ?>
<?php=(isset($error[$fieldname])?$error[$fieldname].'<br />':'')?>
<input type="text" name="firstname" maxlength="16"
class="text-bars<?php=(isset($error[$fieldname])?' error':'')?>"
value="<?php=(isset($_POST[$fieldname])?$_POST[$fieldname]:'')?>"/>
<!-- do the same for all other fields... -->
<input type="submit" name="submit" value="submit" /> <!-- add name attribute! -->
</form>
在检查错误之前,您需要查看他们是否已提交表单。非常感谢。我不熟悉这个函数,不明白如何使用它来设置它没有完成,尽管我在上面的密码部分添加了代码。这就是你的建议吗?将我的代码移到页面顶部,并将所有错误代码放在其中。不需要将它们放在页面底部。这应该行得通,是的。但是您需要将所有其他错误移到相同的if中。并且,删除:after,因此我将不同输入字段之后的所有错误移到其中,并删除它们而不删除?如果是这样,我如何在正确的位置打印每个错误?我在上面的部分中添加了该部分,这样我就可以使用我在上面添加的第二个代码来执行此操作,然后使用您刚才建议在html部分中打印的打印错误部分?