1

こんにちは、登録フォームでメールアドレスを検証しようとしています。アドレスがデータベースに存在するかどうかを確認したい。

私は次の機能を持っています:

function validateEmailRepeat(){
        // check if email exists in the database;
             var emailVal = $('#email').val();
             // assuming this is a input text field

            $.post('check_email.php', {'email' : emailVal}, function(data) {
                    if(data==1) 
                        {
                        email.addClass("error");
                        emailInfo.text("Adress exists");
                        emailInfo.addClass("error");
                        dataExist=1;
                            }

                    else {

                        email.removeClass("error");
                        emailInfo.text("Valid adress");
                        emailInfo.removeClass("error");
                        dataExist=0;
                            }
                        });

                        if(dataExist==1)
                         return false;
                         else
                         return true;

                    }

check_email.php は次のようになります。

require_once('db.php');

if (isset($_POST['email'])){
$email=mysqli_real_escape_string($con,$_POST['email']);
$sql = "SELECT * FROM users WHERE `username`='".$email."'";
$select=mysqli_query($con,$sql) or die("fail");
$row = mysqli_num_rows($select);

if ($row >0) {

    echo 1;
}else echo 0 ;

}
else
echo "post error";

私はこれが初めてです。だから、タフにならないでください。前もって感謝します。

ル:すみません!質問を忘れてしまいました...問題は、var dataExist を関数フォーム $.post の外で定義すると、関数が true を返すことです。関数内にあるようにすると、「dataExist is not defined」エラーが発生し、 true を返します

Le: PHP は期待通りの 1 と 0 を返します..

LE: を定義しているようです

var dataExist=0;

関数の外でvalidateEmailRepeat()問題を解決しました。

もっとエレガントな別の方法があれば教えてください。これは私には少しばかげているようです。

4

2 に答える 2

2

問題は、ajax が非同期で動作するため、呼び出された関数に値を返すことができないことです。

                function validateEmailRepeat(){
                // check if email exists in the database;
                     var emailVal = $('#email').val();
                // assuming this is a input text field

                $.post('check_email.php', {'email' : emailVal}, function(data) {
                    if(data==1){
                        email.addClass("error");
                        emailInfo.text("Adress exists");
                        emailInfo.addClass("error");
                        dataExist=1;
                    }else{
                        email.removeClass("error");
                        emailInfo.text("Valid adress");
                        emailInfo.removeClass("error");
                        dataExist=0;
                    }
                        $('#some_input').val(dataExist);
                        validateUserName();
                    });
                }

                function validateUserName() {
                    var input =  $('#some_input').val();
                    if (input) {
                       alert("This username is already taken");// whatever
                    } else {
                         // whatever
                    }

                };
于 2013-06-12T17:52:55.877 に答える