2013-07-01 200 views
0

我在PHP的OOP中有一些代碼應該登錄/註冊一個用戶,並且註冊功能很好用,但登錄功能不起作用,我無法登錄。我也注意到,在數組$_SESSION我有未定義的索引「登錄」,「密碼」。 這裏是主頁:php登錄註冊錯誤

<?php 
require_once "libs/user_class.php"; 
$user = User::getObject(); 
$auth = $user->isAuth(); 
if(isset($_POST["reg"])){ 
    $login = $_POST["login"]; 
    $password = $_POST["password"]; 
    $reg_success = $user->regUser($login,$password); 
} 

elseif (isset($_POST["auth"])){ 
    $login = $_POST["login"]; 
    $password = $_POST["password"]; 
    $auth_success = $user->login($login,$password); 
    if($auth_success){ 
     header("Location:index.php"); 
     exit; 
    } 
} 
?> 
<html> 
<head> 
    <title>REGISTER</title> 
</head> 
<body> 
<?php 
    if($auth){ 
     echo "Welcome".$_SESSION["login"]; 
    } 
    else{ 
     echo '<h2>REGISTRATION</h2> 
    <form action="index.php" method = "post" name="reg"> 
     <table> 
      <tr> 
       <td>Log in</td> 
       <td> 
        <input type="text" name = "login" /> 
       </td> 
      </tr> 
      <tr> 
       <td>Password</td> 
       <td> 
        <input type="password" name = "password" /> 
       </td> 
      </tr> 
      <tr> 
       <td colspan = "2"> 
        <input type="submit" name="reg" value = "register" /> 
       </td> 
      </tr> 
     </table> 
    </form> 
    <h2>LOGIN</h2> 
    <form action="index.php" method = "post" name="auth"> 
     <table> 
      <tr> 
       <td>Log in</td> 
       <td> 
        <input type="text" name = "login" /> 
       </td> 
      </tr> 
      <tr> 
       <td>Password</td> 
       <td> 
        <input type="password" name = "password" /> 
       </td> 
      </tr> 
      <tr> 
       <td colspan = "2"> 
        <input type="submit" name="auth" value = "authorize" /> 
       </td> 
      </tr> 
     </table> 
    </form>'; 
    } 
?> 
</body> 
</html> 

而且user_class.php:

<?php 
class User{ 
private $db; 
private static $user = null; 
private function __construct(){ 
    $this->db = new mysqli("localhost", "root", "root", "temp"); 
    $this->db->query("SET NAMES 'utf8'"); 
} 

public static function getObject(){ 
    if(self::$user === null) self::$user = new User(); 
    return self::$user; 
} 

public function regUser($login, $password){ 
    if($login == "")return false; 
    if($password == "")return false; 
    $password = md5($password); 
    return $this->db->query("INSERT INTO `users` (`login`, `password`) VALUES ('$login','$password')"); 
} 

private function checkUser($login, $password){ 
    $result_set = $this->db->query("SELECT `password` FROM `users` WHERE `login` = '$login'"); 
    $user = $result_set->fetch_assoc(); 
    $result_set->close(); 
    if(!$user) return false; 
    return $user["password"] === $password; 
} 

public function isAuth(){ 
    session_start(); 
    $login = $_SESSION["login"]; 
    $password = $_SESSION["password"]; 
    return $this->checkUser($login,$password); 
} 

public function login($login, $password){ 
    if($this->checkUser($login, $password)){ 
     session_start(); 
     $_SESSION["login"] = $login; 
     $_SESSION["password"] = $password; 
     return true; 
    } 
    else return false; 
} 

public function __destruct(){ 
    if ($this->db) $this->db->close(); 
} 
} 

?> 
+0

在使用'$ _SESSION'之前,你是否在某處調用了['session_start()'](http://www.php.net/manual/en/function.session-start.php)? – Passerby

+0

會話在isAuth函數中啓動 – user2167174

回答

1

在你的數據庫,你存儲的密碼字段MD5加密。因此,在您的登錄和checkuser功能中檢查用戶名和密碼時,您需要檢查密碼爲md5($ password)。

此外,我想知道爲什麼你保留了表單名稱並提交按鈕名稱相同。