【问题标题】:Unset a php value on each run of for each在每次运行时取消设置 php 值
【发布时间】:2012-02-07 18:20:34
【问题描述】:

我正在运行以下脚本,即 phpmailer,在每次运行结束时,我希望它清除 $name 的内容,或者 $row->['leadname'] ,我尝试使用在脚本底部未设置,但这似乎没有效果,我只是从 3 个人的列表中得到,其中 2 人说亲爱的鲍勃,另一个说亲爱的 {name},即使联系人被称为鲍勃,弗雷德和温迪。

            <?php

                 $formid = mysql_real_escape_string($_GET[token]);
            $templatequery = mysql_query("SELECT * FROM hqfjt_chronoforms_data_addmailinglistmessage WHERE cf_id = '$formid'") or die(mysql_error());
            $templateData = mysql_fetch_object($templatequery);

            $gasoiluserTemplate = $templateData->gasoilusers;
            $dervuserTemplate = $templateData->dervusers;
            $kerouserTemplate = $templateData->kerousers;
            $templateMessage = $templateData->mailinglistgroupmessage;
            $templatename = $templateData->mailinglistgroupname;
                                ?>  
                    <?php
            require_once('./send/class.phpmailer.php');
            //include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded

            $mail = new PHPMailer(true); //defaults to using php "mail()"; the true param means it will throw exceptions on errors, which we need to catch

            // $body                = file_get_contents('contents.html');

            $body = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
            <html xmlns="http://www.w3.org/1999/xhtml">
            <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <style>#title {padding-left:120px;padding-top:10px;font-family:"Times New Roman", Times, serif; font-size:22px; font-weight:bold; color:#fff;}</style>
            </head>

            <body>
            <div style="background:
                                              none repeat scroll 0% 0% rgb(6, 38,
                                              97); width:780px;">
            <img id="_x0000_i1030" style="padding-left:100px;padding-right:100px;"
                                                  src="http://www.chandlersoil.com/images/newsletter/header.gif"
                                                  alt="Chandlers Oil and Gas"
                                                  border="0" height="112"
                                                  width="580">
                                                  <div id="title">{message}</div>

                                                  </div>
            </body>
            </html>
            ';

                            // $body = preg_replace('/\\\\/i', $body);

                            $mail->SetFrom('crea@cruiseit.co.uk', 'Chandlers Oil & Gas');
                            $mail->AddReplyTo('crea@cruiseit.co.uk', 'Chandlers Oil & Gas');

                            $mail->Subject       = "Your Fuel Prices From Chandlers Oil & Gas";

                            $query  = "SELECT leadname,businessname,email FROM hqfjt_chronoforms_data_addupdatelead WHERE keromailinglist='$kerouserTemplate' AND dervmailinglist='$dervuserTemplate' AND gasoilmailinglist='$gasoiluserTemplate'";
                            $result = mysql_query($query);

                            // Bail out on error 
            if (!$result)  
              { 
                trigger_error("Database error: ".mysql_error()." Query used was: ".htmlentities($query), E_USER_ERROR); 
                die();
               }                                    

            while ($row = mysql_fetch_array ($result)) {
              $mail->AltBody    = "To view the message, please use an HTML compatible email viewer!";

               // THIS PULLS THE CLIENTS FIRST NAME OUT ON EACH LOOP
               $firstname = $row["leadname"];

               //THIS PULLS THE CLIENTS BUSSINESS NAME OUT ON EACH LOOP
               $businessname = $row["businessname"];

               // IF THE FIRST NAME FIELD IS BLANK USE THE BUSINESS NAME INSTEAD
               if ($firstname = '')
               {$name = $row["businessname"];}
               else 
               {$name = $row["leadname"];}

               // THIS REPLACES THE {NAME} IN THE PULLED IN TEMPLATE MESSAGE WITH THE CLIENTS NAME DEFINED IN $name
               $body = str_replace('{name}', $name, $body);

               // THIS REPLACES {fuel} IN THE PULLED IN TEMPLATE WITH THE TEMPLATE NAME (WHICH IS THE TYPE OF FUEL)
               $body = str_replace('{fuel}', $templatename, $body); 

               // THIS REPLACES THE {message} IN THE $body ARRAY WITH THE TEMPLATE MESSAGE HELD IN $templateMessage
               $body = str_replace('{message}', $templateMessage, $body);


              $mail->MsgHTML($body);
              $mail->AddAddress($row["email"], $row["leadname"]);




              if(!$mail->Send()) {
                echo "Mailer Error (" . str_replace("@", "&#64;", $row["email"]) . ') ' . $mail->ErrorInfo . '<br>';
              } else {
                echo "Message sent to :" . $row["full_name"] . ' (' . str_replace("@", "&#64;", $row["email"]) . ')<br>';
              }
              // Clear all addresses and attachments for next loop
              $mail->ClearAddresses();
              $mail->ClearAttachments();
              unset ($row['leadname']);
                              unset ($name;)
            }
            ?>

【问题讨论】:

  • 我的最后一个问题与同一个脚本但不同的命令有关,我正在尝试使用 unset 来摆脱,因为最后一个解决方案不起作用

标签: php mysql unset


【解决方案1】:

看起来您需要将 body 的内容复制到循环中的新变量中。 目前,您正在第一次运行时覆盖变量,删除 {name} 占位符。

           // THIS REPLACES THE {NAME} IN THE PULLED IN TEMPLATE MESSAGE WITH THE CLIENTS NAME DEFINED IN $name
           $newBody= str_replace('{name}', $name, $body);

           // THIS REPLACES {fuel} IN THE PULLED IN TEMPLATE WITH THE TEMPLATE NAME (WHICH IS THE TYPE OF FUEL)
           $newBody = str_replace('{fuel}', $templatename, $newBody); 

           // THIS REPLACES THE {message} IN THE $body ARRAY WITH THE TEMPLATE MESSAGE HELD IN $templateMessage
           $newBody = str_replace('{message}', $templateMessage, $newBody);


          $mail->MsgHTML($newBody);
          $mail->AddAddress($row["email"], $row["leadname"]);

你也可以在 str_replace 中实际使用数组,例如

$newBody = str_replace(array('{name}','{fuel}'),array($name,$fuel),$body);

【讨论】:

  • 您好,我尝试按照其他人的建议使用它,但它没有解决问题 >> $bodyTemp = str_replace('{name}', $name, $body); $bodyTemp = str_replace('{fuel}', $templatename, $bodyTemp);
  • 我对 PHPMailer 不熟悉,它看起来像是映射到 PHP 邮件功能,但它的对象可能会维护内容。为什么不尝试使用 PHP 的 mail() 函数呢?见php.net/manual/en/function.mail.php#example-3073
【解决方案2】:

;处于错误的位置。 尝试 未设置($名称); 代替 未设置($name;),

【讨论】:

  • 我试过这个,但还是不行,它似乎不想将值恢复为默认值,我认为这就是这个命令的意思?。
猜你喜欢
  • 2017-10-25
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 2019-09-01
  • 1970-01-01
  • 2012-02-29
  • 2018-01-16
  • 1970-01-01
相关资源
最近更新 更多