2010-12-13 72 views
1

J'ai trouvé ce Related entry et quelques autres mais je n'ai pas encore trouvé ma réponse, donc je poste un nouveau. J'essaye d'exécuter une requête de base de données de Javascript en utilisant ce que je comprends d'Ajax. Je dois retourner false si l'email est déjà dans la base de données et retourner vrai si ce n'est pas le cas, mais je n'arrive pas à comprendre ce que je fais mal. J'ai posté ma première tentative avant que je commence à déconner et rendre le désordre.Problèmes renvoyant faux après l'utilisation de XMLHttpRequest

javascript: Il semble revenir vrai, peu importe quoi.

function emailvalid(){ 

var email = document.getElementById('email').value; 
var confirmemail = document.getElementById('cemail').value; 
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; 
    } 

xmlhttp = new XMLHttpRequest(); 
var url="phpfiles/checkemail.php"; 
url = url+"?email="+email+"&cemail="+confirmemail; 
xmlhttp.onreadystatechange = function() 
{ 
    if (xmlhttp.readyState==4) 
    { 
     var answer = xmlhttp.responseText; 
     if(answer == 'r0') 
     { 

     document.getElementById('email').style.backgroundColor ='green'; 
     document.getElementById('tdemail').style.color = 'red'; 
     document.getElementById('tdemail').innerHTML = 'This email address is already associated with an exiting account. Please login or use a different email address.'; 
     document.getElementById('tdcemail').innerHTML = ''; 
     document.getElementById('cemail').value = ''; 
     return false; 
     } 
     else if(answer == 'r1') 
     { 

     document.getElementById('tdemail').style.color = 'green'; 
     document.getElementById('email').style.backgroundColor ='green'; 
     document.getElementById('tdemail').innerHTML = "Emails match and are valid"; 
     document.getElementById('tdcemail').style.color = 'green'; 
     document.getElementById('tdcemail').innerHTML = "Emails match and are valid"; 
     document.getElementById('cemail').style.backgroundColor ='green'; 
     return true; 
     } 
     else if(answer == 'r2') 
     { 

     document.getElementById('tdemail').style.color = 'red'; 
     document.getElementById('email').style.backgroundColor ='red'; 
     document.getElementById('tdemail').innerHTML = "Email is not valid"; 
     document.getElementById('tdcemail').style.color = 'red'; 
     document.getElementById('tdcemail').innerHTML = "Email is not valid."; 
     document.getElementById('cemail').style.backgroundColor ='red'; 
     return false; 
     } 
     else if(answer == 'r3') 
     { 

     document.getElementById('tdemail').style.color = 'green'; 
     document.getElementById('email').style.backgroundColor ='green'; 
     document.getElementById('tdemail').innerHTML = "Email is valid"; 
     document.getElementById('tdcemail').style.color = 'red'; 
     document.getElementById('tdcemail').innerHTML = "Emails do not match"; 
     document.getElementById('cemail').style.backgroundColor ='red'; 
     return false; 
     } 
     else if(answer == 'r4') 
     { 

     document.getElementById('tdemail').style.color = 'red'; 
     document.getElementById('email').style.backgroundColor ='red'; 
     document.getElementById('tdemail').innerHTML = 'Please enter a valid email address.'; 
     document.getElementById('tdcemail').style.color = 'red'; 
     document.getElementById('tdcemail').innerHTML = 'Please enter a valid email address.'; 
     document.getElementById('cemail').style.backgroundColor ='red'; 
     return false; 
     } 
    } 
} 
    xmlhttp.open("GET",url,true); 
    xmlhttp.send(null); 

} 
else 
{ 
    document.getElementById('tdemail').style.color = 'red'; 
    document.getElementById('email').style.backgroundColor ='red'; 
    document.getElementById('tdemail').innerHTML = "Email is not valid"; 
    document.getElementById('tdcemail').style.color = 'red'; 
    document.getElementById('tdcemail').innerHTML = "Email is not valid."; 
    document.getElementById('cemail').style.backgroundColor ='red'; 
    return false; 
} 
} 

La propriété innerHTML fonctionne très bien, c'est pourquoi je suis confuse. Php: fonctionne bien pour autant que je sache.

<?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: Je l'ai fait un double contrôle, une fois pour alerter l'utilisateur si elle est déjà prise, puis un second contrôle sur le serveur pour vous assurer qu'il est toujours vrai. cemail est l'email de confirmation.

<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> 

Merci à tous pour votre aide. J'espère que je l'ai bien exposé. Je suis ouvert à toutes les idées car je suis plutôt nouveau à ce sujet.

Répondre

2

Vous renvoyez false dans la fonction de rappel anonyme pas dans la fonction emailValid. Déclarez simplement une variable booléenne globale et modifiez-la en conséquence dans la fonction de rappel anonyme.

+0

Cela a fonctionné parfaitement merci. – Siriss

1

Tous les chemins de code dans votre fonction javascript emailvalid ne renvoient pas une valeur. Par exemple, après avoir appelé xmlhttp.send(null);, vous ne retournez rien.

La plupart de vos déclarations return sont en fait de la fonction reviennent anonyme attribué à onreadystatechange, pas de la fonction emailvalid, que je devine est pas ce que vous voulez.

+0

Merci de l'avoir signalé et de votre aide. – Siriss

0

Non lié à la question: j'ai repéré le code inatteignable ici

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; 
    } 

Le code à l'intérieur 2 « si » ne sera jamais exécuté parce email = « » selon 1er « si »!.