MySQL データベースをクエリする PHP スクリプトを呼び出すために、jQuery でラップされた AJAX を使用してユーザーを認証しようとしています。私はこれらのテクノロジーに精通していませんが、(ちょっと)それらを個別に機能させることができましたが、jQuery、AJAX、および HTML を適切に機能させることができません。
[編集:] Trinh Hoang Nhu の アドバイスに従いreturn false;
、[送信] ボタンを無効にするステートメントを追加しました。以前のエラーはすべて修正されました。AJAX から返されたオブジェクトを正しく取得できません。
HTML
私が使用するHTMLスニペットは次のとおりです。
<form id="form" method='post'>
<label>Username:</label>
<input id="user" name="user" type="text" maxlength="30" required /> <br />
<label>Password:</label>
<input id="pass" name="pass" type="password" maxlength="30" required /> <br />
<input id="url" name="url" type="text" value="<?php echo $_GET['url'] ?>" hidden />
<input name="submit" type="submit" value="I'm done">
</form>
jQuery/AJAX
AJAX を使用してユーザーを認証するための jquery コードを次に示します (タブが原因でインデントが乱れている場合は申し訳ありません)。
function changeMessage(message) {
document.getElementById("message").innerHTML = message; }
$(document).ready(function() {
$("#form").submit(function() {
changeMessage("Checking");
//check the username exists or not from ajax
$.post("/stufftothink/php/AJAX/login.php",
{user: $("#user").val(), pass: $("#pass").val(), url: $("#url") },
function(result) {
//if failed
if (result === 'false') {
changeMessage("Invalid username or password. Check for typos and try again");
$("#pass").val(""); }
//if authenticated
else {
changeMessage("Authenticated");
window.location.href = result; }
} );
//to disable the submit button
return false;
} );
} )
PHP
そして、呼び出される私の PHP スクリプトは次のとおりです。
<?php
ob_start();
session_start();
$user = $_POST['user'];
$pass = md5($_POST['pass']);
mysql_connect('localhost', 'root', '');
mysql_select_db('stufftothink');
$query = "select * from users where user = '$user' and pass = '$pass'";
$result = mysql_query($query);
$i = 0;
while ($row = mysql_fetch_array($result)) {
$i = 1; }
if ($i == 1) {
$_SESSION['user'] = $user;
$invalid_urls = array('register.php', 'login.php');
$url = $_REQUEST['url']; //not sure whether _GET or _POST
if (in_array($url, $invalid_urls)) {
echo '/stufftothink/profile.php'; }
else {
echo '/stufftothink/'.$url; }
}
else {
echo 'false'; }
mysql_close();
?>
編集
この質問には多くの反対票が寄せられています。説明を入力せずに誤って質問を送信してしまいました。編集に戻りましたが、戻ってきたときにはすでに4つの反対票がありました。かろうじて数分でした。私は何か間違ったことをしていますか、それとも最初の 5 分間が問題でしたか?