2013-01-21 89 views
4

只有幾個問題通過ajax提交登錄表單,我主要是一個PHP開發人員,我沒有經常使用PHP的Jquery + Ajax。PHP + Ajax登錄

此刻如果我在提交表單後檢查了螢火蟲POST數據,它確實顯示已經添加到窗體的用戶名和密碼,但是頁面只是重新加載而不管用戶名和密碼是否正確被添加或者如果它們是正確的並且沒有會話被創建。

這是形式:

<form id="loginform" method="post"> 
    Username: <input type="text" name="username" id="username" value=""> 

    Password: <input type="password" name="password" id="password" value=""> 

    <input type="submit" name="loginsub" id="loginsub" value="Login"> 
    </form> 

這是阿賈克斯/ jQuery的:

<script type="text/javascript"> 
    $(document).ready(function() { 

    $('#loginform').submit(function() { 

    $.ajax({ 
     type: "POST", 
     url: '/class/login.php', 
     data: { 
      username: $("#username").val(), 
      password: $("#password").val() 
     }, 
     success: function(data) 
     { 
      if (data === 'Login') { 
       window.location.replace('/user-page.php'); 
      } 
      else { 
       alert('Invalid Credentials'); 
      } 
     } 
    }); 

}); 

}); 
</script> 

這是PHP:

class Users { 
public $username = null; 
public $password = null; 

public function __construct($data = array()) { 
    if(isset($data['username'])) $this->username = stripslashes(  strip_tags($data['username'])); 
    if(isset($data['password'])) $this->password = stripslashes(strip_tags($data['password'])); 
} 

public function storeFormValues($params) { 
    $this->__construct($params); 
} 

public function Login() { 
    $success = false; 
    try{ 
     $con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
     $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1"; 
        $user = username; 

     $stmt = $con->prepare($sql); 
     $stmt->bindValue("username", $this->username, PDO::PARAM_STR); 
     $stmt->bindValue("password", md5($this->password), PDO::PARAM_STR); 
     $stmt->execute(); 

     $valid = $stmt->fetchColumn(); 

     if($valid) { 
     $success = true; 
        session_start(); 


     session_regenerate_id(); 
     $_SESSION['user'] = $user['user']; 
     session_write_close(); 
     echo ('Login'); 
     exit(); 

     } 

     $con = null; 
     return $success; 
     }catch (PDOException $e) { 
     echo $e->getMessage(); 
     return $success; 
    } 

} 

我想這是行不通的,因爲我不是在調用類和函數,但我不知道如何成功地做到這一點。我試圖在2之間創建一個控制器頁面,它將啓動php類和函數,但無濟於事。

只是爲了編輯,如果我刪除ajax並通過登錄表單操作調用php頁面,登錄確實工作正常。

任何想法?

+0

不要使用MD5哈希密碼,使用bcrypt。 –

+0

@WaleedKhan md5有什麼問題? – Mooseman

+0

應該說明一下,我在現場版本中使用crypt,MD5只在我測試的時候出現。 – JPDP

回答

9

整個問題是在jQuery中使用這種替代

$(document).ready(function() { 
    $('#loginform').submit(function(e) { 
    e.preventDefault(); 
    $.ajax({ 
     type: "POST", 
     url: '/class/login.php', 
     data: $(this).serialize(), 
     success: function(data) 
     { 
      if (data === 'Login') { 
      window.location = '/user-page.php'; 
      } 
      else { 
      alert('Invalid Credentials'); 
      } 
     } 
    }); 
}); 
}); 
+0

這已經解決了Ajax問題,它現在正確地發佈到PHP。我知道那段代碼有問題。 我仍然有一個錯誤,但它只是關於PHP處理錯誤的方式。 謝謝 – JPDP

3
$user = new User(array("username" => $_POST['username'], "password" => $_POST['password'])); 
$user->Login(); 

把上面的代碼放到一個login.php控制器文件(包括你的用戶類)中。或者寫一個處理請求的通用控制器。

+0

+1這是需要做的事情... –

+0

這與我之前嘗試過的控制器很接近。只是給了你一個去,但它做同樣的事情,只是重新加載頁面,而不創建一個會話等 似乎我喜歡的Ajax不工作,因爲如果我輸入錯誤的細節它也不會輸出警報。 – JPDP