2010-12-13 17 views
1

私はこれを見つけましたRelated entryと他のいくつかの人が、私は非常に私の答えを見つけたので、私は新しい投稿です。私はJavascriptからAjaxを理解してデータベースクエリを実行しようとしています。電子メールが既にデータベースに入っていて、それが返されない場合はtrueを返す場合はfalseを返す必要がありますが、私が間違っていることを理解できないようです。私が最初に試してみたのは、あちこちに乱れて乱雑になってしまう前です。XMLHttpRequestを使用した後でfalseを返す問題

javascript:何があっても真実を返すようです。

innerHTMLの内容はうまく動作し、私は混乱しています。

php:私が知る限り、うまく動作します。

<?php 
$email = $_GET['email']; 
$cemail = $_GET['cemail']; 
$emailvalidstring = "/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i"; 
include('connection.php'); 

$checkemailquery = "SELECT email FROM users WHERE email='".$email."'"; 
$checkemailresult = mysql_query($checkemailquery); 

// if query failed. 
if(!$checkemailresult) 
{ 
    $error = mysql_error(); 
    print $error; 
    exit; 
} 
//if the query did run, the email exists. Print error and exit. 
if(mysql_affected_rows() != 0) 
{ 
    echo "r0"; 
    return false; 
} 
else{ 
    if(preg_match($emailvalidstring, $email) && $email == $cemail) 
    { 
     echo "r1"; 
     return true; 
    } 
    else if(!preg_match($emailvalidstring, $email) && $email == $cemail) 
    { 
      echo "r2"; 
      return false; 
    } 
    else if(preg_match($emailvalidstring, $email) && $email != $cemail) 
    { 
     echo "r3"; 
     return false; 
    } 
    else if(!preg_match($emailvalidstring, $email) && $email != $cemail) 
    { 
     echo "r4"; 
     return false; 
    } 
} 
?> 

HTML:私はそれがすでに使用されている場合は、ユーザーに警告するために、一度、二重のチェックを行う必要があり、その後、サーバー上の第2のチェックが、それはまだ本当であることを確認します。 cemailは確認メールです。

<form id="newaccount" name="newaccount" method="post" action="phpfiles/accountcode.php" onSubmit="return emailvalid()" > 
<input type="text" id="email" onBlur="emailvalid()"/> 
<input type="text" id="cemail" onBlur="emailvalid()" /> 
<input type="submit" value="New"/> 
</form> 

ありがとうございました。私は十分にそれを整えたことを願っています。私はこれではむしろ新しいアイデアを公開しています。

答えて

2

falseは、emailValid機能ではない匿名コールバック関数で返されます。グローバルブール変数を宣言し、それに応じて匿名コールバック関数でそれを変更してください。

+0

これは完璧に働きました。 – Siriss

1

emailvalid javascript関数内のすべてのコードパスが値を返すわけではありません。たとえば、xmlhttp.send(null);を呼び出した後は、何も返されません。

あなたreturn文のほとんどは、実際に私は推測しているemailvalid機能、からonreadystatechangeに割り当てられた匿名関数からではない戻ってきているが、あなたが望むものではありません。

+0

それを指摘してくれてありがとう、ありがとう。 – Siriss

0

問題に関連していない!:「場合」第一に応じて電子メール=「」ので、実行されることはありません「場合」私は第二の内側

if(email != '' && confirmemail != '') 
{ 
    if(email == '') 
    { 
     document.getElementById('email').style.backgroundColor ='red'; 
     document.getElementById('tdemail').style.color = 'red'; 
     document.getElementById('tdemail').innerHTML = 'You must enter a valid email address.'; 
     document.getElementById('tdcemail').innerHTML = ''; 
     document.getElementById('cemail').value = ''; 
     return false; 
    } 

ここにコードを到達不能コードを見つけました。

関連する問題