PHP 注册表单不起作用 - 表单仅在输入签出要求时刷新



脚本不会丢任何错误,但是如果正确输入所有输入字段,它只是刷新,什么也不会发生。

我在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!";
    }
}
?>

您的代码问题发生在:

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

并且由于您没有为此"如果"没有其他任何其他任何事物。

问题是,只有当电子邮件或用户名已经在表中。

因此,如果给出的用户名和/或电子邮件尚未在表中,则此条件变为错误,因此它永远不会到达内部街区,您想插入新数据。

这也有一个附带问题,可以说您的查询获取2行..想象一下此表。

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

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

这将在您的用户表中获取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();
    }
}

最新更新