[英]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.