0

私はphpにログインフォームを持っています。ユーザー名またはパスワードが間違っている場合にページがリロードされないように、ajaxform を使用しました。ユーザー名とパスワードがデータベースに存在するかどうかをチェックする別のページ checklogin.php があり、行数のカウントを返します。login.php のカウントを比較し、count=1 の場合はエラー メッセージを表示し、count=2 の場合は別のページにリダイレクトしたいと考えています。target: 'errordiv' を使用して errordiv にカウントを表示しようとし、その innerHTML をチェックしましたが、失敗しました。

私のlogin.php

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
  <script type="text/javascript" src="scripts/jquery.form.js"></script>
<!--Slider-in icons-->
<script type="text/javascript">


    function checklogin()
    {
     var request=$("#login-form").ajaxForm(
                    {

                  target:'#errordiv'

                    }).abort();
                request.submit();
        var divmsg=document.getElementById("errordiv");
        if (divmsg.childNodes[0].nodeValue == "1")
            {
        divmsg.childNodesp[0].nodeValue="Sorry";
        alert ("Invalid username or password");} //I didn't get the alert as well a the divmsg content didn't change


                    };
</script>

</head>
<body>

<!--WRAPPER-->
<div id="wrapper">

<!--LOGIN FORM-->
<form name="login-form" id="login-form" class="login-form" action="checklogin.php" method="post">


    <!--CONTENT-->
    <div class="content">
    <!--USERNAME--><input name="un" type="text" class="input username" placeholder="Username" onfocus="this.value=''" required="required" /><!--END USERNAME-->
    <!--PASSWORD--><input name="pw" type="password" class="input password" placeholder="Password" onfocus="this.value=''" required="required" /><!--END PASSWORD-->
    </div>
    <!--END CONTENT-->

    <!--FOOTER-->
    <div class="footer">
    <!--LOGIN BUTTON--><input type="submit" name="submit" value="Login" class="button" onclick="checklogin()" /><!--END LOGIN BUTTON-->

    </div>
    <!--END FOOTER-->

</form>
<div id="errordiv" class="errordiv"></div>
<!--END LOGIN FORM-->

checklogin.php

<?php

 include ('dbconn.php');
       $user = trim($_POST['un']);
        $pass = trim($_POST['pw']);
        $user = mysql_real_escape_string($user);
        $pass = mysql_real_escape_string($pass);
       $result=mysql_query("select Id from login where Username='$user' and Password='$pass'") or die (mysql_error());
      $result= mysql_fetch_assoc($result);
     $num= count ($result);
    echo $num;
?>

login.php の $num の値を div に表示せずに取得し、$num の値を比較して errordiv に errormsg を表示する方法、または $num==2 の場合は別のページにリダイレクトする方法を教えてください。

4

2 に答える 2

0

チェック要求を非同期で行い、AJAX コールバックでユーザー フィードバックを処理してみてください。

JS:

    $(function(){
        $("#login-form").ajaxForm(function(response){
            if(response.count===1){
                $("#errordiv").html("msg you want to show");
            }else if(response.count===2){
                //redirect
            }
        });
    });

php:

<?php
    header("Content-Type: application/json");

    //your database check logic
    $user = trim($_POST['un']);
    $pass = trim($_POST['pw']);
    $user = mysql_real_escape_string($user);
    $pass = mysql_real_escape_string($pass);
    $result=mysql_query("select Id from login where Username='$user' and Password='$pass'") or die (mysql_error());
    $result= mysql_fetch_assoc($result);
    $num= count ($result);

    //and return response in JSON
    echo json_encode(array("count"=>$num));

?>

これがお役に立てば幸いです。

[編集]

以下を呼び出すフォーム送信ボタンのインライン JS 関数を削除します。

onclick="checklogin()"

checklogin 関数ロジックをドキュメント準備完了コールバックに配置し、DOM の準備ができたらフォームを初期化します。

于 2013-07-11T02:56:15.830 に答える