-2

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 分間が問題でしたか?

4

2 に答える 2

1

return falseまず、ajax を使用してフォームを送信する場合は、送信機能から行う必要があります。そうしないと、ブラウザーがそれを処理し、別のページにリダイレクトします。

PHP からオブジェクトを返したい場合は、 を使用してオブジェクトを json に変換する必要がありますjson_encode。次に例を示します。

//PHP
$return = array("url" => "http://www.google.com");
echo json_encode($return);
//would echo something like {"url":"http://www.google.com"}

//JS
$.post(url, data, function(data){
  alert(data.url);
});
于 2012-08-01T14:34:56.693 に答える
0

;関数の末尾に 'sがありません。

次のようにする必要があります。

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() },
               function(result) {
              //if failed
              if (result === 'false') {
                        changeMessage("Invalid username or password. Check for typos and try again");
                    $("#pass").val("");
              }
              //if authenticated
              else {
                                changeMessage("Authenticatred");
                window.location.href = "/stufftothink/" +  result; 
              } 
       });
   });
});

それが解決するかどうかはわかりませんが、それが私に飛び出す唯一のものです.

于 2012-08-01T08:25:28.583 に答える