Нужна помощь в отправке информации MySQL таблицы в электронной почте - PullRequest
1 голос
/ 13 июля 2011

Я пытаюсь отправить значения из базы данных MySQL пользователю по запросу. Я не могу передать информацию в текст сообщения электронной почты с правильными значениями. Вот пример кода:

mysql_connect ("host","name","pass")  or die (mysql_error());
mysql_select_db ("db_name");

$sql = mysql_query("select * from table_name where id = '$id'");
//$id is previously defined as the users id 
while ($row = mysql_fetch_array($sql)){
$title = $row["title"];
}

$email = 'user@email.com'
$subject = "Titles";
$body = "Title: " . $title;

if (mail($email, $subject, $body)) {
echo("<p>successfully sent. "</p>");
} else {
echo("<p>delivery failed...</p>");
}

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

Предполагается, что каждому пользователю отправлено несколько заголовков. В идеале, окончательное электронное письмо должно выглядеть примерно так:

Title: Title1
Title: Title2
Title: Title3
Title: Title4
Title: Title5

и продолжайте в том же количестве, сколько заголовков в массиве. Спасибо за любую помощь.

Ответы [ 4 ]

0 голосов
/ 14 июля 2011
mysql_connect ("host","name","pass")  or die (mysql_error());
mysql_select_db ("db_name");

$body = '';  // start with empty string

$sql = mysql_query("select * from table_name where id = '$id'");
//$id is previously defined as the users id 
while ($row = mysql_fetch_assoc($sql))
{
     $body .= 'Title: ' . $row['title'] . "\n";
}

$email = 'user@email.com'
$subject = "Titles";
// removed $body= ... 

if (mail($email, $subject, $body)) {
echo("<p>successfully sent. "</p>");
} else {
echo("<p>delivery failed...</p>");
}
0 голосов
/ 14 июля 2011

у вас есть проблема конкатенации,

// use this code inside the while   
$title .= 'Title: ' . $row["title"] . '<br>';   // notice the dot before the equal

//and this line in replace of   $body = "Title: " . $title;
$body = $title;  
0 голосов
/ 14 июля 2011

Я бы предложил хранить заголовки в массиве следующим образом:

$title = array();

while ($row = mysql_fetch_array($sql)){

  // [] adds a new element at the end of an array
  $titles[] = $row["title"];

}

Затем, чтобы подготовить тело, попробуйте это:

$body = 'You've gained these titles: ';    

foreach( $titles as $title ) {

      // keep all titles in separate lines of the email body
      $body .= "\nTitle: " . $title;

}
0 голосов
/ 13 июля 2011

Перво-наперво: этот код очень созрел для атаки SQL инъекций. Почини это! http://www.learnphponline.com/security/sql-injection-prevention-mysql-php

Переменная $ title находится внутри цикла while, она не доступна за пределами области видимости. вытащи его наружу.

http://www.dreamincode.net/forums/topic/102020-variable-scope-within-while-loop/

...