更新状态时会发送电子邮件。问题是,它有许多其他领域,每当我更新其中任何一个时,它再次拍摄电子邮件。如果您想发送电子邮件或没有,我想要求确认。我确实使用ajax来做,但是在控制台中,它说已发送电子邮件但我在收件箱中没有任何内容。
Javascript代码
<script type="text/javascript">
function send_email(){
var delete_confirmed=confirm("Are you sure you want to send email?");
if (delete_confirmed==true) {
$.ajax({
type: "POST",
url: 'email.php',
data:{action:'call_this'},
success:function() {
console.log('email sent');
}
});
}}
</script>
email.php
if(isset($_POST['status']) == 'completed' && $_POST['action'] == 'call_this'){
$cmail = new PHPMailer;
$cmail->isSMTP(); // Set mailer to use SMTP
$cmail->SMTPAuth = true; // Enable SMTP authentication
$cmail->Host = $smtp_server; // Specify main and backup SMTP servers
$cmail->Username = $username; // SMTP username
$cmail->Password = $password; // SMTP password
$cmail->SMTPSecure = "ssl"; // Enable TLS encryption, `ssl` also accepted
$cmail->Port = 465; // TCP port to connect to
$cmail->setFrom("example@example.com", "Example");
$q_mail = "SELECT * FROM order_details WHERE order_id = '$_GET[edit_id]'";
$r_mail = mysqli_query($conn, $q_mail);
while ($r_rows = mysqli_fetch_assoc($r_mail)) {
$cmail->addAddress($r_rows['email'], $r_rows['firstname']); // Add a recipient
$cmail->isHTML(true); // Set email format to HTML
$bodyContent = 'test message';
$cmail->Subject = "test subject" ;
$cmail->Body = $bodyContent;
if(!$cmail->send()) {
$error = $cmail->ErrorInfo;
} else {
$error = 'Message has been sent';
}
}
}
表单HTML
<div class="col-md-2" style="padding-left:0px;" ></br>
<input type="submit" class="btn navbar-bar btn-xs btn-success" name="status" onclick="send_email();" value="Update">
</div>
答案 0 :(得分:2)
在您的PHP中,您正在检查isset($_POST['status']) == 'completed'
,始终将为false。 isset
只会返回一个布尔值。此外,它始终是错误的,因为您没有将状态传递给email.php
,只传递操作。您需要进行一些更改才能解决此问题。首先是你的javascript:
$.ajax({
type: "POST",
url: 'email.php',
data:{action:'call_this', status: 'completed'},
success:function() {
console.log('email sent');
}
});
第二个是PHP脚本:
if( ( isset($_POST['status']) && $_POST['status'] == 'completed' ) && $_POST['action'] == 'call_this'){
答案 1 :(得分:0)
您从ajax请求中收到某种反馈的事实表明问题出在其他地方。下面的行不正确 - 您错过了edit_id
的引号 - 当访问字符串中的$_GET / $_POST
个变量时,我总是用大括号括起来,如下所示。
$q_mail = "SELECT * FROM `order_details` WHERE `order_id` = '{$_GET['edit_id']}';";
当你发布问题时可能只是错误的输入,但可能没有 - 只要事情没有按预期发生就检查错误日志。
如果you look at this thread有一个使用try/catch
来推断出错的地方的好例子。