2017-11-28 2 views
0

Derzeit richte ich ein E-Mail-Verifizierungssystem für meine persönliche Website ein. Ich versuche es mit jQuery und AJAX (Code folgt). Aber das Problem ist, dass es nicht zum Echo 2 zurückkehrt; in meiner signup.inc.php, damit ich im AJAX-Call weiterarbeiten kann.PHPMailer zurück zu AJAX

Wie ich es verstehe, sollte der Compiler von dem Punkt, an den es umgeleitet wurde, zurück zu/weitergehen, in diesem Fall die send_ver_email($user_email) unten und Echo 2. Was habe ich falsch verstanden? Das ist ziemlich neu für mich und ich habe nicht so viel Erfahrung, aber ich weiß nicht, was ich sonst noch versuchen sollte. Versuchte Verschieben und Zusammenführen von Dokumenten, aber nichts funktioniert.

Der Aufruf AJAX in JS:

$.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; 

         } 

        } 

       }); 

signup.inc.php große Werke und speichert die Daten in der Datenbank, so ist dies nicht das Problem:

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

    } 

} 

die AJAX empfängt das 2 und reagiert wie beabsichtigt, wenn deaktiviert ist, so bin ich mir sehr sicher, dass es etwas mit der Struktur oder der Art, wie send() Dinge handhabt, zu tun hat. Diese Funktion ist in verification.inc.php enthalten, die das gesamte PHPMailer-Paket enthält. Und die E-Mail funktioniert auch! Ich erhalte jede einzelne Mail

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

}

Ich bin auch sehr dankbar für Tipps über Code-Stil und Layout :)

EDIT 1: Ein anderer Ansatz:

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

    } else { 
     // some error handling 

    } 

Diese stürzt nicht ab, ich loggte überall herum, aber der Ajax registriert immer noch nicht das Echo 2

Und ein weiterer Versuch zeigte:

if($mail->send()) { 

     } else { 
      // some error handling 

     } 

und in signup.inc.php:

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

} 

Dies funktioniert auch gut ... das Weirds mich am meisten aus. Entweder habe ich einen wirklich dummen Tippfehler irgendwo oder einen anderen Anfängerfehler (hoffentlich) oder Ajax behandelt diese Echoaufrufe auf eine sehr verwirrende Weise.

+0

Bitte zeigen Sie dann vollständig 'send_ver_email' dann. Oder prüfe, ob dort 'exit;', 'die()' drin ist. – Jeff

+0

Code bearbeitet. Weder existieren, deshalb habe ich keine Ahnung, was zu tun ist – Kadepp

+0

stürzt es vor diesem Echo-Anweisung? Haben Sie PHP-Fehlermeldungen aktiviert?Führt Ihr Ajax-Anruf in diesem Fall erfolgreich zurück (d. H. 200 OK-Status) oder nicht? Sie müssen etwas debuggen. – ADyson

Antwort

0

dataType - löschen Sie diesen.

Add console.log und offene Konsole in Ihrem Browser

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

Zeigen Sie Ihre Konsole, und dann werden Sie sehen, warum. Vielleicht ein unerwünschtes Zeichen oder PHP-Fehler

zweite Sache - sollte es sein, wenn abgetan so (ich soll)

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

Sie können auch Schaltergehäuse in Erfolg zu nutzen versuchen.

+0

Vielen Dank !!! Die erste Idee ist großartig. Es wird irgendwie das ganze Mail-Sendeprotokoll und der tatsächliche Rückgabewert "2" angehängt. Immer noch keine Ahnung, warum es das tut, aber ich weiß nicht, wo ich hinschauen soll. Danke, komplett vergessen die js Konsole – Kadepp

+0

$ mail-> SMTPDebug = 2; aus diesem Grund –