2016-10-05 2 views
0

올바르게 수행하고 있는지 또는 가능한지 확실하지 않습니다. 기본적으로 변수 $ cascadeType의 값에 따라 테이블 <td>의 배경색 만 변경하면됩니다. 사용자 입력을 받아PHPMailer : 전자 메일 템플리트의 조건문

형태 : 다음 파일 CascadeFunction.php 처리 도착 상기 폼

<form action="CascadeFunction.php" method="post" name="cascader" id="cascader" enctype="multipart/form-data"> 
<label><span class="required">*</span>CASCADE TYPE</label><br /><br /> 
<label for="Release" class="radioitem">RELEASE 
    <input type="radio" name="cascadeType" value="Release" id="CascadeType_1" /></label> 
<label for="Update" class="radioitem">UPDATE 
    <input type="radio" name="cascadeType" value="Update" id="CascadeType_2" /> 
</label> 
<label for="Reminder" class="radioitem">REMINDER 
    <input type="radio" name="cascadeType" value="Reminder" id="CascadeType_3" /></label> 
<label for="Information" class="radioitem">INFORMATION 
    <input type="radio" name="cascadeType" value="Information" id="CascadeType_4" /></label> 
<input class="btn btn-primary" name="Submit" type="submit" id="submit" value="POST &amp; CASCADE" /> 
</form> 

제출 데이터. 이메일을 보낼 수는 PHPMailer 코드는 여기서

<?php 
// starting the session 
session_start(); 
if (isset($_POST['Submit'])) { 
$_SESSION['cascadeType'] = $_POST['cascadeType']; 
} 
?> 

그런 다음 내에서 세션에 액세스 : 변수 $ cascadeType를 저장하기위한 시도

$mail->IsHTML(true); // This tells the PhPMailer that the messages uses HTML. 
$mail->MsgHTML(str_replace('%cascadeType%', $CascadeType, file_get_contents('emailtemplates/emailtemplate.php')), dirname(__FILE__)); 

다음 코드에서 볼 수 있듯이, 나는 _SESSIONS를 사용하여 $ 시도 코드를 사용하여 이메일 템플릿 ( emailtemplate.php ) : 전자 메일 템플릿 내에서, 그리고

<?php 
// starting the session 
session_start(); 
?> 

을 (emailtemplate.php), 아래의 조건문을 사용했습니다.

<tr> 
    <?php if ($_SESSION['cascadeType'] = "Information") : ?> 
    <td style="text-align:center; color:#FFF; background-color:#093; margin:10px; padding:10px 5px;" width="20%"> 
     <h4 style="font-weight:bold;">%cascadeType%</h4> 
    </td> 
    <?php elseif ($_SESSION['cascadeType'] = "Update") : ?> 
    <td style="text-align:center; color:#FFF; background-color:#09F; margin:10px; padding:10px 5px;" width="20%"> 
     <h4 style="font-weight:bold;">%cascadeType%</h4> 
    </td> 
    <?php elseif ($_SESSION['cascadeType'] = "Reminder") : ?> 
    <td style="text-align:center; color:#FFF; background-color:#F00; margin:10px; padding:10px 5px;" width="20%"> 
     <h4 style="font-weight:bold;">%cascadeType%</h4> 
    </td> 
    <?php else : ?> 
    <td style="text-align:center; color:#FFF; background-color:#6C3; margin:10px; padding:10px 5px;" width="20%"> 
     <h4 style="font-weight:bold;">%cascadeType%</h4> 
    </td> 
    <?php endif ; ?> 
<td style="color:#337AB7; text-align:right; padding-right: 20px;" width="80%"> 
<h3 style="margin-bottom:2px;">TARGET AUDIENCE</h3> 
<p style="margin-top:2px;">%targetAudience%</p> 
</td> 

이메일 출력은 작동하지 않습니다 분명히 모든 테이블 <td>를 표시합니다. 조건문이 전자 메일 서식 파일 내에서 실제로 작동하지 않는 경우 상황에 가장 잘 접근하는 방법에 대해 조언하십시오.

+0

로드/실행 방법을 말하지 않았습니다. – Synchro

+0

@ 싱크로, 고마워. 나는 내 질문을 변경했다. 희망이 도움이됩니다. –

답변

1

일반 HTML을 예상하는 방법 MsgHTML을 사용하고 있습니다. 그러나 조건을 가진 PHP 코드를 제공하고 있습니다. 이 PHP 코드는 평가되지 않으므로 조건이 작동하지 않습니다.

eval을 사용하여 템플릿 콘텐츠를 실행하고 출력물을 가져올 수는 있지만 실제로 템플릿에서 조금만 대체해야하는 경우 templater 사용을 고려해야합니다. 예를 들어, 나뭇 가지 templater 봐 - http://twig.sensiolabs.org/

업데이트 : 평가를 사용하여 다시

. 우선, 코드가 정확히 실행되는지에 대해 매우 신중하지 않으면 안전하지 않을 수 있습니다.

아이디어는 템플릿 내용 (본질적으로 HTML + PHP 코드)을 PHP 변수로 읽어 들이고 템플릿에 사용 된 다른 변수를 정의한 다음 PHP 코드 eval을 사용하여 해당 코드를 실행하는 것입니다. 이 같은

뭔가 :

$template = file_get_contents('emailtemplates/emailtemplate.php'); 
$html = eval('ob_start(); ?>' . $template . '<?php return ob_get_clean();'); 

심지어이

ob_start(); 
require('emailtemplates/emailtemplate.php'); 
$html = ob_get_clean(); 

그런 다음 두 예제에서 중요한 트릭 ob_* 기능입니다 MsgHTML

$html 변수를 사용합니다.ob_start()은 PHP 코드의 출력 캡처를 시작하고 ob_get_clean()은 PHP 코드를 중단하고 반환 된 모든 것을 반환합니다. 이 기능에 대한 문서를 확인하십시오. 또한 예를 들어 eval()을 사용하는 경우 include과 달리 템플릿 내용 주위에 ?><?php을 넣는 것이 중요합니다. eval은 PHP 컨텍스트에서는 시작하지만 HTML에서는 시작하지 않습니다.

+0

고마워요. @astax. 미래에는 templater를 사용할 수도 있지만, 지금은 조건문을 사용하여'eval'을 어떻게 사용하는지 알고 싶습니다. 약간의 빛을 비출 수 있습니까? –

관련 문제