【问题标题】:php mail with variables带有变量的php邮件
【发布时间】:2011-10-09 17:38:47
【问题描述】:

我正在尝试设置一个邮件脚本,它将首先从 mysql 运行一个简单的选择,并在消息中使用这些数组变量。但是所有的变量都没有输出到消息体,只有一行变量。这是我的脚本:

    $sql1 = "SELECT * FROM videos WHERE checked_out = '1'"; 
    $result1 = $dbLink->query($sql1); 
              while($row1 = $result1->fetch_assoc()) {
    $name = $row1['name'];
    $tape_no = $row1['tape_no'];
    $member_name = $row1['member_name'];
    $date_out = date("F j, Y", strtotime($row1['date_out']));
              }

//email function to administrator
$to = "nouser@mail.com";
$subject = "Daily Video Rental Summary";
$message = "$name $tape_no $date_out $member_name
======================================================================
PLEASE DO NOT REPLY TO THIS MESSAGE, AS THIS MAILBOX IS NOT MONITORED
======================================================================";
$from = "no_replies_please@mail.com";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);

感谢任何人愿意分享的任何见解。 谢谢, --马特

【问题讨论】:

    标签: php mysql arrays email


    【解决方案1】:

    那是因为你一直在覆盖变量,所以它只会得到最后一个。您可能只想在 while 循环中构建 $message 变量。这将发送 1 封包含所有内容的电子邮件

     $sql1 = "SELECT * FROM videos WHERE checked_out = '1'"; 
        $result1 = $dbLink->query($sql1); 
                  while($row1 = $result1->fetch_assoc()) {
        $name = $row1['name'];
        $tape_no = $row1['tape_no'];
        $member_name = $row1['member_name'];
        $date_out = date("F j, Y", strtotime($row1['date_out']));
        $message .= "$name $tape_no $date_out $member_name"
                  }
    
    //email function to administrator
    $to = "nouser@mail.com";
    $subject = "Daily Video Rental Summary";
    ======================================================================
    PLEASE DO NOT REPLY TO THIS MESSAGE, AS THIS MAILBOX IS NOT MONITORED
    ======================================================================";
    $from = "no_replies_please@mail.com";
    $headers = "From:" . $from;
    mail($to,$subject,$message,$headers);
    

    【讨论】:

    • 你在某处有一些引号错误,并且消息会不断被重写 - 所以这也是错误的......
    【解决方案2】:

    那是因为您在循环中分配变量,但在循环外部的 $message 变量中使用它们。因此,您的 $message 仅包含最后一行/记录中的项目。尝试在 while 循环内的 $message 变量中移动和附加值。

    应该是这样的

    while($row1 = $result1->fetch_assoc()) {
        //assign vars here
        $message .= "$name $tape_no $date_out $member_name\n";
    }
    $message = "$message
    ======================================================================
    PLEASE DO NOT REPLY TO THIS MESSAGE, AS THIS MAILBOX IS NOT MONITORED
    ======================================================================";
    
    //assign other variables
    //mail()
    

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      试试这个:

       $message = NULL; 
      $sql1 = "SELECT * FROM videos WHERE checked_out = '1'"; 
      $result1 = $dbLink->query($sql1); 
      while($row1 = $result1->fetch_assoc()) { 
      $name = $row1['name']; 
      $tape_no = $row1['tape_no']; 
      $member_name = $row1['member_name']; 
      $date_out = date("F j, Y", strtotime($row1['date_out']));
       $message .= "$name $tape_no $date_out $member_name" } 
      

      并删除循环下的另一个 $message 变量。注意 .在 $message 中的 = 之前。这告诉 php 不断添加到 $message

      【讨论】:

        【解决方案4】:

        试试这个:

         $sql1 = "SELECT * FROM videos WHERE checked_out = '1'";
         $result1 = $dbLink - > query($sql1);
         while ($row1 = $result1 - > fetch_assoc()) {
             $name = $row1['name'];
             $tape_no = $row1['tape_no'];
             $member_name = $row1['member_name'];
             $date_out = date("F j, Y", strtotime($row1['date_out']));
             //email function to administrator
             $to = "nouser@mail.com";
             $subject = "Daily Video Rental Summary";
             $message = "$name $tape_no $date_out $member_name
        ======================================================================
        PLEASE DO NOT REPLY TO THIS MESSAGE, AS THIS MAILBOX IS NOT MONITORED
        ======================================================================";
             $from = "no_replies_please@mail.com";
             $headers = "From:".$from;
             mail($to, $subject, $message, $headers);
         }
        

        这将每行发送一封邮件。

        【讨论】:

        • 那将是一位不开心的管理员 :-)
        • @jeroen -- 那不是我的问题^_^(或者是......?)
        【解决方案5】:

        您正在覆盖循环中的变量,因此$name 等将包含循环后最后一行中找到的值。

        你可以做的是在循环中构造你的消息:

        $message = '';
        while($row1 = $result1->fetch_assoc()) {
            $message .= $row1[...];    // whatever you need
        }
        

        【讨论】:

          猜你喜欢
          • 2014-09-12
          • 1970-01-01
          • 2011-04-02
          • 1970-01-01
          • 1970-01-01
          • 2011-04-25
          • 1970-01-01
          • 1970-01-01
          • 2014-11-18
          相关资源
          最近更新 更多