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.
Cela a fonctionné parfaitement merci. – Siriss