2

私のコードは問題なく実行されますが、成功の呼び出しに到達すると失敗します。ajaxセクション「if(result.success){」では、ブラウザの[ソース]タブにエラーが表示され、結果がnullになります。

ログインページ

<form id="login_form_header">
    <input type="hidden" name="action" value="sc_ajax_callback" />
    <input type="hidden" name="func" value="sc_login" />

    Email:
    <input type="text" name="username" />

    Password:
    <input type="password" name="password"/>

    <input type="submit" value="Log in" />
</form>
<script>
$("#login_form_header").submit(function(event){

    event.preventDefault();

    $.ajax({
        type: 'post',
        url: '<?php echo get_stylesheet_directory_uri(); ?>/connect.php',
        data: $('#login_form_header').serialize(),
        dataType: 'json',
        success: function(result){
            if (result.success){
                window.location = "my-dashboard/";
                return false;
            };
        },
        error: function(e){console.log("Could not retrieve login information")}
    });

    return false;
});
</script>

ページを接続する

<?php 

    mysql_connect("localhost", "%user%", "%pass%") or die(mysql_error()); // Connect to database server(localhost) with username and password.
    mysql_select_db("%db%") or die(mysql_error()); // Select registration database.
    # Make sure form data was passed to the script
    if(isset($_POST['username']) && !empty($_POST['username']) AND isset($_POST['password']) && !empty($_POST['password'])){

    # Define Variables
    $active_var = "1";
    $given_username = mysql_escape_string($_POST['username']);
    $given_password = dosomethingtopass;
    $matched_username = "";
    $matched_password = "";

     # See if there is matching info in the database
    $sql = 'SELECT username, password, active FROM %table% WHERE username="'.$given_username.'" AND password="'.$given_password.'" AND active="'.$active_var.'"'; 
    $result = mysql_query($sql);
    while($row = mysql_fetch_assoc($result)){
    if($given_password == $row['password']){
        $matched_username = $row['username'];
        $matched_password = $row['password'];
        }
    };

    # If there was a match 
    if($matched_username != "" && $matched_password != ""){
        #If there is only one result returned
        echo json_encode(array("$matched_password"));
        $session_sql = 'SELECT id, username, password, last_login FROM %table% WHERE username="'.$matched_username.'" AND password="'.$matched_password.'"';
        $session_result = mysql_query($session_sql);
        while($returned_row = mysql_fetch_assoc($session_result)){
            if($matched_password == $returned_row['password']){ 


            $_SESSION['id'] = $returned_row['id'];
            //$_SESSION['last_login'] = $returned_row['last_login'];
            $_SESSION['username'] = $returned_row['username'];
                }
             }

            $date = date('Y-m-d H:i:s');
            $update_sql = "UPDATE %table% SET last_login='".$date."'";
            mysql_query($update_sql);

        echo json_encode(array("success"=>"user logged in", "session"=>$_SESSION));
        }
    }

?>

また、update_sqlは私のテーブルのすべての行を少し奇妙に更新しています。私がどこで間違っているのかわからない助けがありますか?

編集:

更新しました

   $.ajax({
        type: 'post',
        url: '<?php echo get_stylesheet_directory_uri(); ?>/connect.php',
        data: $('#login_form_header').serialize(),
        dataType: 'json',
        success: function(result){

                window.location = "my-dashboard/";

            };
        },
        error: function(e){console.log("Could not retrieve login information")}
    });
4

2 に答える 2

0
success: function(result){
            if (result.success){
                window.location = "my-dashboard/";
                return false;
            };

への変更

success: function(result){                    
                    window.location = "my-dashboard/";                     
                }

resultこれは、オブジェクトではなく、サーバーによって送信されたデータです。


また、update_sqlは私のテーブルのすべての行を少し奇妙に更新しています

クエリWHEREに句がないためです。UPDATE

ドキュメントから:

WHERE句は、指定されている場合、更新する行を識別する条件を指定します。WHERE句がない場合、すべての行が更新されます。

詳細はこちら

更新後に編集

余分なものがあります};

変化する

success: function(result){

                window.location = "my-dashboard/";

            };
        },

success: function(result){

                window.location = "my-dashboard/";


        },

言及する価値のあるいくつかのポイント:

  • 非推奨の通知:jqXHR.success()、jqXHR.error()、およびjqXHR.complete()コールバックは、jQuery1.8で非推奨になります。最終的な削除に備えてコードを準備するには、代わりにjqXHR.done()、jqXHR.fail()、およびjqXHR.always()を使用します。

  • mysql_*関数は非推奨になりました。代わりにPDOを使用してください。

于 2012-11-17T06:10:37.403 に答える
0

これを試してみてください:

success: function(result){ window.location = "my-dashboard/"; }

この関数は成功結果を呼び出したためです。そして最初のパラメータはサーバーの回答からのデータです。これはオブジェクトではありません。詳細については、http: //api.jquery.com/jQuery.ajax/をご覧ください。

于 2012-11-17T05:55:02.587 に答える