1

編集
おかげで、Wes CI は現在、この AJAX コードを持っています:

   <script type="text/javascript"> 
$(document).ready(function(){
    $("form[name^='login']").submit(function(event) {
        event.preventDefault();

        var dataToSend = 'username='+$("input[name^='username']").val()+'&password='+$("input[name^='password']").val();

        $.ajax({
            type: "POST",
            url: "index.php",
            data: dataToSend,
            success: function(response){
                if(response == "REDIRECT")
                {
                    window.location = "business_profiles/myReviews.php";
                else
                {
                    $("#my_error_div").html(response);
                }
            }
        });
    });
});
</script>

ただし、たとえばパスワードボックスを入力したときにエラーメッセージを表示する代わりに. フォームの入力内容に関係なく、「成功」という警告ボックスが表示されるだけです。

わかりました、私は自分でこれを理解しようとしました。仲間のコーダーに連絡を取り、もちろんstackoverflowで答えを探しました。私の状況に本当に合うものはありませんでした。

次のような単純なログインフォームがあります。

<form name="login" action="index.php" method="post">

        <ul>

            <li>
                <input type="text" name="username" autocomplete="off" placeholder="Username" autofocus="true"></li>

            <li>
                <input type="password" name="password" autocomplete="off" placeholder="Password"></li>
            <li>

                <input type="submit" name="submit" value="Login"> <a href="register.php" id="button">Register</a> <a href="forgot.php" id="button">Forgot Password</a> <a href = "javascript:void(0)" onclick = "document.getElementById('light').style.display='none';document.getElementById('fade').style.display='none'" id="button">Close</a>

            </li>
        </ul>
    </form>

このフォームは、同じページに送信されます。(phpスクリプトはログインフォームのすぐ上にあります。)それは次のとおりです。

    <?php

//If the user has submitted the form
if($_POST['username']){
    //protect the posted value then store them to variables
    $username = protect($_POST['username']);
    $password = protect($_POST['password']);

    //Check if the username or password boxes were not filled in
    if(!$username || !$password){
        //if not display an error message
        echo "<center>You need to fill in a <b>Username</b> and a <b>Password</b>!</center>";
    }else{
        //if the were continue checking

        //select all rows from the table where the username matches the one entered by the user
        $res = mysql_query("SELECT * FROM `users` WHERE `username` = '".$username."'");
        $num = mysql_num_rows($res);

        //check if there was not a match
        if($num == 0){
            //if not display an error message
            echo "<center>The <b>Username</b> you supplied does not exist!</center>";
        }else{
            //if there was a match continue checking

            //select all rows where the username and password match the ones submitted by the user
            $res = mysql_query("SELECT * FROM `users` WHERE `username` = '".$username."' AND `password` = '".$password."'");
            $num = mysql_num_rows($res);

            //check if there was not a match
            if($num == 0){
                //if not display error message
                echo "<center>The <b>Password</b> you supplied does not match the one for that username!</center>";
            }else{
                //if there was continue checking

                //split all fields fom the correct row into an associative array
                $row = mysql_fetch_assoc($res);

                //check to see if the user has not activated their account yet
                if($row['active'] != 1){
                    //if not display error message
                    echo "<center>You have not yet <b>Activated</b> your account!</center>";
                }else{
                    //if they have log them in

                    //set the login session storing there id - we use this to see if they are logged in or not
                    $_SESSION['uid'] = $row['id'];
                    //show message
                    echo "<center>You have successfully logged in!</center>";

                    //update the online field to 50 seconds into the future
                    $time = date('U')+50;
                    mysql_query("UPDATE `users` SET `online` = '".$time."' WHERE `id` = '".$_SESSION['uid']."'");

                    //redirect them to the usersonline page
                    echo 'REDIRECT';

                    exit;
                }
            }
        }
    }
}

?>

ページを更新せずにスクリプトを処理するためのフォームが必要です。私のログインフォームはライトボックス内にあるため、ページが更新されたときに無効なパスワードなどのエラーが発生すると、ライトボックスが再び非表示になり、もう一度ログインをクリックして何が間違っていたかを確認する必要があります. ページを更新せずにフォームでphpスクリプトを処理して、ユーザーが正常にログインするまでライトボックスが非表示にならないようにしたいだけです。その後、ユーザーは自分のプロファイルにリダイレクトされます。

4

2 に答える 2

1

jQuery を使用すると、次の AJAX 関数を使用して、ログイン フォームから同じページにデータを投稿できます。

<script type="text/javascript"> 
$(document).ready(function(){
    $("form[name^='login']").submit(function(event) {
        event.preventDefault();

        var dataToSend = 'username='+$("input[name^='username']").val()+'&password='+$("input[name^='password']").val();

        $.ajax({
            type: "POST",
            url: "index.php",
            data: dataToSend,
            success: function(response){
                if(response == "REDIRECT")
                {
                    window.location = "business_profiles/myReviews.php";
                }
                else
                {
                    alert("Error: "+response);
                    $("#my_error_div").html(response);
                }
            }
        });
    });
});
</script>

また、PHP を次のように変更します。

<?php

//If the user has submitted the form
if(isset($_REQUEST['username'])){
    //protect the posted value then store them to variables
    $username = protect($_POST['username']);
    $password = protect($_POST['password']);

    //Check if the username or password boxes were not filled in
    if(!$username || !$password){
        //if not display an error message
        echo "<center>You need to fill in a <b>Username</b> and a <b>Password</b>!</center>";
    }else{
        //if the were continue checking

        //select all rows from the table where the username matches the one entered by the user
        $res = mysql_query("SELECT * FROM `users` WHERE `username` = '".$username."'");
        $num = mysql_num_rows($res);

        //check if there was not a match
        if($num == 0){
            //if not display an error message
            echo "<center>The <b>Username</b> you supplied does not exist!</center>";
        }else{
            //if there was a match continue checking

            //select all rows where the username and password match the ones submitted by the user
            $res = mysql_query("SELECT * FROM `users` WHERE `username` = '".$username."' AND `password` = '".$password."'");
            $num = mysql_num_rows($res);

            //check if there was not a match
            if($num == 0){
                //if not display error message
                echo "<center>The <b>Password</b> you supplied does not match the one for that username!</center>";
            }else{
                //if there was continue checking

                //split all fields fom the correct row into an associative array
                $row = mysql_fetch_assoc($res);

                //check to see if the user has not activated their account yet
                if($row['active'] != 1){
                    //if not display error message
                    echo "<center>You have not yet <b>Activated</b> your account!</center>";
                }else{
                    //if they have log them in

                    //set the login session storing there id - we use this to see if they are logged in or not
                    $_SESSION['uid'] = $row['id'];


                    //update the online field to 50 seconds into the future
                    $time = date('U')+50;
                    mysql_query("UPDATE `users` SET `online` = '".$time."' WHERE `id` = '".$_SESSION['uid']."'");

                    //redirect them to the usersonline page
                    echo 'REDIRECT';
                }
            }
        }
    }

    exit;
}

?>
于 2013-03-28T04:38:45.137 に答える
0

step1:ログインフォームに div を追加します。

ステップ 2: ユーザー コントロールを検証し、ajax 呼び出しでページを読み込む

step3: ajax 成功イベントで、表示したいページを使用して追加します.html()

于 2013-03-28T04:54:40.677 に答える