MySQL для заполнения Foreach - PullRequest
       10

MySQL для заполнения Foreach

0 голосов
/ 08 декабря 2011

Я работаю над перестройкой системы рассылки, которую я написал некоторое время назад. Первоначальная система была основана на использовании плоской файловой системы, и я хочу преобразовать ее в MySQL. Все, что мне осталось, это перестроить конечную функцию. Моя проблема в том, что мне нужно сделать, это использовать цикл для каждого электронного письма, хранящегося в базе данных. Я подумал, что каждый цикл - лучший способ сделать это, но как вы используете 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);
        }                                                                       
    } 

Это было основано на нескольких других примерах, которые мне кажутся. он не дает никаких ошибок, но не отправляет электронное письмо. Я был бы очень признателен за помощь.

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Этот псевдокод

$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 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
1 голос
/ 08 декабря 2011

Вы должны получить свои результаты.Вы не можете использовать foreach, вам нужно использовать while.

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

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

http://us3.php.net/mysql_fetch_assoc

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