【问题标题】:How do I email results of php mysql query in while loop?如何在while循环中通过电子邮件发送php mysql查询的结果?
【发布时间】:2011-08-04 22:58:42
【问题描述】:

我创建了一个名为“userhistoryreport.php”的文件。它将设置为每天运行一次。该文件的目的是收集在特定日期与网站进行交互的用户的联系信息和历史记录。该脚本有效,但我不确定如何将结果发送到电子邮件。电子邮件的格式应该与浏览器中的页面一样 - 每个用户都列出了他们的历史记录。任何帮助表示赞赏。

echo '<div style="padding: 0 20px;">';
echo '<span style="display: block; font-size: 22px; font-weight: bold; margin: 25px 0 -15px 0;"> User Activity on' . $website . 'for' . $date . '</span>';


//query the database for today's history
$result = mysql_query("SELECT * FROM user_history WHERE date = '$date' ORDER by name, time, title") 
or die(mysql_error());
$old_user = '';   

    while($row = mysql_fetch_array( $result )) {
        $new_user = $row['uid'];
        if ($new_user != $old_user) {
            echo '<br /><br /><hr />' . '<span style="font-size: 18px; font-weight: bold;">' . $row['name'] . '</span>' . '<br />' . $row['company'] . '<br />' . $row['email'] . '<br />' . $row['phone'] . '<br /><br />'; 
            $old_user = $new_user;
        }
        echo '<ul><li>' . $row['time'] .
        '<ul><li>' . $row['title'] . ' (<a href="' . $row['url'] . '">' . $row['url'] . '</a> )' . '</li></ul>' . '<br /><br />' .
        '</li></ul>';
    }  
echo '</div>';

echo 
'<div style="position: fixed; bottom: 0; height: 40px; width: 100%; margin: 20px 0 0 0; background: #000; color: #FFF; line-height: 40px;">' .
'Report generated ' . $date . ' ' . $time .
'</div>';

【问题讨论】:

  • mail函数和例子@php.net/manual/en/function.mail.php
  • 而不是回显它,而是将所有输出放在一个变量中并将其作为消息正文发送。
  • 我知道我应该表明我知道邮件功能。我的想法正是关于变量的事情。我试图使 while 循环成为一个变量,以便我可以通过电子邮件发送它,例如... $variable = $message ... 但它不起作用。

标签: php mysql email while-loop


【解决方案1】:

直接来自php手册中的mail()函数,试试这个;

将所有 html 放入一个字符串中,而不是立即回显它,方法是将所有回显替换为类似这样的内容;

$message .= '<br /><br /><hr />' . '<span style="font-size: 18px; font-weight: bold;">' . $row['name'] . '</span>' . '<br />' . $row['company'] . '<br />' . $row['email'] . '<br />' . $row['phone'] . '<br /><br />';           
$message .= '<ul><li>' . $row['time'] .
    '<ul><li>' . $row['title'] . ' (<a href="' . $row['url'] . '">' . $row['url'].     '</a> )' . '</li></ul>' . '<br /><br />' .
    '</li></ul>';

要显示报告,请使用

echo $message;

要邮寄报告,请将此位放在最后的结束标记之后以使用 html 发送报告。

 // To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";


// Mail it
mail('your@emailadress.com', 'Report generated ' . $date . ' ' . $time, $message, $headers);

【讨论】:

  • 是的,做到了!谢谢!我在尝试更困难的东西(没有用),而不是简单地改变我的回声!
【解决方案2】:

对于您的编码人员,一个有用的提示是根据结果集动态生成表头。

$fieldArray = array_keys( mysql_fetch_array( mysql_query( $sQuery, $link), MYSQL_ASSOC)); 

//Build Table Headers
$report.= '<table><tr>';

//Spit out result column names
for ($i=0;$i<count($fieldArray);$i++) {
   $report.= '<th><strong>'.$fieldArray[$i].'</strong></th>';
}

//close row
$report.= '<\tr>';

然后在您的查询中,您可以使用 columname AS "First Name" 语法,瞧! :)

无耻插件,但我在这里编写了一个基于 mySQL 查询创建 html 电子邮件的商业 PHP 脚本 -> http://www.julian-young.com/mysqlreporter/ 带有 html 电子邮件,多种配色方案,并且非常灵活地从查询中自动生成多个报告。

【讨论】:

    猜你喜欢
    • 2018-12-21
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多