У меня возникла проблема с созданием файла PHP бюллетеня и его реализацией.
<?php
include_once "connect_to_mysql.php";
$sql = mysql_query("SELECT * FROM news WHERE received='0' LIMIT 20");
$mail_body = "";
while($row = mysql_fetch_array($sql)){
$id = $row["ID"];
$name = $row["name"];
$email = $row["email"];
$mail_body= "Test message";
$subject = "PHP Newsletter";
$headers = "From: [email protected]\r\n";
$headers = "Content-type: text/html\r\n"; //To musi byc zawarte jeśli nasz email będzie w formie HTML
$to = "$email";
$mail_result = mail($to, $subject, $mail_body, $headers) or die ("Error!");
if ($mail_result) {
mysql_query("UPDATE news SET received='1' WHERE email='$email' LIMIT 1");
} else {
echo ("Some freaking error :o!");
}
}
?>
У меня есть связь с моей базой данных. Я поместил одно письмо — мое в эту базу данных. И я установил полученный по умолчанию 0 в моей таблице. Поэтому, когда цикл начинается, он должен получить массив из моей базы данных -> отправить письмо -> установить полученное значение в «1» и остановить -> получить другое письмо из таблицы и сделать то же самое.
Но проблема в том, что, когда я делаю в этот адрес Http: //…/blast_script.php скрипт постоянно посылает мне электронные письма. Я должен удалить таблицу из базы данных, чтобы остановить ее.
Как предотвратить этот бесконечный цикл для отправки только одного сообщения на каждое письмо в базе данных?
При написании вышеупомянутого запроса вы получите ровно 20 электронных писем, поскольку вы ограничиваете первый выбор до 20 результатов.
Я не вижу причин, по которым вы бы попали в бесконечный цикл. Что вы сделали для отладки каждого утверждения 1 на 1?
Вы должны проверить, что:
mysql_query("UPDATE news SET received='1' WHERE email='$email' LIMIT 1");
работает, проверяя, что получено 1 в базе данных.
Если нет, то вы знаете, что полученное сообщение не корректно обновляет вызывающий и бесконечный цикл.
Если вы хотите проверить это и не хотите получать 20 писем, измените следующий код:
$sql = mysql_query("SELECT * FROM news WHERE received='0' LIMIT 20");
в
$sql = mysql_query("SELECT * FROM news WHERE received='0' LIMIT 1");
Попробуйте добавить перед циклом выборки:
$run_count = 1;
затем в цикле добавьте:
echo "The loop has been run $run_count times";
$run_count++;
Это скажет вам, если цикл выборки выполняется слишком много раз или проблема в другом месте.
Также проверьте значение $ mail_result, что вы ожидаете в каждом цикле