2016-09-08 10 views
0

ステータスを更新するとメールが送信されます。問題は、他の多くのフィールドがあり、誰かを更新するたびに、再び電子メールを撮影することです。私は、あなたが電子メールを送信するかどうかを確認したいと思っています。私はそれを行うためにajaxを使いましたが、コンソールでは、電子メールは送信されたと言われていますが、私は受信トレイに何も手に入れません。 常にはfalseになりますjavacriptの確認時にPHPコードを実行

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("[email protected]", "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をPHPで

<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> 
+1

htmlも表示 –

+0

CLARIFICATION PLEASE:ステータス以外が変更されたときに電子メールを送信しないようにしたいですか?右か間違っている? – RiggsFolly

+0

'$ _POST ['status']'はどこに送られますか? –

答えて

2

あなたがisset($_POST['status']) == 'completed'のためにチェックしています、。 issetはブール値のみを返します。また、あなたがステータスをemail.phpに渡すのではなく、アクションだけを渡すと、常にfalseになります。これを修正するには、いくつかの変更を加える必要があります。最初はあなたの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'){ 
+0

私は電子メールを送信を選択すると3つのステータスがあります。現在、あなたが言った変更を行い、それは動作していません...それはメールは送信されたものの、何も受信されないと言います。 :( –

0

あなたはAJAX要求からのフィードバックのいくつかの並べ替えを受けているという事実が、問題は別の場所に存在を示唆しています。下の行が間違っていた - edit_idの引用符がありませんでした。文字列内の変数$_GET/$_POSTにアクセスすると、常に以下のように中括弧で囲みます。期待通りに物事が発生しない時はいつでも、エラーログを確認 -

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

は、それはちょうど、これはあなたが質問を投稿する場合misstyped多分いなかったことが考えられます。

you look at this threadの場合、try/catchを使用して、状況が悪いと推測する良い例があります。

関連する問題