只有幾個問題通過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頁面,登錄確實工作正常。
任何想法?
不要使用MD5哈希密碼,使用bcrypt。 –
@WaleedKhan md5有什麼問題? – Mooseman
應該說明一下,我在現場版本中使用crypt,MD5只在我測試的時候出現。 – JPDP