2015-05-26 8 views
0

У меня есть этот код для отправки писем пользователям из БД, , но почта всегда отправляется только первому пользователю, даже если меняется порядок. (запрос посылается от AJAX)PHP MySQL несколько строк не работают

$headers = ... 

    $mailbody = ... 

    $sql = 'SELECT `email`, `name` FROM `users`'; 
    $result = mysqli_query($link, $sql) or die(mysqli_error($link)); 

    while ($row = mysqli_fetch_array($result)) { 
      $rows[] = $row; 
      } 

    foreach ($rows as $row) { 
      if (mail($row['email'],"title", $mailbody, $headers)) { 
      echo 'mail '.$row['name'].' OK'; 
      return TRUE; 
      } else { 
      echo 'MAIL ERROR!!!'; 
      return FALSE; 
      } 
    } 
+0

Вы возвращающиеся от функции после отправки первой почты. – Barmar

+0

Вы напечатали_r ($ rows) – Gayathri

ответ

1

Это потому, что вы делаете return TRUE после первой успешной почты. Это завершает функцию. Выньте эту линию и поместите ее после завершения foreach.

+0

Спасибо всем за помощь! Работал! – david8

0

return TRUE; и return FALSE; остановить цикл Еогеасп.

0

Это из-за этого: return TRUE;. Это приводит к тому, что ваша функция/скрипт заканчивается прямо там, вместо продолжения цикла foreach.

Если вы хотите, чтобы скрипт остановиться на первой неудачи, это должно работать:

$sql = 'SELECT `email`, `name` FROM `users`'; 
$result = mysqli_query($link, $sql) or die(mysqli_error($link)); 

while ($row = mysqli_fetch_array($result)) { 
     $rows[] = $row; 
     } 
foreach ($rows as $row) { 
     if (mail($row['email'],"title", $mailbody, $headers)) { 
     echo 'mail '.$row['name'].' OK'; 
     } else { 
     echo 'MAIL ERROR!!!'; 
     return FALSE; 
     } 
} 
return TRUE; 

Он возвращает истину, если все письма были отправлены успешно, в противном случае он возвращает ложь на первой неудачи.

0

Поскольку вы используете возвращаете истину или ложь цикл Еогеаспа остановить удалить его и попробовать еще раз или вы можете обернуть его в функции, а затем, если успех возвращает истину (после цикла Еогеаспа) еще возвращают ложные

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