1

나는이 Related entry과 몇 가지 다른 것을 찾았지만 새로운 답변을 찾지 못해 새로운 것을 올리려고합니다. 나는 Ajax에 대해 알고있는 것을 사용하여 Javascript에서 데이터베이스 쿼리를 실행하려고한다. 전자 메일이 이미 데이터베이스에 있고 true가 아닌 경우 false를 반환해야하지만 잘못된 작업을 파악할 수는 없습니다. 뒤죽박죽을 시작하고 지저분 해지기 전에 나는 첫 시도를 게시했습니다.XMLHttpRequest를 사용하여 false를 반환하는 문제

자바 스크립트 : 무엇이든 상관없이 사실을 반환하는 것으로 보입니다.

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

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 : 나는 이미 그것은 여전히 ​​사실이다 확인하기 위해 서버에 다음 두 번째 검사를 수행하고, 경우 사용자에게 경고 한 번, 두 번 확인을 할 수 있습니다. 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을 반환합니다. 전역 부울 변수를 선언하고 익명 콜백 함수에 따라 변수를 변경하십시오.

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

코드 2 내부의 코드를 발견하기 때문에 이메일 = '' "만약"1에 따라 실행되지 않을 것 "만일"!.

관련 문제