簡體   English   中英

當用戶輸入不正確時,如何防止繞過注冊表?

[英]How to prevent from bypassing registration form when the user's inputs are incorrect?

因此,我試圖制作我的第一份注冊表格,並且試圖找出我做錯了什么。 每當我輸入錯誤或無效的輸入或說出無效的用戶名或電子郵件時,只要填寫表格,我仍然可以注冊並將數據發送到數據庫中。 我仍然是初學者,所以不確定如何正確安排它們或我缺少什么

這是我的代碼:

<!doctype html>
<html>
<head>
<style>
form{
    margin: 0px auto;
    width: 470px;
    margin-top:150px;
}
label{
     width: 75px;
    display: inline-block;
}
.error{
    color: red;
}
</style>
</head>
<body>

<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);

if(isset($_POST['username'])&&isset($_POST['password'])&&isset($_POST['email'])&&isset($_POST['age'])){
    $username = $_POST['username'];
    $email = $_POST['email'];
    $password = $_POST['password'];
    $password_hash = md5($password);

    $age = $_POST['age'];
    $gender = $_POST['gender'];


    if(!empty($username)){
    if (!preg_match("/^[a-zA-Z ]*$/",$username)) {
        $usernameErr = " Only letters and white space allowed"; 
        }
    if(!empty($password)){
    if(!empty($email)){
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
           $emailErr = " Invalid email"; 
         }
    if(!empty($gender)){
    if(!empty($age)){
        if(strlen($username)>30){
            $error = 'Please ahear to maxlength of fields.';
        } else {


            //MySQL database code goes here

        }


    } else {
        $ageErr = ' Select your age';
    }
    } else {
        $genderErr = ' Select your gender';
    }
    } else {
        $emailErr = ' Enter your email';
    }
    } else {
        $passErr = ' Enter your password';
    }   
    } else {
    $usernameErr = ' Enter your username';
    }
}
?>

        <span class="error"><?php echo $error?></span>
        <br><br>
        <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST" autocomplete="off">   
            <h2>Register</h2>
            <label for="username">Username</label>
                <input type="text" id="username" name="username" maxlength="50" value="<?php if(isset($username)){echo $username;}?>">
                <span class="error"><?php echo $usernameErr?></span>
                <br><br>
            <label for="password">Password</label>
                <input type="password" id="password" name="password">
                <span class="error"><?php echo $passErr?></span>
                <br><br>
            <label for="email">Email</label>
                <input type="email" id="email" name="email" maxlength="30" value="<?php if(isset($email)){echo $email;}?>">
                <span class="error"><?php echo $emailErr?></span>
                <br><br>
            <label>Gender</label>
                <input type="radio" name="gender" id="male" value="male">Male   
                <input type="radio" name="gender" id="female" value="female">Female
                <span class="error"><?php echo $genderErr?></span>
                <br><br>
            <label>Age</label>
                <select name="age" class="age">
                    <option value> </option>
                    <option value="18">18</option>
                    <option value="19">19</option>
                    <option value="20">20</option>
                    <option value="21">21</option>
                    <option value="22">22</option>
                    <option value="23">23</option>
                    <option value="24">24</option>
                    <option value="25">25</option>
                    <option value="26">26</option>
                    <option value="27">27</option>
                    <option value="28">28</option>
                    <option value="29">29</option>
                    <option value="30">30</option>
                </select>
                <span class="error"><?php echo $ageErr?></span>
                <br><br>
            <input type="submit" value="Register">
        </form>
</body>
</html>

您可以嘗試這樣的事情。 有幾種方法可以使這種方法更有效,但是考慮到上述方法,我至少會按字段而不是如果嵌套的巨型嵌套驗證邏輯。 因此,在下面的示例中,您設置了一個主驗證布爾值,該布爾值基本上會說是提交或否。 當每種類型的字段都進行驗證時,如果發生任何錯誤,它將確保將變量設置為false。 然后在腳本末尾執行最后的if語句,以檢查驗證狀態,如果可行,則執行mysql表單提交工作。 如果不是,則繼續處理並輸出錯誤。 更改的另一件事是您的初始if語句( if(isset($_POST['username'])&&isset($_POST['password'])&&isset($_POST['email'])&&isset($_POST['age'])){ 。由於每個字段都經過驗證,因此您實際上只需要檢查您是否嘗試發布表單即可,希望對您有所幫助!

 <?php
    error_reporting(E_ERROR | E_WARNING | E_PARSE);

    // make sure that you have posted to the file
    if(count($_POST) > 0){
        $username = $_POST['username'];
        $email = $_POST['email'];
        $password = $_POST['password'];
        $password_hash = md5($password);
        $age = $_POST['age'];
        $gender = $_POST['gender'];

        // use a boolean value to catch errors
        $validated = true;

            // validate username
        if(!preg_match("/^[a-zA-Z ]*$/",$username)){
            $usernameErr = " Only letters and white space allowed";
            $validated = false;
        } else if(empty($username)){
            $usernameErr = ' Enter your username';
            $validated = false;
        }

            // validate username length
        if(strlen($username)>30){
            $error = 'Please ahear to maxlength of fields.';
        }

            // validate password
        if(empty($password)){
            $passErr = ' Enter your password';
            $validated = false;
        }

            // validate email
        if (!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $emailErr = " Invalid email";
            $validated = false;
        } else if(empty($email)){
            $emailErr = ' Enter your email';
            $validated = false;
        }


        if(empty($gender)){
            $genderErr = ' Select your gender';
            $validated = false;
        }

        if(empty($age)){
            $ageErr = ' Select your age';
            $validated = false;
        }

        if($validated === true){
            echo 'im here';
                //MySQL database code goes here
        }
    }
?>

<!doctype html>
<html>
<head>
<style>
form{
    margin: 0px auto;
    width: 470px;
    margin-top:150px;
}
label{
     width: 75px;
    display: inline-block;
}
.error{
    color: red;
}
</style>
</head>
<body>
    <span class="error"><?php echo $error?></span>
    <br><br>
    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST" autocomplete="off">
        <h2>Register</h2>
        <label for="username">Username</label>
            <input type="text" id="username" name="username" maxlength="50" value="<?php if(isset($username)){echo $username;}?>">
            <span class="error"><?php echo $usernameErr?></span>
            <br><br>
        <label for="password">Password</label>
            <input type="password" id="password" name="password">
            <span class="error"><?php echo $passErr?></span>
            <br><br>
        <label for="email">Email</label>
            <input type="email" id="email" name="email" maxlength="30" value="<?php if(isset($email)){echo $email;}?>">
            <span class="error"><?php echo $emailErr?></span>
            <br><br>
        <label>Gender</label>
            <input type="radio" name="gender" id="male" value="male">Male
            <input type="radio" name="gender" id="female" value="female">Female
            <span class="error"><?php echo $genderErr?></span>
            <br><br>
        <label>Age</label>
            <select name="age" class="age">
                <option value> </option>
                <option value="18">18</option>
                <option value="19">19</option>
                <option value="20">20</option>
                <option value="21">21</option>
                <option value="22">22</option>
                <option value="23">23</option>
                <option value="24">24</option>
                <option value="25">25</option>
                <option value="26">26</option>
                <option value="27">27</option>
                <option value="28">28</option>
                <option value="29">29</option>
                <option value="30">30</option>
            </select>
            <span class="error"><?php echo $ageErr?></span>
            <br><br>
        <input type="submit" value="Register">
    </form>
</body>
</html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM