0

ログイン検証に使用されるコードのトラブルシューティングについて、助けが必要です。AJAX と PHP の組み合わせです。

ログインページに直接ある AJAX コードを次に示します。

<script language="javascript">
$(document).ready(function()
{
$("#login_form").submit(function()
{
$("#msgbox").removeClass().addClass('messagebox').text('Validating....').fadeIn(1000);
$.post("/ajax_login.php",{ user_name:$('#username').val(),password:$('#password').val()
,rand:Math.random() } ,function(data)
    {
    if (data=='no')
        {
        $("#msgbox").fadeTo
            (200,0.1,function() 
                { 
  $(this).html('Incorrect Username or  Password.')
.addClass('messageboxerror').fadeTo(900,1);
                }
            );      
        }

     else if(data=='yes') 
        {
        $("#msgbox").fadeTo
            (200,0.1,function()  
                { 

$(this).html('Logging in.....').addClass('messageboxok').fadeTo
                    (900,1, function()
                        { 
                        document.location='/mainpage.php';
                        }
                    );
                }
            );
        } 

    else 
        {
        $("#msgbox").fadeTo
            (200,0.1,function()
                { 
                $(this).html('User is already logged in.').
 addClass('messageboxerror').fadeTo(900,1);
                }
            );   
        }


    });
    return false; 
});
$("#password").blur(function()
{
    $("#login_form").trigger('submit');
});
});
</script>

PHP コード:

 <? 
 //Log In credentials

 if ($rehash==$dboPW && $user_name == $dboUN  && $logged=='Y'){echo "alreadyLogged"; exit;}
 if ($rehash==$dboPW && $user_name == $dboUN  && $logged=='N')
{
echo "yes"; 
$_SESSION['login'] = $username;
$_SESSION['password'] = $rehash;
$loggedUpdate=mysql_query("UPDATE Users SET LOGGED='Y' WHERE username='$user_name'");
exit;
 }
 else
 {echo "no";}
 ?>

このプロセスを要約すると、誰かがログインし、PHP スクリプトがチェックします。

  1. ユーザー名とパスワードが有効で、その人物がまだログインしていない場合 - 「はい」の値を返します

  2. ユーザー名とパスワードが有効で、その人物がすでにログインしている場合 - 「alreadyLogged」の値を返します

  3. ユーザー名またはパスワードが無効です - 「いいえ」の値を返します

これは AJAX に渡され、PHP スクリプトからの戻り値に基づいて正しいメッセージを表示する必要があります。参考までに(上記の要約を使用):

  1. AJAX は次を返す必要があります: Logging in...

  2. AJAX が返す必要があります: ユーザーは既にログインしています。

  3. AJAX は次を返す必要があります: 無効なユーザー名またはパスワード。

問題は次のとおりです: 誰かが正しくログインし、まだログインしていない場合、メッセージ 1 の代わりにメッセージ 2 が表示されます (メッセージ 1 が表示されることもあると思いますが、すぐに消えます)。

原因は AJAX にあると思いますが、残念ながら私は PHP ほど詳しくはありません。

4

3 に答える 3

2

問題はphpコードにあると思います。あなたのajaxコードは問題ないようです

これを試して

if ($rehash==$dboPW && $user_name == $dboUN  && $logged=='Y')
{
echo "alreadyLogged"; exit;
}
 elseif ($rehash==$dboPW && $user_name == $dboUN  && $logged=='N')
{
}
于 2012-10-17T05:06:48.087 に答える
0

私はそれがphpの問題だと思います.エラーが発生し、エラーメッセージが返されます. ajax_login.php が「yes」または「no」を返さない場合、2 番目のメッセージが表示されます。

于 2012-10-17T04:56:04.903 に答える
0

PHPを変更するだけです。これを試して :

//ログイン認証情報

// post if (isset($_POST)) { // 最初にログイン時に check if を使用する必要があります session_start();

// set variable post
$username = $_POST['user_name'];
$password = $_POST['password']; // change if use sha1 or md5
$rand = $_POST['rand'];

// check query database
$query = mysql_query("SELECT * FROM Users WHERE username='$username' AND password='$password'");
$user = mysql_fetch_array($query);
$row = mysql_num_rows($query);

if ($row > 0) {
    if ($user['LOGGED'] == 'Y') {
        echo "yes";
        $_SESSION['login'] = $username;
        $_SESSION['password'] = $rehash;
        $loggedUpdate = mysql_query("UPDATE Users SET LOGGED='Y' WHERE username='$user_name'");
        exit;
    } elseif ($user['LOGGED'] == 'N') { // you can use 'else'            
        echo "alreadyLogged";
        exit;
    } 
} else {
    // invalid value password and username
    echo "no";
    exit;
} }
于 2012-10-17T05:26:57.447 に答える