2017-01-30 5 views
0

Der folgende Code funktioniert beim Senden der Datei email-template.php korrekt. Ich möchte jetzt die Ergebnisse der SQL-Abfrage in die E-Mail-Vorlage in einer Tabelle aufnehmen, im Grunde ist es eine Liste von Anführungszeichen. Ich habe das Gefühl, str_replace ist der Weg zu gehen, aber ein kompletter Neuling zu sein, bin ich mir nicht sicher, wie man das macht.SQL-Abfrageergebnisse zu E-Mail-Vorlage hinzufügen

<?php 
     include('connect.php'); 
     include('functions.php'); 


    $sql = "SELECT Quote FROM daily_quote Order By rand() Limit 0,10"; 
    $result = $conn->query($sql); 



    $to = '[email protected]'; 
    $subject = "Test"; 

    $htmlContent = file_get_contents("email-template.php"); 

    $headers = "MIME-Version: 1.0" . "\r\n"; 
    $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n"; 

    // Additional headers 
    $headers .= 'From: [email protected]' . "\r\n"; 


    // Send email 
    if(mail($to,$subject,$htmlContent,$headers)): 
     $successMsg = 'Email has sent successfully.'; 
    else: 
     $errorMsg = 'Email sending fail.'; 
    endif; 
    include('footer.php'); 
+0

Sie sollten vermeiden einlassen die Angewohnheit, eine Wegwerf-SQL-Zeichenfolge zu deklarieren und stattdessen die Abfrage direkt in den Aufruf "query (...)" zu stellen. Dadurch werden Fehler vermieden, bei denen Sie versehentlich die falsche Abfrage ausgeführt haben. Ebenso ist der 'if (...):' Stil die [alternative Syntax] (http://php.net/manual/en/control-structures.alternative-syntax.php) und wird nicht wirklich empfohlen. – tadman

+0

Ich sehe nichts falsches mit 'str_replace()' für diese einfache Aufgabe. Definieren Sie einen Platzhalter in der Vorlage und ersetzen Sie ihn durch die generierte Zeichenfolge, die die HTML-Tabelle enthält. Für komplexere Templates (oder wenn Sie nur Datenverarbeitung und Präsentation trennen möchten) können Sie eine Template-Engine wie Smarty, Twig oder was auch immer verwenden. –

Antwort

0

in E-Mail-template.php add: {place_holder}

bearbeiten Ihr Skript auf diese Weise:

$sql = "SELECT Quote FROM daily_quote Order By rand() Limit 0,10"; 
$result = $conn->query($sql); 
$template = "<table>"; 
while($row = $result->fetch_assoc()) { 
    $template .= "<tr><td>".$row['Quote']."</td></tr>"; 
$template .= "</table>"; 

und bearbeiten

if(mail($to,$subject,str_replace("{place_holder}",$template,$htmlContent),$headers)): 
+0

Das PHP wird als Test in der E-Mail und nicht im resultierenden HTML angezeigt. Wie bekomme ich die Ergebnisse korrekt angezeigt? – Teege

+0

Entschuldige mein Englisch, kannst du mir ein Beispiel geben? –

+0

Danke, dies ist die Ausgabe, die von der eigentlichen E-Mail kopiert wurde: echo " "; while ($ row = $ ergebnis-> fetch_assoc()) {echo " ". $ row ['Quote']. " "; Echo " "; – Teege