ajaxを介してログインフォームを送信する際にいくつかの問題が発生しただけで、私は主にPHP開発者であり、PHPでJquery + Ajaxを頻繁に使用することはありません。
現時点では、フォームの送信後にfirebug 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>
これは Ajax/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;
}
}
クラスと関数を呼び出していないため、機能していないと思いますが、うまく機能する方法がわかりません。私はphpクラスと機能を開始する2つの間にコントローラーページを作成しようとしましたが、役に立ちませんでした。
編集するだけで、ajaxを削除し、ログインフォームアクションを介してphpページを呼び出すだけで、ログインは正しく機能します。
何か案は?