2016-02-05 88 views
0

所以我目前正在Xampp中使用php和mysql構建一個用戶認證系統。用戶認證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

在您的函數登錄中,嘗試刪除引號中的字段名稱密碼。或者更喜歡使用這一個`。

照顧,您使用的功能mysql_result和的mysql_query兩者都不再在PHP 7.0

支持正如你可以在這裏看到: http://php.net/manual/en/function.mysql-query.php

+0

同樣適用於活動領域。您使用的引號使表達式檢查單詞「active」是否等於1.這總是錯誤的。 –

+0

這是問題!多謝你們! – eth3king