2017-11-28 3 views
0

現在私は自分の個人用サイトの電子メール認証システムを設定しています。私はjQueryとAJAX(コードが続きます)を使ってこれを処理します。しかし問題はエコー2に戻らないということです。私のsignup.inc.phpでは、AJAX呼び出しで作業を続けることができます。PHPMailerがAJAXに戻る

私が理解しているように、コンパイラは、リダイレクトされた場所、この場合はsend_ver_email($user_email)の下に戻り、エコー2に戻る必要があります。これは私にはかなり新しく、私はあまり経験はありませんが、私は他に何を試してみませんか?移動してドキュメントをマージしようとしましたが、何も動作しません。

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パッケージ全体を含むverify.inc.phpに含まれています。そして、電子メールも機能します!私はまた、コードスタイルやレイアウトのヒントのために非常に感謝しています

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

}

一つ一つのメールを取得:)

EDIT 1:別のアプローチ:

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

    } else { 
     // some error handling 

    } 

これをクラッシュすることはありませんが、どこにでも記録されていますが、Ajaxはまだエコーを登録しません2

そして、別の試みがあった:

if($mail->send()) { 

     } else { 
      // some error handling 

     } 

とsignup.inc.phpに:

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

} 

これはあまりにも正常に動作します...これが最も私をweirds。どちらかというと、本当にダムのタイプミスがあったり、初心者ミス(うまくいけば)、またはajaxがこのエコーコールを非常に混乱させてしまいます。

+0

完全な 'send_ver_email'を表示してください。あるいは、そこに 'exit;'、 'die()'があるかどうかを調べる。 – Jeff

+0

コードが編集されました。だからこそ、私は何をすべきかわからないのです。 – Kadepp

+0

そのecho文の前にクラッシュしますか? PHPエラー報告を有効にしましたか?この場合、Ajaxコールは正常に返されますか(つまり200 OKステータス)かどうかを確認します。いくつかのデバッグが必要です。 – ADyson

答えて

0

dataType - これを削除します。

お使いのブラウザでは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;このため –