2015-10-24 2 views
1

У меня возникла проблема с созданием PHP-файла рассылки и его внедрением.MYSQL fetch_array, создающий бесконечный цикл;

<?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, скрипт постоянно посылает мне электронные письма. Мне нужно удалить таблицу из моей базы данных, чтобы остановить ее.

Как предотвратить этот цикл inifinite для отправки только одного сообщения каждому письму в дате?

+0

Является ли ваш адрес электронной почты в в новостной таблице более одного раза? Кроме того, вы не должны использовать библиотеки 'mysql_ * ', поскольку они устарели, проверьте PDO или MySQLi. – doublesharp

+0

Используется только один раз. Я ввел адрес blast_script.php 10 минут назад и удалил таблицу 9,5 минут назад, и я все еще продолжаю получать электронные письма! – Ancinek

+0

Отличается ли ваш код идеальным, если вы не используете 'UPDATE'-запрос? –

ответ

0

Как написано выше, вы получите ровно 20 электронных писем, так как вы ограничиваете, что сначала выберите 20 результатов.

Я не вижу причин, по которым вы попадаете в бесконечный цикл. Что вы сделали для отладки каждого утверждения 1 на 1?

0

Вы должны проверить, что:

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

Попробуйте добавить до цикла выборки:

$run_count = 1; 

затем в петлю добавить:

echo "The loop has been run $run_count times"; 
$run_count++; 

Это скажет вам, если выборки цикл удара слишком много раз, или если проблема находится в другом месте

Также проверьте значение $ mail_result является то, что вы ожидаете в каждом цикле

Смежные вопросы