2012-01-12 72 views
1

我正在使用phpmailer,并根据我的需要进行了自定义。在$ templatemessage里面是用字段{name}和{fuel}给客户的消息。str_replace的多个实例中断php代码

这两个字段被替换为str_replace函数。

在出现这个问题之前,我只是把str_replace替换为{name},并且这个工作正常,导入到这个地方的人的名字。 当我添加额外的str_replace函数来替换{fuel}和$ templatemessage值时,问题就出现了。现在发生的事情是{fuel}值被导入,但它似乎对{name}函数做了一些操作,因为它不再导入名称,而是在电子邮件中仅显示{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; 


       require_once('./send/class.phpmailer.php'); 

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

       // Grab the FreakMailer class 
       require_once('./send/MailClass.inc'); 

       // Grab our config settings 
       require_once('./send/config.php'); 

       // Setup body 
       $htmlBody = '<!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 {text-align:center;font-family:"Times New Roman", Times, serif; font-size:130% !important; font-weight:bold; color:#fff;} .address {color:#fff; font-size:60%; font-family:Verdana, Geneva, sans-serif;}</style> 
           </head> 

           <body> 
           <div style="background: 
                   none repeat scroll 0% 0% rgb(6, 38, 
                   97); width:650px; height:auto;"> 
           <img id="_x0000_i1030" style="padding-left:5%;padding-right:5%" 
                    src="http://www.chandlersoil.com/images/newsletter/header.gif" 
                    alt="Chandlers Oil and Gas" 
                    border="0" height="112" 
                    width="580"> 
                    <div id="title">' . $templateMessage . '</div> 
                    <div style="background:#344ea2; width:501px; height:65px; margin-left:70px;"></div> 

                    <div style="background:#13155C; height:30px; width:501px; margin-left:70px;"></div> 

                    <div style="background:#fff; width:501px; height:365px; margin-left:70px;"></div> 

<div style="background: 
                   none repeat scroll 0% 0% rgb(6, 38, 
                   97); height:60px; width:501px; margin-left:70px;"></div>  

                   <div style="background:#000139;height:100px; width:580px; margin-left:35px;" > 
                    <table cellspacing="0" cellpadding="0" class="address" style="margin-left:5px;"> 
                    <tr> 
                     <td valign="top" width="21%"><p><strong>Chandlers             Depots</strong></p> 
                     <table class="address" border="0" cellpadding="0" cellspacing="0" width="87%"> 
                      <tbody> 
                      <tr> 
                       <td width="57%"><p>Grantham</p></td> 
                       <td width="43%"><p>Spalding</p></td> 
                      </tr> 
                      <tr> 
                       <td><p>Lincoln</p></td> 
                       <td><p>Corby</p></td> 
                      </tr> 
                      <tr> 
                       <td><p> Spilsby</p></td> 
                       <td><p>Retford</p></td> 
                      </tr> 
                      </tbody> 
                     </table></td> 
                     <td valign="top" width="79%"><p><strong>Address<br /> 
                     <br /> 
                     </strong>Chandlers             Oil &amp; Gas, Warren             Way, Alma Park,             Grantham, Lincolnshire,             NG31 9SE<br /> 
                     <br /> 
                     <strong>TEL: </strong>08456             202010 <strong>FAX:</strong> 01476             568147 <strong>E-Mail: </strong><a href="mailto:[email protected]">[email protected]</a></p> 
                     <table border="0" cellpadding="0" cellspacing="0" width="100%"> 
                      <tbody> 
                      <tr> 
                       <td><p align="right"> </p></td> 
                      </tr> 
                      </tbody> 
                     </table></td> 
                    </tr> 
                    </table> 
                   </div>                
           </div> 
           </body> 
           </html> 
           '; 
     $textBody = "$templateData->mailinglistgroupmessage"; 


       // instantiate the class 
       $mailer = new FreakMailer(); 

       // Get the user's Email 
       $sql = mysql_query("SELECT leadname,businessname,email,mailtype FROM hqfjt_chronoforms_data_addupdatelead WHERE keromailinglist='$kerouserTemplate' AND dervmailinglist='$dervuserTemplate' AND gasoilmailinglist='$gasoiluserTemplate'"); 

       while($row = mysql_fetch_object($sql)) 
       { 
        // Send the emails in this loop. 
        $name = $row->leadname; 
        $businessname = $row->businessname; 
        $to_email = $row->email; 
        $mailtype = $row->mailtype; 
        if(!empty($row->businessname)) 
        { 
         $name .= ' '.$row->leadname; 
        } 
        $to_name = $name; 

        if($row->mailtype == 'html') 
        { 
         $mailer->Body = str_replace('{name}', $name, $htmlBody); 
     // the line below is the new one I have added 
         $mailer->Body = str_replace('{fuel}', $templatename, $htmlBody); 
         $mailer->isHTML(true); 
         $mailer->AltBody = str_replace('{name}', $name, $textBody); 
         $mailer->AddAddress($to_email, $name); 
         $mailer->Subject = "Your Fuel Prices From Chandlers Oil & Gas"; 
         $mailer->FromName = "Chandlers Oil & Gas"; 
        } 
        else 
        { 
         $mailer->Body = str_replace('{name}', $name, $textBody); 
    // the line below is the new one I have added 
         $mailer->Body = str_replace('{fuel}', $templatename, $textBody); 
         $mailer->isHTML(false); 
         $mailer->Subject = "Your Fuel Prices From Chandlers Oil & Gas"; 
         $mailer->FromName = "Chandlers Oil & Gas"; 
          $mailer->AddAddress($to_email, $name);         
        } 

        $mailer->Send(); 
        $mailer->ClearAddresses(); 
        $mailer->ClearAttachments(); 
        $mailer->IsHTML(false); 
        echo "Mail sent to: $name - $to_email<br />"; 
       } 

       ?> 

回答

3

我试图此开始:

$mailer->Body = str_replace(array('{name}', '{fuel}'), array($name, $templatename), $textBody); 

docs

如果搜索和替换是数组,则str_replace()函数取值 从每个阵列和用途他们在主题上进行搜索和替换。如果 替换的值比搜索更少,则将使用空字符串作为替换值的其余部分。如果搜索是一个数组并且替换为 字符串,则此替换字符串用于搜索的每个值 。尽管如此,反过来也是没有意义的。

如果搜索或替换是数组,则它们的元素首先被处理到 最后。

+0

谢谢你的帮助,完美的作品,我只需要templatename tweek $ templatename,但除了它的工作与上述:-) – 2012-01-12 18:48:45

3

的问题是你的代码:

//Here you set $mailer->Body = $htmlBody (while replacing {name}) 
$mailer->Body = str_replace('{name}', $name, $htmlBody); 
// the line below is the new one I have added 
//Here you set $mailer->Body = $htmlBody (while replacing {fuel}) 
$mailer->Body = str_replace('{fuel}', $templatename, $htmlBody); 

问题是你要重写mailer- $>正文第二str_replace()你需要做的是使用$ mailer->身体,而不是$ htmlBody

$mailer->Body = str_replace('{fuel}', $templatename,$mailer->Body); 

一个更好的解决办法是张贴以上(使用str_replace函数的数组()),但我想在你的代码指出实际的错误。