Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
注册页面。在php中打印出用户错误_Php_Html_Registration - Fatal编程技术网

注册页面。在php中打印出用户错误

注册页面。在php中打印出用户错误,php,html,registration,Php,Html,Registration,我已经创建了一个注册页面,用于检查错误并为用户打印出来。例如,如果他们没有有效的电子邮件地址,则会显示无效的电子邮件地址。在逻辑完成的顶部,它让网页知道是否有任何错误,以便以后我可以注册它们而不出错。在html文件的底部,我试图打印出错误,以便它们显示在文本字段旁边。我已经创建了一些错误,但由于某些原因,它们在用户打印任何内容之前就打印出来了。代码如下: <form action="" method="POST"> <input type

我已经创建了一个注册页面,用于检查错误并为用户打印出来。例如,如果他们没有有效的电子邮件地址,则会显示无效的电子邮件地址。在逻辑完成的顶部,它让网页知道是否有任何错误,以便以后我可以注册它们而不出错。在html文件的底部,我试图打印出错误,以便它们显示在文本字段旁边。我已经创建了一些错误,但由于某些原因,它们在用户打印任何内容之前就打印出来了。代码如下:

<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部分中打印的打印错误部分?