Php注册表单不起作用 - 表单只在输入检出需求

时间:2017-06-25 15:19:01

标签: php phpmyadmin

脚本不会抛出任何错误,但是如果所有输入字段输入正确,它只是刷新,没有任何反应。

我在header.php中包含$ salt和$ link。

我可能有过度循环,但我花了几个小时试图找出它然后在这里发布。

<?php 
if (array_key_exists('username', $_POST)||array_key_exists('pass', $_POST)||array_key_exists('email', $_POST)) {

    if ($_POST["username"]!== "" && $_POST["email"]!== ""  && $_POST["pass"]!== "" && $_POST['cpass']!== "" ){

        if($_POST['pass']==$_POST['cpass']){

            if (!mysqli_connect_error()) {
                $query = "SELECT `username`, `email` FROM `users` WHERE `username` = '".mysqli_real_escape_string($link, $_POST['username'])."' OR `email` = '".mysqli_real_escape_string($link, $_POST['email'])."'";

                $result = mysqli_query($link, $query);
                if ($row = mysqli_fetch_array($result)) {
                    if ($row['username'] == $_POST['username']) {
                        echo "Username already exists!<br>";
                    //die("Awe! Someone took this username");
                    }
                    if ($row['email'] == $_POST['email']) {
                        echo "Email has been used once!<br>";
                    //die(":( Email is in use!");
                    }else if($row['username'] !== $_POST['username'] && $row['email'] !== $_POST['email']){
                        $email    = mysqli_real_escape_string($link, $_POST["email"]);
                        $username = mysqli_real_escape_string($link, $_POST["username"]);
                        $pass     = md5($salt.mysqli_real_escape_string($link, $_POST["pass"]));
                        $query    = "INSERT INTO `users`( `username`, `pass`, `email`) VALUES ('$username', '$pass', '$email')";        
                        if(mysqli_query($link, $query)){
                            echo "You were successfully registered";
                        } else {
                            echo "Something went wrong, Couldn't register at the moment!";
                        }
                    }

                }

            }else{
                echo "An Error Occured while connecting !";
            }



        }else {
            echo "Password didn't match!";

        }

    }else{
        echo "Field(s) can't be left blank!";

    }

}

?>

1 个答案:

答案 0 :(得分:0)

您的代码问题发生在:

if ($row = mysqli_fetch_array($result)) {

因为你没有为此做任何其他事情&#34;如果&#34;你没有看到任何事情发生。

问题是,只有当电子邮件或用户名已经在表格内时,这种情况才会成立。

因此,如果表中没有给定的用户名和/或电子邮件,则此条件将变为false,因此它永远不会到达您要插入新数据的内部块。

还有一个方面的问题,让我们说你的查询获取2行..想象一下这个表。

userid - username - email 1 - user1 - user1@test.com 2 - user2 - user2@test.com 现在可以说给定的输入数据是

$_POST['username'] = 'user1'; $_POST['email'] = 'user2@test.com';

这将在您的users表中获取2行,但由于您没有进行循环,因此您只会检查第一行,这可能会导致脚本中出现错误或意外行为。

更新:我还根据您的代码编写了一段代码..希望它可以帮助您...

function validateInputs(){ 
    $keys = array('username','pass','cpass','email');
    foreach($keys as $key){
        if(!isset($_POST[$key]) || empty($_POST[$key])){
            throw new Exception("Field(s) can't be left blank!");
        }
    }
} 
function validatePassword(){
    if($_POST['pass'] !== $_POST['cpass']){
            throw new Exception("Password didn't match!");
    }
}
function checkForUniqueInput($email,$username){
    global $link;
    $query = "SELECT username, email FROM users WHERE username = '".$username."' OR email = '".$email."'";
    $result = mysqli_query($link, $query);
    if (mysqli_num_rows($result) > 0) {
        throw new Exception("Username and/or email already exist");
    }
}
function insertNewUser($email,$username,$pass){
    global $link;
    $query    = "INSERT INTO users( username, pass, email) VALUES ('".$username."', '".$pass."', '".$email."')";     
    if(!mysqli_query($link, $query)){ 
        throw new Exception("Something went wrong, Couldn't register at the moment!"); 
    }
}

if(isset($_POST)){
    try{
        validateInputs();
        validatePassword();

        $email    = mysqli_real_escape_string($link, $_POST["email"]);
        $username = mysqli_real_escape_string($link, $_POST["username"]);
        $pass     = md5($salt.mysqli_real_escape_string($link, $_POST["pass"]));

        checkForUniqueInput($email,$username);
        insertNewUser($email,$username,$pass);
        echo 'You were successfully registered';
    } 
    catch(Exception $e){
        echo 'Error : '.$e->getMessage();
    }
}