2017-12-15 3 views
0

MySQLデータベースからデータをインポートするPHPスクリプトがあり、whileループの助けを借りてその人に電子メールを送信します。電子メール本文で変数の値を使うことができないという点を除いて、すべてうまく動作します(代わりに、変数の名前が表示されます)。例、 "。$ first_name"と書くと私は電子メールの本文に "Johan"と言ってもらいたいのですが、これがデータベースのエントリの名前だとします。PHP - 電子メール本文に変数を追加する方法

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

それともここに:

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); 

は、私はこの問題はどちらかここでなければならないと思い、あなたのライン$query= "SELECT email, firstname FROM $table WHERE country = '$country'"

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

'$ body = $ _POST ['message'];'あなたはDBからフェッチしているものではなく、POSTされた値の内容をボディに取り込んでいます。 –

+2

mysqli関数を使用している場合は、変数を不当にダンプするのではなく、セキュリティ上の目的で[パラメータをバインドする](http://php.net/manual/en/mysqli-stmt.bind-param.php)クエリ – cteski

+0

はい、それは一種のポイントです。入力欄(本文)にメッセージを書き込むウェブサイトからメールを送信します。私は体に$ first_nameを書いて、結果として "John"を得ることができるようにしたい。それは可能ですか? – Lavonen

答えて

2

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

PHPの変数を交換するつもりはない...のようになりますコンテンツを持っています。これはインライン文字列(二重引用符を使用する場合)で行われるものです。

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

注単一引用符の使用:

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

は、あなたはできるたとえば...あなたはこれを扱うことができるダースの異なる方法があります。これは、PHPが$ first_nameの値を使用するのを防ぎ、代わりにリテラル文字列 '$ first_name'を使用することを防ぎます。

0

。姓を追加する必要があります。 $ _POST [ 'メッセージを']と仮定すると、

+0

'ファーストネーム'はまだ動作していません。「メール」のみです。問題は他のどこかにあるはずです。 – Lavonen

関連する問題