Итак, в настоящее время я создаю систему аутентификации пользователей с использованием php и mysql в Xampp.Аутентификация пользователя PHP mySQL не работает
Мне удалось узнать, существует ли пользователь по их адресу электронной почты, но другие функции, похоже, не работают. Например, чтобы проверить, активировал ли пользователь свою учетную запись или нет, поскольку они даже не меняют свой активный статус на 1 в базе данных. Или с помощью функции входа в систему, даже если оба письма и пароль верны, они скажут, что они неверны.
Вот мой login.php сценарий
<?php
include 'init.php';
function sanitize($data){
return mysql_real_escape_string($data);
}
//check if user exists
function user_exists($email){
$email = sanitize($email);
//$query = mysql_query("SELECT COUNT('ID') FROM 'register' WHERE 'email' = '$email'");
return (mysql_result(mysql_query("SELECT COUNT(ID) FROM register WHERE email = '$email'"),0) == 1)? true : false;
}
//check if user has activated account
function user_activate($email){
$email = sanitize($email);
//$query = mysql_query("SELECT COUNT('ID') FROM 'register' WHERE 'email' = '$email'");
return (mysql_result(mysql_query("SELECT COUNT(ID) FROM register WHERE email = '$email' AND 'active' =1"),0) == 1)? true : false;
}
function user_id_from_email($email){
$email = sanitize($email);
return (mysql_result(mysql_query("SELECT id FROM register WHERE email = '$email'"),0,'id'));
}
function login($email,$password){
$user_id = user_id_from_email($email);
$email = sanitize($email);
$password = md5($password);
return (mysql_result(mysql_query("SELECT COUNT(id) FROM register WHERE email = '$email' AND 'password' ='$password'"),0) == 1)? $user_id : false;
}
if(empty($_POST)=== false){
$email = $_POST['email'];
$password = $_POST['password'];
}
if(empty($email)|| empty($password) === true){
$errors[] = "You must enter a username and a password";
}
else if(user_exists($email) === false){
$errors[] = "Email address is not registered";
}
else if(user_activate($email) === false){
$errors[] = "You haven't activated your account yet";
}
else{
$login = login($email, $password);
if($login === false){
$errors[] = "email/password are incorrect";
} else {
echo "ok";
}
}
print_r($errors);
/*$email = $_POST['email'];
$password = $_POST['password'];
if($email&&$password){
$connect = mysql_connect("localhost","root","") or die ("Couldn't Connect");
mysql_select_db("users") or die("Couldn't find Database");
}
else
die("Please enter a username and a password");
$query = mysql_query("SELECT * FROM register WHERE email = '$email'");
$numrows = mysql_num_rows($query);
echo $numrows;*/
?>
Моя база данных называется 'users'
и на данный момент имеет только 1 таблица называется 'register'
. С строками: id, firstname, lastname, email, password, and active
.
Плохое программирование !!! Зачем запрашивать базу данных 4 раза для одной и той же таблицы, того же пользователя и того же сеанса? Запросить один раз и получить данные в переменных, а затем сравнить значения в php вместо запроса базы данных для всех значений отдельно. – Spidey