【问题标题】:PHP Form Validation OverlappingPHP表单验证重叠
【发布时间】:2018-09-24 22:21:57
【问题描述】:

我遇到了 php 表单验证的问题,它工作正常,但没有按预期工作,现在我有两种类型的 php 表单验证在使用中,一种是检查四个字段中是否有数据,另一种是是检查电子邮件字段是否使用了正确的格式。

我遇到的问题是,如果我不做任何字段并单击提交,我希望弹出“做这四个字段”错误消息,但是如果我这样做,电子邮件验证会弹出电子邮件很好,然后弹出所需的字段消息,这不是我想要的。

代码,我知道对于验证电子邮件,if 语句中没有代码,我真的不知道该放什么

        //Check if these fields have data in them
    if(isset($_POST['email']) || isset($_POST['password']) || isset($_POST['confirm']) || isset($_POST['username'])   ){
        if(!$_POST['email'] || !$_POST['password']  || !$_POST['confirm'] || !$_POST['username']   ){
            $error = "Error. Please write in all required fields with the * symbol";
        }

        // Validate email format
        //https://www.w3schools.com/php/php_form_url_email.asp
        if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
        } else {
            $error = "Error. Please write in the correct E-Mail format";
        }

编辑 只是想澄清一下,我尝试将验证电子邮件代码移到检查代码上方,但是当用户输入表单以写入所有必填字段时,它会保持恒定的错误消息

整个PHP

    <?php

    //Check if these fields have data in them
    if(isset($_POST['email']) || isset($_POST['password']) || isset($_POST['confirm']) || isset($_POST['username'])   ){
        if(!$_POST['email'] || !$_POST['password']  || !$_POST['confirm'] || !$_POST['username']   ){
            $error = "Error. Please write in all required fields with the * symbol";
        }

        // Validate email format
        //https://www.w3schools.com/php/php_form_url_email.asp
        if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
        } else {
            $error = "Error. Please write in the correct E-Mail format";
        }


        if(!$error){
            //No errors - let’s create the account
            //Encrypt the password with a salt
            $encryptedPass = password_hash($_POST['password'], PASSWORD_DEFAULT);
            //Insert DB
            $query = "INSERT INTO users (user_email, user_password, user_forename, user_lastname, user_name, user_gender, user_country, user_number) VALUES (:email, :password, :firstname, :lastname, :username, :gender, :country, :mobile)";
            $result = $DBH->prepare($query);
            $result->bindParam(':username', $_POST['username']);
            $result->bindParam(':firstname', $_POST['firstname']);
            $result->bindParam(':lastname', $_POST['lastname']);
            $result->bindParam(':email', $_POST['email']);
            $result->bindParam(':gender', $_POST['gender']);
            $result->bindParam(':country', $_POST['country']);
            $result->bindParam(':mobile', $_POST['mobile']);
            $result->bindParam(':password', $encryptedPass);

            if($result->execute()){
                echo '<div class="alert alert-success" role="alert">Registration Successful!</div>';
                echo "<script> window.location.assign('index.php?p=login'); </script>";
            }
        }

HTML

<div class="row">
        <div class="main-login main-center">
            <h1>Register</h1>
            <form action="index.php?p=register" method="post">

                <?php if($error){
                    echo '<div class="alert alert-danger" role="alert">
                    <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
                    <span class="sr-only">Error:</span>
                    '.$error.'
                    </div>';
                } ?>

                <p>
                    * Required Fields
                </p>

                <div class="form-group">
                    <label for="email" class="cols-sm-2 control-label">* Username</label>
                    <div class="cols-sm-10">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="fa fa-user fa" aria-hidden="true"></i></span>
                            <input type="text" class="form-control" name="username" id="username"  placeholder="Username"/>
                        </div>
                    </div>
                </div>

                <div class="form-group">
                    <label for="email" class="cols-sm-2 control-label">* E-Mail Address</label>
                    <div class="cols-sm-10">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="fa fa-envelope fa" aria-hidden="true"></i></span>
                            <input type="text" class="form-control" name="email" id="email"  placeholder="example@hotmail.com"/>
                        </div>
                    </div>
                </div>

                <div class="form-group">
                    <label for="password" class="cols-sm-2 control-label">* Password</label>
                    <div class="cols-sm-10">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="fa fa-lock fa-lg" aria-hidden="true"></i></span>
                            <input type="password" class="form-control" name="password" id="password"  placeholder="Password"/>
                        </div>
                    </div>
                </div>

                <div class="form-group">
                    <label for="confirm" class="cols-sm-2 control-label">* Confirm Password</label>
                    <div class="cols-sm-10">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="fa fa-lock fa-lg" aria-hidden="true"></i></span>
                            <input type="password" class="form-control" name="confirm" id="confirm"  placeholder="Confirm Password"/>
                        </div>
                    </div>
                </div>

                <div class="form-group">
                    <label for="email" class="cols-sm-2 control-label">First Name</label>
                    <div class="cols-sm-10">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="fa fa-user-circle fa" aria-hidden="true"></i></span>
                            <input type="text" class="form-control" name="firstname" id="firstname"  placeholder="First Name"/>
                        </div>
                    </div>
                </div>

                <div class="form-group">
                    <label for="email" class="cols-sm-2 control-label">Last Name</label>
                    <div class="cols-sm-10">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="fa fa-user-circle fa" aria-hidden="true"></i></span>
                            <input type="text" class="form-control" name="lastname" id="lastname"  placeholder="Last Name"/>
                        </div>
                    </div>
                </div>

                <div class="form-group">
                    Gender:
                    <div class="btn-group btn-group-toggle" data-toggle="buttons">
                        <label class="btn btn-outline-info active">
                            <!-- This button is checked by default for the user  -->
                            <input type="radio" name="gender" id="gender_male" value="Male" autocomplete="off" checked=""> Male
                        </label>

                        <label class="btn btn-outline-info">
                            <input type="radio" name="gender" id="gender_female"  value="Female" autocomplete="off"> Female
                        </label>
                    </div>
                </div>

                <div class="form-group">
                    <label for="address" class="cols-sm-2 control-label">Country</label>
                    <div class="cols-sm-10">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="fa fa-address-card" aria-hidden="true"></i></span>
                            <input type="text" class="form-control" id="placesSearch" placeholder="Country" name="country">
                        </div>
                    </div>
                </div>

                <div class="form-group">
                    <label for="mobile" class="cols-sm-2 control-label">Mobile Number</label>
                    <div class="cols-sm-10">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="fa fa-phone fa-lg" aria-hidden="true"></i></span>
                            <input type="mobile" class="form-control" name="mobile" id="mobile"  placeholder="Mobile Number"/>
                        </div>
                    </div>
                </div>

                <div align="center" class="checkbox">
                    <label><input type="checkbox" value=""> Sign up for BakeryUp Newsletters!</label>
                </div>

                <div class="form-group ">
                    <button type="submit" class="btn btn-success btn-lg btn-block login-button">Join</button>
                </div>
                <div align="center">
                    By clicking 'Join' you are agreeing to our Terms and Conditions, Cookie Policy and Privacy Policy.
                </div>
            </form>
        </div>
    </div>

【问题讨论】:

    标签: php validation


    【解决方案1】:

    试试这个方法

    $required = ['email','password','confirm','username'];
    $countFieldFilled = 0;
    
    foreach($_POST as $key => $value) {
        if (!empty($value)) {
            $countFieldFilled++;
        }
    }
    
    $postedKeys = array_keys($_POST);
    
    if (count($_POST) > 0) {
        if ($countFieldFilled >= 4 && count(array_intersect($required,$postedKeys)) >= 4) {
            if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            //all ok !
            } else {
                $error = "Error. Please write in the correct E-Mail format";
            }
        } else {
            echo 'not all required fields entered';
        }
    }
    

    【讨论】:

    • 嘿@sietse85,我尝试了代码,花了一段时间才掌握它,同样的问题适用,电子邮件格式验证错误首先显示,即使我没有任何字符字段...
    • 这很奇怪,你能在你的问题中包含整个脚本吗?我的意思是表单html也是?
    • 完成,删除了一些多余的部分,但这就是它的要点@sietse85
    • 表格html也请
    【解决方案2】:
    <?php
    if($_SERVER['REQUEST_METHOD']=='POST')
    {
        $fields = ['email', 'password', 'confirm', 'username'];
        foreach($fields as $name)
            $input[$name] = $_POST[$name] ?? '';
        // All fields require a value.
        foreach($input as $k => $v)
            if($v == '')
                $errors[$k] = 'Field required.';
        // Check valid email.
        if(
            $input['email'] &&
            filter_var($input['email'], FILTER_VALIDATE_EMAIL) === false
        )
            $errors['email'] = 'Email invalid.';
        // Check passwords match.
        if(
            $input['password'] && $input['confirm']
            && $input['password'] != $input['confirm']
        )
            $errors['password'] = $errors['confirm'] = 'Passwords must match.';
    
        if(!count($errors)) {
            // All good.
        } else {
            var_dump($errors);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 2012-02-13
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      • 2013-11-16
      相关资源
      最近更新 更多