Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL来填充Foreach_Php_Mysql_Email_Newsletter - Fatal编程技术网

Php MySQL来填充Foreach

Php MySQL来填充Foreach,php,mysql,email,newsletter,Php,Mysql,Email,Newsletter,我正在重建一个我不久前写的时事通讯系统。最初的系统是基于一个平面文件系统,我想把它转换成MySQL。我所剩下的就是重建end函数。我的问题是,我需要做的是为数据库中存储的每封电子邮件使用一个循环。我认为each循环是实现这一点的最佳方法,但是如何将MySQL和foreach结合使用呢?以下是我当前的代码: $run = mysql_query("SELECT email FROM newsletter"); foreach ($run as $value) {

我正在重建一个我不久前写的时事通讯系统。最初的系统是基于一个平面文件系统,我想把它转换成MySQL。我所剩下的就是重建end函数。我的问题是,我需要做的是为数据库中存储的每封电子邮件使用一个循环。我认为each循环是实现这一点的最佳方法,但是如何将MySQL和foreach结合使用呢?以下是我当前的代码:

    $run = mysql_query("SELECT email FROM newsletter");    

    foreach ($run as $value) { 
        mail($value, $subject, $_POST['message'], $headers);
    }     
我尝试了很多不同的方法,但似乎没有任何效果。我甚至试过这样的方法:

        $run = mysql_query("SELECT email FROM newsletter");    
    $email = mysql_fetch_array($run, MYSQL_ASSOC)
    $cols = implode (', ', $email);
    $run2 = mysql_query("SELECT $cols FROM newsletter");    
    while($emaillist = mysql_fetch_array($run2, MYSQL_ASSOC)){ 
        foreach ($emaillist as $value) { 
            mail($value, $subject, $_POST['message'], $headers);
        }                                                                       
    } 

这是基于我看到的其他几个例子。它不会给出任何错误,但不会发送电子邮件。我将非常感谢您的帮助

您必须获取您的结果。您不能使用foreach,您需要使用while

$handle = mysql_query("SELECT email FROM newsletter");    

while ($row = mysql_fetch_assoc( $handle ) )
{
    mail( $row['email'], $subject, $_POST['message'], $headers);
}
此伪代码

$run = mysql_query("SELECT email FROM newsletter");    

foreach ($run as $value) { 
    mail($value, $subject, $_POST['message'], $headers);
}   
可以正确重写为:

$result = mysql_query("SELECT body, emailaddress, subject  FROM emails");    
if (!$result) { die('error in mysql_query: '.mysql_error())}
while ($row = mysql_fetch_array($result) {
  $body = $row['body'];
  $address = $row['address'];
  $subject = $row['subject'];
  //do stuff with that data.
  //never use $_POST data directly, always feed it though `htmlentities` 
  //before outputting it (screen or email) 
  //or through mysql_real_escape_string() before inputting it in a DB.
  $echo htmlentities($body);  //sanitize your output or suffer XSS-attacks
  .....
}
如果要将一个SELECT的输出用作另一个SELECT的输入,请不要使用循环,而是使用联接:

SELECT e.body, e.subject, e.header, e.whatever FROM emails e
INNER JOIN newsletter n ON (n.id = e.newsletter_id)
WHERE n.id = 1466

只有电子邮件地址存储在数据库中。我的系统非常基本。其他一切都是预定义的,并设置在我上面添加的非常小的片段之外。由于电子邮件是我唯一需要的东西,我认为蒂姆·G走上了正确的道路。虽然我的主持人刚刚倒下,所以我无法测试任何东西。@Johan是的,这太可怕了-你应该在这个问题上发表评论,并链接到你正在谈论的内容,这样OP就可以了解这个问题。:。。。n/m-刚刚看到你的答案。我考虑到了这一点,并将其添加到我的脚本中。我的网站可能充满了很多安全风险,但我知道所有的功能,也不知道大多数时候什么时候使用它们。我听过很多人告诉我很多不同的事情。@DwightAaronPotvin如果您切换到使用带绑定参数的PDO,您将是注射安全的。Dwight,请在下面选择一个答案,除非您对此主题有进一步的问题。