PHP - Как добавить переменную в тело письма

0

У меня есть PHP-скрипт, который импортирует данные из базы данных MySQL и отправляет отправку электронной почты указанным лицам с помощью цикла while. Все работает отлично, за исключением того, что я не могу использовать значения переменных в теле письма (вместо этого выдается название переменной). Например, если я пишу ". $ First_name". Я хочу, чтобы тело электронной почты говорило "Johan", если это имя записи в базе данных.

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'"; 
$result= mysqli_query ($dbc, $query)  
or die ('Error querying database.'); 

Или здесь:

$first_name = $row['firstname']; 
$last_name = $row['lastname']; 
$email     = $row['email']; 
Теги:
email

2 ответа

2
Лучший ответ

Предполагая, что $ _POST ['message'] имеет контент, который выглядит примерно так...

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

PHP не заменит переменную. Это то, что он делает в встроенных строках (при использовании двойных кавычек).

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

Есть десяток различных способов, которыми вы могли бы справиться с этим... например, вы могли:

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

Обратите внимание на использование котировок SINGLE. Это делается для того, чтобы PHP не использовал значение $ first_name и вместо этого использовал литеральную строку '$ first_name'.

0

В вашей строке $query= "SELECT email, firstname FROM $table WHERE country = '$country'"; вам также нужно добавить последнее имя.

  • 0
    «Имя» еще даже не работает, только «электронная почта». Проблема должна быть где-то еще.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню