2016-07-28 7 views
0

Ich mache diesen Code, der (1) Datensätze von einer Tabelle in eine andere verschiebt (in der gleichen Datenbank), (2) sendet Inhalt von Tabelle 1 zu einer vorgegebenen E-Mail, und (3) löschen Sie den Inhalt von Tabelle 1 - Simulation einer "Add to Cart" -Funktion.PHP PDO senden E-Mail-Code sendet nur wenn nur Text - HTML senden müssen

Mein Problem ist, dass der folgende Code nur erfolgreich beim Senden der E-Mail ist, wenn $ Headers nicht auf Mail() gesendet wird. Allerdings muss ich den Tabelleninhalt als HTML senden oder zumindest

    für die verschiedenen Datensätze zulassen. Wenn die E-Mail nicht gesendet wird, wird auch der Lösch-Teil des Codes nicht ausgeführt. Was mache ich falsch?

    Vielen Dank im Voraus!

    Modified-Code (das funktioniert, wenn ich nicht $headers senden DO)

    <?php 
        include '../config/database.php'; 
        date_default_timezone_set('CET'); 
        $date = date('Y-m-d H:i:s'); 
    
        $query = "INSERT INTO claims_archive (t20pctID, total_amount, user_id, sent) SELECT t20pctID, total_amount, user_id, @date FROM cart WHERE t20pctID LIKE '%sony%'"; 
        $stmt = $con->prepare($query); 
    
        if ($stmt->execute()) { 
         $query = "SELECT t.t20pctID, t.main_artist, t.track_title, t.original_album, c.total_amount FROM cart c LEFT JOIN tblclaims t ON t.t20pctID = c.t20pctID WHERE t.t20pctID LIKE '%sony%' ORDER BY t.main_artist"; 
         $stmt=$con->prepare($query); 
         $stmt->execute(); 
         $to = "[email protected]"; 
         $subject = "Test"; 
         $headers = "MIME-Version: 1.0" . "\r\n"; 
         $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n"; 
         $headers .= "From: Test <[email protected]>" . "\r\n"; 
         $body = "Sent on: ". $date . "-\r\n"; 
         while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
          extract($row); 
          $body .= "Track title: ".$row ["track_title"]. "-"; 
         } 
         $success = mail($headers, $to, $subject, $body); 
         if ($success) { 
          $query_delete = "DELETE FROM cart WHERE t20pctID LIKE '%sony%'"; 
          $stmt = $con->prepare($query_delete); 
          $stmt->execute(); 
          header('Location: cart.php?action=sent'); 
         } else { 
          header('Location: cart.php?action=sent_failed'); 
         } 
        } else { 
         header('Location: cart.php?action=sent_failed'); 
        } 
    
        include 'layout_foot.php'; 
    ?> 
    

    <?php 
        include '../config/database.php'; 
        date_default_timezone_set('CET'); 
        $date = date('Y-m-d H:i:s'); 
    
        $query = "INSERT INTO claims_archive (t20pctID, total_amount, user_id, sent) SELECT t20pctID, total_amount, user_id, @date FROM cart WHERE t20pctID LIKE '%sony%'"; 
        $stmt = $con->prepare($query); 
    
        if ($stmt->execute()) { 
         //header('Location: cart.php?action=sent'); //please disregard this line as I forgot to remove it when I wrote this post. 
         $query = "SELECT t.t20pctID, t.main_artist, t.track_title, t.original_album, c.total_amount FROM cart c LEFT JOIN tblclaims t ON t.t20pctID = c.t20pctID WHERE t.t20pctID LIKE '%sony%' ORDER BY t.main_artist"; 
         $stmt=$con->prepare($query); 
         $stmt->execute(); 
         $to = "[email protected]"; 
         $subject = "Test"; 
         $headers = "Test <[email protected]>". "\r\n". "MIME-Version: 1.0" ."\r\n". "Content-type: text/html; charset=iso-8859-1" ."\r\n"; 
         $body = "Sent on: ". $date . "-"; 
         while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
          extract($row); 
          $body .= "Track title: ".$row ["track_title"]. "-"; 
         } 
         $success = mail($to, $subject, $body); 
         if ($success) { 
          header('Location: cart.php?action=sent'); 
         } else { 
          header('Location: cart.php?action=sent_failed'); 
         } 
    
         $query_delete = "DELETE FROM cart WHERE t20pctID LIKE '%sony%'"; 
         $stmt = $con->prepare($query_delete); 
         $stmt->execute(); 
        } else { 
         header('Location: cart.php?action=sent_failed'); 
        } 
    
        include 'layout_foot.php'; 
    ?> 
    
    +0

    Ihre Umleiten vor E-Mail zu senden - Ihr Kopf Gebrauch machen keinen Sinn –

    +0

    Hallo Dagon. Danke, dass du darauf hingewiesen hast. Ich habe vergessen, die erste Weiterleitung zu entfernen. Das Problem tritt immer noch auf. – Hola

    Antwort

    1

    Diese

    $success = mail($headers, $to, $subject, $body); 
    

    hat nicht die richtigen Parameter, um ...

    Siehe http://php.net/manual/de/function.mail.php Die korrekte Signatur lautet:

    bool mail (string $to , string $subject , string $message 
         [, string $additional_headers [, string $additional_parameters ]]) 
    

    so

    $success = mail($to, $subject, $body, $headers); 
    
    +0

    Das hat es gelöst! Ich kann nicht glauben, dass die Antwort die ganze Zeit da war! Vielen Dank allen! @Shrikant D Ich kann dir keine Abstimmungen geben:/ – Hola

    +0

    aaaaaaah. Ich dachte, Upvotes wären anders als akzeptieren als richtige Antwort. Shrikant fand kleinere Probleme, die auch geholfen haben :) Einen schönen Tag noch! – Hola

    2

    Ihr Löschcode, da Ihr sind Original-Code wird nicht in jedem Fall durchgeführt werden Umleiten vor diesem Code ausführen.

    1. entfernen header('Location: cart.php?action=sent'); geschrieben unten an if ($stmt->execute()) {.

    2. Platzieren Sie Ihren Löschcode in if($success) Bedingung vor der Überschrift.

    3. aktualisieren $ headers Variable mit folgendem Code und füge ihn in Ihre E-Mail-Funktion:

      $headers = "MIME-Version: 1.0" . "\r\n"; 
      $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n"; 
      $headers .= 'From: Test <[email protected]>' . "\r\n"; 
      
    +0

    Hallo Shrikant D. Ich habe die Änderungen, die Sie vorgeschlagen haben, und das Problem ist immer noch da. Ich habe das OP aktualisiert ... das gibt mir Kopfschmerzen ... Danke, dass du es trotzdem versucht hast! – Hola

    +0

    @Hola: Code, den du oben erwähnt hast, ist der aktualisierte. Löschen der Produktabfrage sollte ausgeführt werden, bevor Sie Ihre Headerinformationen gesendet haben. Ihre SQL-Abfrage sollte daher in die Bedingung 'if ($ success)' oder davor eingefügt werden. –

    +0

    @Hola: 'mail ($ headers, $ to, $ subject, $ body)' sollte sein 'mail ($ to, $ subject, $ body, $ headers)' –