2017-11-28 4 views
0

현재 개인 사이트의 이메일 확인 시스템을 설정 중입니다. 나는 jQuery와 AJAX (코드가 뒤 따른다)로 이것을 처리하려고한다. 그러나 문제는 에코 2로 돌아 가지 않는다는 것입니다. 내 signup.inc.php에서 AJAX 호출 작업을 계속할 수 있습니다.PHPMailer가 AJAX (으)로 돌아 가기

컴파일러는 리디렉션 된 지점 (이 경우 send_ver_email($user_email))에서 에코로 돌아가고/계속해야합니다. 무엇이 잘못 되었습니까? 이것은 나에게는 꽤 새로운 경험이고, 많은 경험이 없지만, 나는 그 밖의 무엇을 시도하지 않습니다. 문서 이동 및 병합을 시도했지만 아무 것도 작동하지 않습니다.

JS에서 AJAX 호출 :

include_once "dbc.inc.php"; 
include_once "verification.inc.php"; 

if (isset($_POST)) { 

    //get posted data; 

    //select $statement 

    // error handlers 

    if (filter_var($user_email, FILTER_VALIDATE_EMAIL) === false) { 
     echo 0; 
     exit(); 

    } else if ($statement->rowCount() > 0) { 
     echo 1; 
     exit(); 

    } else { 
     // db entry (works great no problems there) 


     send_ver_email($user_email); 

     echo 2; 
     exit(); 

    } 

} 

는 AJAX이 2 수신 : 잘 작동하고 데이터를 데이터베이스에 저장되므로이 문제없는 signup.inc.php

$.ajax({ 
        type: 'POST', 
        url: 'include/signup.inc.php', 
        data: 'user_name=' + user_name + 
        '&user_email=' + user_email + 
        '&user_pw=' + user_pw, 
        dataType: 'html', 
        success: function (data) { 

         if (data == 0) { // invalid email 
          ... do something 

         } else if (data == 1) { // account already exists 
          ... do something 

         } else if (data == 2) { 

**This is where it should land after the successful sign up**       

          return false; 

         } 

        } 

       }); 

send_ver_email($user_email)이 비활성화 된 경우 의도 한대로 반응하므로 구조 나 send() 처리 방법과 관련이 있다는 것을 확신합니다. 이 함수는 전체 PHPMailer 패키지를 포함하는 verification.inc.php에 포함되어 있습니다. 그리고 이메일도 작동합니다! 다른 접근 방법 :

if($mail->send()) { 
     echo 2; 
     exit(); 

    } else { 
     // some error handling 

    } 

이 나는 ​​또한 코드 스타일과 레이아웃 :

EDIT 1에 대한 팁에 매우 감사하고 매일 메일

use PHPMailer\PHPMailer\PHPMailer; 
use PHPMailer\PHPMailer\Exception; 

include_once "../PHPMailer/src/Exception.php"; 
include_once "../PHPMailer/src/PHPMailer.php"; 
include_once "../PHPMailer/src/SMTP.php"; 

function generate_ver_code() { 

    // ... 

} 

function send_ver_email ($user_mail) { 

$verCode = generate_ver_code(); 

$mail = new PHPMailer; 
$mail->SMTPDebug = 2; 
$mail->isSMTP(); 
$mail->Host = 'smtp.gmail.com'; 
$mail->Port = 587; 
$mail->SMTPSecure = 'tls'; 
$mail->SMTPAuth = true; 
$mail->Username = '.......'; 
$mail->Password = '........'; 
$mail->setFrom('........', '.......'); 
$mail->addAddress('.........', '..........'); 
$mail->Subject = '...........'; 
$mail->Body = "......................"; 
$mail->isHTML(true); 
$mail->AltBody = '.........'; 

$mail->send() 

}

를 얻을 수 충돌을 일으키지 않고 주변에 로그온했지만 아약스는 여전히 에코를 등록하지 않습니다.

그리고 또 다른 시도가 나타났다 :

if($mail->send()) { 

     } else { 
      // some error handling 

     } 

및 signup.inc.php에서이 너무 잘 작동

send_ver_email($user_email); 
    --------LOGGED HERE--------- 
    echo 2; 
    exit(); 

} 

...이 가장 나를 weirds을. 어딘가에서 정말 바보 같은 오타가 있거나 초보자 실수 (잘하면) 또는 아약스가이 에코 호출을 매우 혼란스러운 방식으로 처리합니다.

+0

완전한 'send_ver_email'을 표시하십시오. 또는 거기에'exit;','die()'가 있는지 확인하십시오. – Jeff

+0

코드가 편집되었습니다. 존재하지 않는 이유가 무엇입니까? – Kadepp

+0

에코 문 앞에 충돌이 발생하지 않습니다. PHP 오류보고 기능이 켜져 있습니까?이 경우 Ajax 호출이 성공적으로 반환됩니까 (예 : 200 OK 상태)? 디버깅을해야합니다. – ADyson

답변

0

데이터 유형 -이 데이터를 삭제하십시오. 브라우저에서

추가 CONSOLE.LOG 오픈 콘솔

success: function (data) { 
    console.log(data); 

당신의 콘솔을 표시 한 다음 당신은 왜 볼 수 있습니다. 어쩌면 원치 않는 문자 또는 PHP 오류

두 번째 것은 -이 같은 stament (나는 가정) 경우

if (data == "1") // it is returning string, not integer. 

또한 성공 스위치 케이스를 사용하려고 할 수있을 것이다.

+0

대단히 감사합니다! 첫 번째 아이디어는 대단합니다. 그것은 어떻게 든 메일을 보내는 메일과 실제 반환 값인 "2"를 첨부합니다. 왜 그것이 그것을하는지, 그러나 나는 어디에 (서) 어디에서 안다는 것을 모른다. 고마워, js 콘솔을 완전히 잊었다 – Kadepp

+0

$ mail-> SMTPDebug = 2; 이것 때문에 –