2012-01-06 30 views
0

ユーザーが作成される前に、電子メールがシステムに存在するかどうかを確認しようとしています。私はPHPとjQuery(AJAX、プラグイン)を使用しています。ありませんが、エラーメッセージが表示されます

同じ電子メールをデータベースに作成していないのに、私のスクリプトは既存の同一の電子メールがあると書きます。しかし、それはまだユーザー(それはすべきです)を作成します。

が既存の電子メールであるの場合、ユーザーを作成していないため、正しいエラーメッセージが書き込まれています。

私のAJAXが間違っているかどうかわかりません。

マイPHP:

$check_email = mysql_query("SELECT * FROM table WHERE email='$email'"); 
$email_count = mysql_num_rows($check_email); 

if($email_count>0){ 
echo "Email exists"; 
    return false; 
} 

そして、私のjQuery:

あなたがより良いPDOを使用したい
$(function() { 
    $("#goNewUser").click(function() { 
     // validate and process form here 

     var username = $("input#username").val(); 
     if(username == "") { 
      $("input#username").focus(); 
     return false; 
     } 

     var email = $("input#email").val(); 
     if(email == "") { 
      $("input#email").focus(); 
     return false; 
     } 

     var password = $("input#password").val(); 
     if(password == "") { 
      $("input#password").focus(); 
     return false; 
     } 

     var salt = $("input#salt").val(); 
     if(salt == ""){ 
      $("input#username").focus(); 
     return false; 
     } 

     var dataString = 'username=' + username + '&email=' + email + '&password=' + password + '&salt=' + salt; 
     //alert (dataString); 
     $.ajax({ 
      type: "POST", 
      url: "includes/classes/handler.php?do=addLogin", 
      data: dataString, 
      success: function(returnedData){ 

       if(returnedData == ''){ 
        $('.sideBarNewUserWrap').fadeOut(); 
       } else { 
        $('.errorMessage').fadeIn().html(returnedData); 
       } 

      } 
     }); 
     return false; 
    }); 
}); 
+0

$ emailにユーザーから提供された正しいメールが含まれているかどうかを確認しましたか? – redmoon7777

+0

そのエラーを処理するために別のPHPファイルを使用することをお勧めします。 include/classes/handler.phpではなく/ classes/handle_error.phpを使用してください。do = addLogin –

+0

このエラーにはhandler.phpを使用していません。プログラムされたOOPです。ハンドラはクラスファイルの中間の人です。 – skolind

答えて

2
  1. ;)それはあなたがそれが正しい を使用する場合に必要なすべての保護を行います。今、あなたはセキュリティホールがたくさんあるので、 - あなたはエスケープ何 クエリを実行しない、あなたはフィールド値の平等をチェックしている(それ は、正規表現を使用するか、少なくとも可能スペースから値 を切り捨てるすることをお勧めしている間)

  2. あなたの小切手は少し荒いです。 SELECT COUNT(*) as cnt FROM table WHERE email = '$email';を使用して、 intval($first_row_of_result['cnt']) > 0かどうかを確認してください。

  3. どのようにしてユーザー作成プロセスを実行しますか?あなたのコードがユーザ作成の前に であり、両方が1つの機能の一部である場合 - ええ、そうです。ユーザーを作成する前にif (!email_exists($email)) return false;を実行するのは正しいことです。 それ以外の場合は、そのプロセスが正しいかどうかはわかりません。

ああ、うん...

var dataString = 'username=' + username + '&email=' + email + '&password=' + password + '&salt=' + salt; 

$.ajax({ 
    type: "POST", 
    url: "includes/classes/handler.php?do=addLogin", 
    data: dataString, 
    success: function(returnedData){ } 
}); 

これは、手動でデータをエスケープを使用していない確かに優れている - 代わりにdataStringのJSONオブジェクトを渡してみてください。 jQueryはそれを確実に処理します。

そして、あなたはより良いconsole.log(something)で任意のalert(something)を交換するFireBugまたは他のツールを使用したい - それは、よりきれいです。)

そしてもう一つ:あなたはより良い利用ネゲート条件をしたい:

if (returnedData){ 
    $('.errorMessage').fadeIn().html(returnedData); 
} else { 
    $('.sideBarNewUserWrap').fadeOut(); 
} 

それがあなたを助けることを望みます。

+1

特に '$( 'form')。submit(function(){var dataString = $(this).serialize(); $ .ajax(...);); – Grexis

+0

ええ、それはさらに良い=)は、ノートを取る=) – shybovycha

+0

おかげで男。私はちょうど何かを知る必要があります:PDO、それはmysql_real_escape_stringなどの代わりですか?そして、JSONオブジェクトはより安全ですか、それとも何を意味しますか?jQueryは確実にそれを処理しますか? – skolind

関連する問題