2012-01-27 43 views
1

JqueryとAjaxを使用してリクエストを処理したPHPファイルに送信し、返信を返すログインフォームを作成しています。私は意図的に間違ったパスワードを入力したとしても、フォームがいつも真に戻ってくるので、PHPスクリプトが間違っている可能性があると私は考えています。ここでJquery AjaxとPHPフォームの提出

はhtmlコードです:ここで

<div id="login"> 
    <span class="error">Uh oh! Something went wrong please try again!</span> 
    <span class="success">Congrats! You've been logged in, redirecting you to your homepage</span> 
    <form action="process/core/login.php" method="post"> 
    <p>Email: <input type="text" name="email" <?php if($_POST['email'] != '') { echo 'value="'. $_POST['email'] .'"'; }?> /></p> 
    <p>Password: <input type="password" name="pword" /></p> 
    <p><input type="submit" value="Login" id="login-btn" /></p> 
    </form> 
</div> 

<script> 
function redirect(){ 
    window.location = "home.php" 
} 

$("#login-btn").click(function(){ 
    $.ajax({ 
     type:  "post",          // type of post 
     url:  "process/core/login.php",     // submitting file 
     data:  $("form").serialize(),      // data to submit 
     success: function() { 
      $(".success").show("slow");       // sucess function 
      setTimeout('redirect()', 3000); 
     },  
     error: function() { 
      $('.error').show("slow");       // error function 
     } 
    }); 
return false; 
}); 
</script> 

は、PHPスクリプトです:

<?php 
session_start(); 

require '../../lib/core/connect.php'; 

if(!empty($_POST['email']) && !empty($_POST['pword'])) { 

    $userInfo = mysql_query("SELECT * FROM users WHERE email = '". mysql_real_escape_string($_POST['email']) ."'"); 
    $userInfo = mysql_fetch_assoc($userInfo); 

    if($_POST['email'] == $userInfo['email'] && md5($_POST['pword']) == $userInfo['pword']) { 

     if($userInfo['active'] == 1) { 

      $_SESSION['AuthEmail']=$userInfo['email']; 
      $_SESSION['AuthUid']=$userInfo['uid']; 
      $_SESSION['AuthName']=$userInfo['fname'] . ' ' . $userInfo['lname']; 
      $_SESSION['AuthActive']=$userInfo['active']; 
      $_SESSION['AuthType']=$userInfo['type']; 

      return true; 
      print 'success'; 
     } else { 
      return false; 
      print 'fail not active'; 
     } 
    } else { 
     return false; 
     print 'Email and or password didn\'t match'; 
    } 

} else { 
    return false; 
    print 'Didn\'t enter one of the required values'; 
} 
?> 

どこかに私がエラーを持って、私も何とかfalseを返すようにPHPスクリプトのすべての値を変更し、アヤックスの成功メッセージは依然として成功裏に発射されました。どんな助けでも大歓迎です、フォーラム全体を検索して関連トピックを検索しましたが、エラーが深刻なことは何も見つかりませんでした。私はあなたが実際にhttp://php.net/manual/en/language.exceptions.php偽が、それは単に真実ではないエラーではありませんと呼ばれるエラーハンドラのための例外を投げてきたする必要があると思う

おかげ

+1

ちなみに戻り値の下にあるあなたのプリントはこれまでトリガーされません。 。 。 –

答えて

1

ajaxsuccessコールバックは、HTTP 200がサーバーから返されたとき(つまり、適切な応答が返されたとき)に発生します。つまり、PHPコードでどのコードパスが実行されても成功コールバックは呼び出され、ユーザーはリダイレクトされます。

成功コールバックを変更して応答を確認し、適切に動作させるか、サーバーに例外をスローしてfalseシナリオを返すことができます。

+0

あなたは正しく、Ajaxリクエストを実際に実行することができない限り、成功関数がどのような機能を発揮しても問題は解決しませんでした。私が気づいていなかったのは、結果を区別するために返品データを使用する必要があったということです。私はPHPスクリプトを変更して、単純に文字列 'true'または 'false'を出力してから、クライアント側でPHPスクリプトからの戻り値に応じてデータを比較して、私が探していた結果を得ました。 回答ありがとうございます! –

2

+0

おそらく、成功/エラーコードで応答データを記入するのもよい解決策でしょうか?私は例外の可能性については知らなかったし、どの解決策が正しいのか判断できません。何か案は?たぶんboolが例外対処のジレンマを返すのと同じです。 – clime

+0

私はどちらの方法も有効だと思うし、どうしても他のものを使う理由を手にしていない理由を考えることができません。私が想定している他のコードでエラーが回復可能な場合(つまり、try catchを使用することができるように)例外がスローされ、何かを書き込むのではなく例外が発生したスタックトレースが発生します。たぶん、誰か他の人がそれをやり遂げる理由でチャイムします。 – shaunhusain

+0

過去のPHPの経験はありますが、一般的にはBlazeDS/JavaとFlexをクライアント側で使用しています。実際には例外でない限りエラーハンドラについての私の前提はPHPやJQueryではなく、その視点では、エラーを投げてエラー状況を処理し、クライアント側では、フォールトイベントまたは成功イベントのいずれかを取得するので、より意味を持ちます。 – shaunhusain

関連する問題