簡體   English   中英

登錄注冊表格問題

[英]Login Registration Form Issue

我正在為我的網站制作一個登錄/注冊表格。 當我使用新用戶名注冊為新用戶時,即使數據庫為空,它也會顯示該用戶名已經存在。 我將嘗試引導您完成此過程的代碼,但不確定問題出在哪里。

register.php我在其中檢查用戶輸入是否與數據庫中的任何內容匹配,它將輸出正確的錯誤消息,如果不匹配,則將進入register函數將用戶注冊到數據庫中。 謝謝 :)

    if (isset($_POST['submit'])) {

    if(empty($_POST['username']) || empty($_POST['password']) || empty($_POST['email']) || empty($_POST['Fname'])){

        $errors[] = 'All fields are required.';

    }else{

        if ($users->user_exists($_POST['username']) === true) {
            $errors[] = 'That username already exists';
        }
        if(!ctype_alnum($_POST['username'])){
            $errors[] = 'Please enter a username with only alphabets and numbers';  
        }
        if (strlen($_POST['password']) <6){
            $errors[] = 'Your password must be atleast 6 characters';
        } else if (strlen($_POST['password']) >18){
            $errors[] = 'Your password cannot be more than 18 characters long';
        }
        if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {
            $errors[] = 'Please enter a valid email address';
        }else if ($users->email_exists($_POST['email']) === true) {
            $errors[] = 'That email already exists.';
        }
    }

    if(empty($errors) === true){

        $username       = htmlentities($_POST['username']);
        $password       = $_POST['password'];
        $email          = htmlentities($_POST['email']);
        $firstName      = htmlentities($_POST['Fname']);
        $lastName       = htmlentities($_POST['Lname']);
        $accountType    = $_POST['account_type'];

        $users->register($username, $password, $email, $firstName, $lastName, $accountType);
        header('Location: register.php?success');
        exit();
    }
}

這是功能檢查用戶名和電子郵件是否已經存在

public function user_exists($username) {

        $query = $this->mysqli->prepare("SELECT COUNT(`id`) FROM `users` WHERE `username`= ?");
        $query->bind_param('s', $username);

        $query->execute();
        $rows = $query->fetch();

        if($rows == 1){
            return true;
        }else{
            return false;
        }

    }

public function email_exists($email) {

    $query = $this->mysqli->prepare("SELECT COUNT(`id`) FROM `users` WHERE `email`= ?");
    $query->bind_param('s', $email);

        $query->execute();

        $rows = $query->fetch();

        if($rows == 1){
            return true;
        }else{
            return false;
        }

}

和注冊功能

public function register($username, $password, $email, $firstName, $lastName, $accountType){

    global $bcrypt; // making the $bcrypt variable global so we can use here

    $time       = time();
    $ip         = $_SERVER['REMOTE_ADDR']; // getting the users IP address
    $email_code = $email_code = uniqid('code_',true); // Creating a unique string.

    $password   = $bcrypt->genHash($password);

    $query  = $this->mysqli->prepare("INSERT INTO `users` (`username`, `password`, `email`, `ip`, `time`, `email_code`, `firstName`, `lastName`, `accountType`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ");

    $query->bind_param('ssssissss',$username, $password,  $email, $ip, $time, $email_code, $firstName, $lastName, $accountType);


    $query->execute();
            }

我相信您的問題是public function user_exists($username)這一行-

$rows = $query->fetch();

沒有將$rows設置為查詢的值,而是僅在$query->fetch()成功$query->fetch()返回true mysqli_stmt::fetch手冊中mysqli_stmt::fetch -

在調用mysqli_stmt_fetch()之前,所有列都必須由應用程序綁定。

嘗試將其更改為-

public function user_exists($username) {

    $query = $this->mysqli->prepare("SELECT COUNT(`id`) FROM `users` WHERE `username`= ?");
    $query->bind_param('s', $username);

    $query->execute();

    // Bind the results       
    $query->bind_result($count);

    while($rows = $query->fetch()){

       if($count == 1){
          return true;
       }else{
          return false;
       }

    }

}

您還需要對public function email_exists($email)執行此操作

暫無
暫無

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

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