2015-05-26 263 views
0

我有这个代码用于向DB, 的用户发送邮件,但是即使改变顺序,邮件总是只发给第一个用户。 (请求被从发送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

您是否print_r($ rows) – Gayathri

回答

1

这是因为你在第一个成功的邮件之后做了return TRUE。这结束了这个功能。拿出那条线,并在foreach完成后放置它。

+0

感谢大家的帮助!成功了! – david8

0

return TRUE;return FALSE;停止foreach循环。

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; 

如果所有的电子邮件已经成功地发送,它将返回true,否则将返回错误的第一次失败。

0

由于您使用返回true或false foreach循环停止删除它,然后再试一次,或者你可以在一个功能包,然后如果成功返回真(foreach循环后),否则返回false