【问题标题】:Run php code on confirmation of javascript在确认 javascript 时运行 php 代码
【发布时间】:2017-01-16 06:09:52
【问题描述】:

当我更新状态时会发送一封电子邮件。问题是,它还有许多其他字段,每当我更新其中任何一个字段时,它都会再次发送电子邮件。我只想要求您确认是否要发送电子邮件。我确实使用 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>

电子邮件.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>

【问题讨论】:

  • 同时显示 html
  • 请澄清:您想在状态以外的任何其他内容发生更改时停止发送电子邮件?对还是错?
  • $_POST['status'] 发送到哪里?
  • 您没有从 PHP 电子邮件文件中的 ajax 发送状态数据
  • 正是...RiggsFolly...好吧,$_POST['status'] 将数据发送到数据库,然后电子邮件从数据库中获取数据以发送电子邮件...让我也更新该代码...跨度>

标签: javascript php jquery ajax email


【解决方案1】:

您从 ajax 请求中收到某种反馈这一事实表明问题出在其他地方。下面的行不正确-您缺少edit_id 中的引号-并且在访问字符串中的$_GET / $_POST 变量时,我总是用花括号括起来,如下所示。

$q_mail = "SELECT * FROM `order_details` WHERE `order_id` = '{$_GET['edit_id']}';";

这可能只是您发布问题时输入错误,但也可能不是 - 只要事情没有按预期发生,请检查错误日志。

如果you look at this thread 有一个很好的例子,使用try/catch 来推断哪里出了问题。

【讨论】:

    【解决方案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'){
    

    【讨论】:

    • 当我选择发送电子邮件时,我还有另外三种状态。目前,进行了您所说的更改并且它不起作用......它说电子邮件已发送但未收到任何内容。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多