2017-12-15 1 views
0

Ich habe ein PHP-Skript, das Daten aus einer MySQL-Datenbank importiert und sendet eine E-Mail an diese Personen mit Hilfe einer while-Schleife. Alles funktioniert einwandfrei, außer dass ich keine Variablenwerte im E-Mail-Body verwenden kann (stattdessen wird der Name der Variablen ausgedruckt). Beispiel, wenn ich ". $ First_name" schreibe. Ich möchte, dass der Text der E-Mail "Johan" sagt, wenn dies der Name des Eintrags in der Datenbank ist.PHP - Wie man eine Variable zum E-Mail-Body hinzufügt

if (isset($_POST['submit'])){ 

     // About database 
     $user  = "user"; 
     $password = "password"; 
     $host  = "host"; 
     $dbase = "dbase"; 
     $table = "table"; 

     // Connection to database 
     $dbc= mysqli_connect($host,$user,$password, $dbase) 
     or die("Unable to select database"); 

     // Retrieve emails from database 
     $country = $_POST['country']; 

     $query= "SELECT email, firstname FROM $table WHERE country = '$country'"; 
     $result= mysqli_query ($dbc, $query) 
     or die ('Error querying database.'); 

     // Send the email 
     while ($row = mysqli_fetch_array($result)) { 

      // Write $first_name for recipients name 
      $first_name = $row['firstname']; 
      $last_name = $row['lastname']; 
      $email  = $row['email']; 

      // About the email 
      $from  = '[email protected]'; 
      $subject = $_POST['heading']; 
      $body  = $_POST['message']; 
      $speed  = $_POST['speed']; 

      mail($email, $subject, $body, 'From:' . $from); 
      echo 'Email sent to: ' . $email. '<br>'; 

      // Delay for speed regulation 
      sleep(3600/$speed); 
     } 

    } 

mysqli_close($dbc); 

Ich denke, das Problem muss entweder hier sein:

$query= "SELECT email, firstname FROM $table WHERE country = '$country'"; 
$result= mysqli_query ($dbc, $query) 
or die ('Error querying database.'); 

Oder hier:

$first_name = $row['firstname']; 
$last_name = $row['lastname']; 
$email  = $row['email']; 
+5

'$ body = $ _POST ['message'];' Sie füllen den Body mit dem Inhalt eines POSTed-Werts, nicht mit irgendetwas, das Sie aus der Datenbank abrufen. –

+2

Wenn Sie mysqli-Funktionen verwenden, können Sie auch [batch your parameter] (http://php.net/manual/en/mysqli-stmt.bind-param.php) aus Sicherheitsgründen anstelle von Variablen willkürlich dumpen die Abfrage – cteski

+0

Ja, es ist irgendwie der Punkt. Ich sende die E-Mail von einer Website, wo ich die Nachricht in einem Eingabefeld (Körper) schreibe. Ich möchte $ first_name in den Körper schreiben und "John" als Ergebnis erhalten. Ist das möglich? – Lavonen

Antwort

2

$ Unter der Annahme, _POST [ 'message'] hat Inhalte, die so etwas wie sieht ...

Dear $first_name, 
Greetings, I am a prince from... 

PHP wird nicht die Variable ersetzen. Das ist nur etwas in Inline-Strings (wenn doppelte Anführungszeichen verwendet werden).

print("Test... $first_name"); 

Es gibt ein Dutzend verschiedene Möglichkeiten, wie Sie dies ... zum Beispiel handhaben könnte man konnte:

$body = str_replace('$first_name', $first_name, $body); 

Beachten Sie die Verwendung von einfachen Anführungszeichen. Dies soll verhindern, dass PHP den Wert von $ first_name verwendet, und stattdessen die literale Zeichenfolge '$ first_name' verwendet.

0

In Ihrer Linie $query= "SELECT email, firstname FROM $table WHERE country = '$country'"; Sie müssen auch Nachnamen hinzufügen.

+0

"Vorname" funktioniert noch nicht einmal, nur die "E-Mail". Das Problem muss woanders liegen. – Lavonen

Verwandte Themen