現在私は自分の個人用サイトの電子メール認証システムを設定しています。私は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がこのエコーコールを非常に混乱させてしまいます。
完全な 'send_ver_email'を表示してください。あるいは、そこに 'exit;'、 'die()'があるかどうかを調べる。 – Jeff
コードが編集されました。だからこそ、私は何をすべきかわからないのです。 – Kadepp
そのecho文の前にクラッシュしますか? PHPエラー報告を有効にしましたか?この場合、Ajaxコールは正常に返されますか(つまり200 OKステータス)かどうかを確認します。いくつかのデバッグが必要です。 – ADyson