2012-01-12 2 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() принимает значение из каждого массива и использования их искать и заменять на тему. Если replace имеет меньшее количество значений, чем поиск, то пустая строка используется для остальных значений замены. Если поиск - это массив, а replace - строка , то эта строка замены используется для каждого значения . Однако обратное не имело смысла.

Если поиск или замена являются массивами, их элементы сначала обрабатываются до .

+0

Благодарим вас за помощь, которая работает отлично, мне просто нужно было поддразнить templatename до $ templatename, но кроме того, что она работает с вышеперечисленным :-) –

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()), но я хотел бы отметить фактическую ошибку в коде.

Смежные вопросы