2013-12-17 31 views
0

我創建了一個登錄表單,但是當我嘗試登錄時,它說電子郵件或密碼不正確,但我要輸入正確的電子郵件地址和密碼。登錄表單電子郵件和密碼不正確的錯誤

我在我的數據庫用戶表中創建用戶,但又一次我得到這個錯誤。所有錯誤是好的,當我嘗試電子郵件和密碼它說你需要輸入一個電子郵件和密碼。

和激活的錯誤也ok.I輸入正確的密碼和電子郵件地址。給我錯誤。

這是users.php

<?php 
function user_exists($email) { 
    $email = sanitize($email); 
    return (mysql_result(mysql_query("SELECT COUNT(`id`) FROM `users` WHERE `email` = '$email'"), 0) == 1) ? true : false; 


    } 

function user_active($email) { 
    $email = sanitize($email); 
    return (mysql_result(mysql_query("SELECT COUNT(`id`) FROM `users` 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 `users` WHERE `email` = '$email'"), 0, 'id'); 
     } 
    function login($email, $password) { 
      $id = user_id_from_email($email); 
      $email = sanitize($email); 
      $password = md5($password); 

      return (mysql_result(mysql_query("SELECT COUNT (`id`) FROM `users` WHERE `email` = '$email' AND `password` = '$password'"), 0) == 1) ? $id : false; 
     } 



?> 

這是的login.php

<?php 

include("core/init.php"); 



if(empty($_POST) === false) { 
    $email = $_POST['email']; 
    $password = $_POST['password']; 

    if (empty($email) === true || empty($password) === true) { 

     $errors[] = 'You need to enter a email and password'; 
     } else if (user_exists($email) === false) { 
      $errors[] = 'We can\'t find that email. Have you registered ?'; 

      } else if (user_active($email) === false) { 
       $errors[] = 'You have\'t activated your account'; 
       } else { 
        $login = login($email, $password); 
        if ($login === false) { 
         $errors[] = 'That email/passowrd cocmbination is incorrect'; 
         }else { 

          $_SESSION['id'] = $login; 
          header('Location: main.php'); 

          exit(); 

          } 

        } 
        print_r ($errors); 
    } 
?> 
+0

這需要進行基本的調試。進行測試輸出,數據庫有哪些值?最終查詢看起來是什麼樣的? –

+0

您也正在運行很多查詢,而不是測試它們中的任何一個是否正常工作 - 如果您的SQL語法存在問題,您永遠不會知道。如果我的密碼中有撇號,會發生什麼情況? – andrewsi

+0

無關:你可以放棄'? true:false;'部分語句的一部分,例如''return(mysql_result(mysql_query(「SELECT COUNT('id')FROM'users' WHERE'email' ='$ email'AND'active' = 1」),0)== 1)? true; false;''成爲''return mysql_result(mysql_query(「SELECT COUNT('id')FROM'users' WHERE'email' ='$ email'AND'active' = 1」),0)== 1; '' –

回答

0

對不起,但有東西全負荷這是錯誤的 - 它的很多可能會產生錯誤。

1)在php中沒有'淨化'功能,你沒有告訴我們它做了什麼。

2)你的login.php確實niclude users.php

3)生成所述密碼的MD5哈希是遠離安全(它應該是一個定SHA1哈希爲最小)

4)你永遠不會檢查DBMS返回的錯誤

5)...實際 - 這是不正確的 - 你將users.php中的函數的返回值與false相比較 - 如果查詢只會得到false失敗 - 不是如果它返回0行

Consi der ...

function do_something_with_email($email, &$err) { 
     $email = mysql_real_escape_string($email); 

     if (!($res=mysql_query("SELECT `id` FROM `users` WHERE `email` = '$email'"))) { 
      $err=mysql_error(); 
      return false; 
     } 
     if (!($data=mysql_fetch_array($res)) { 
      $err=mysql_error(); 
      return false; 
     } 
     return $data[0]; 
    } 

switch (do_something_with_email($email, $err)) { 
    case false: 
    die ($err); 
    case 0: 
    print "No records matched"; 
    break; 
    default: 
    print "OK"; 
    break; 
} 
相關問題