2016-02-05 2 views
0

Итак, в настоящее время я создаю систему аутентификации пользователей с использованием 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.

+0

Плохое программирование !!! Зачем запрашивать базу данных 4 раза для одной и той же таблицы, того же пользователя и того же сеанса? Запросить один раз и получить данные в переменных, а затем сравнить значения в php вместо запроса базы данных для всех значений отдельно. – Spidey

ответ

0

в вашей функции войдите в систему, попробуйте удалить кавычки 'arround имя поля пароль. Или предпочитаете использовать этот один.

И позаботьтесь, вы используете функцию mysql_result и mysql_query, что и больше не поддерживается в PHP 7.0

Как вы можете увидеть здесь: http://php.net/manual/en/function.mysql-query.php

+0

То же самое относится к активному полю. Вы используете кавычки, которые заставляют выражение проверять, равно ли слово «активный» 1. Это всегда ложь. –

+0

вот в чем проблема! Спасибо, парни! – eth3king

Смежные вопросы