У меня есть 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'];
Предполагая, что $ _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'.
В вашей строке $query= "SELECT email, firstname FROM $table WHERE country = '$country'"
; вам также нужно добавить последнее имя.