2012-01-10 4 views
0

phpmailer를 사용하여 뉴스 레터를 보내려고 시도했지만 매번 트리거하려고 할 때마다 다음 오류가 계속 발생합니다. 내 SQL 구문이 맞는지 아닌지 잘 모르겠다.phpmailer가 mysql 오류를 던졌습니다

Warning: mysql_fetch_array() : supplied argument is not a valid MySQL result resource in view.html.php(38):eval()'d code on line 32

<?php 
$formid = $_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; 
?> 

<?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 = 'Dear Test this is a test.'; 
// $body = preg_replace('/\\\\/i', $body); 

$mail->SetFrom('[email protected]', 'List manager'); 
$mail->AddReplyTo('[email protected]', 'List manager'); 

$mail->Subject = "Mailing List Test"; 

$query = " 
    SELECT leadname,businessname,email 
FROM hqfjt_chronoforms_data_addupdatelead 
WHERE keromailinglist='$kerolist' 
    AND dervmailinglist='$dervlist' 
    AND gasoilmailinglist='$gasoillist'"; 
$result = @MYSQL_QUERY($query); 

while ($row = mysql_fetch_array ($result)) { 
    $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test 
    $mail->MsgHTML($body); 
    $mail->AddAddress($row["email"], $row["full_name"]); 
    $mail->AddStringAttachment($row["photo"], "YourPhoto.jpg"); 

    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(); 
} 
?> 

편집 >>>>>>

나는 이제 오류 검사를 추가,하지만 지금은 단지 오류없이 빈 페이지를 얻을뿐만 아니라, 어떤 메일습니까?

  <?php 

        $formid = $_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; 
       ?> 
        <?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 = 'Dear Test this is a test.'; 

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

      $mail->SetFrom('[email protected]', 'List manager'); 
      $mail->AddReplyTo('[email protected]', 'List manager'); 

      $mail->Subject  = "Mailing List Test"; 

      $query = "SELECT leadname,businessname,email FROM hqfjt_chronoforms_data_addupdatelead WHERE keromailinglist='$kerolist' AND dervmailinglist='$dervlist' AND gasoilmailinglist='$gasoillist'"; 
      $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!"; // optional, comment out and test 
       $mail->MsgHTML($body); 
       $mail->AddAddress($row["email"], $row["full_name"]); 
       $mail->AddStringAttachment($row["photo"], "YourPhoto.jpg"); 

       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(); 
      } 
      ?> 
+0

왜 @MYSQL_QUERY를 사용하고 있습니까 –

+1

MYSQL_QUERY ($ query) 줄 앞의 @ 기호를 제거해보십시오. 무엇이 잘못되었는지 자세히 설명하는 오류 메시지는 표시하지 않는 것이 좋습니다. – Tanoro

답변

3

코드에서 오류를 검사하지 않으므로 오류가 발생하면 쿼리가 자동으로 중단됩니다. 오류를 확인하면 오류가 무엇인지 알 수 있습니다. 수행 방법은 manual on mysql_query() 또는 reference question.에 설명되어 있습니다. mysql_query() 앞의 @을 제거하십시오! 예 :

$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(); 
    } 

이렇게하면 정확히 무엇이 잘못되었는지, 그리고 최종 쿼리가 사용되고 있는지를 알 수 있습니다.

부수적으로 (근본 원인에 대한 해결책 일 수도 있음) 표시된 코드는 SQL injection에 취약합니다. 이것은 귀하의 질문을 깨는 것일 수 있습니다.

는 당신과 같이 모든 입력 값에 mysql_real_escape_string()을 수행해야합니다

$formid = mysql_real_escape_string($_GET["token"]); 
+0

고정!, 내가 쿼리에서 잘못된 값을 사용하고 있다는 것을 깨달았습니다. hqfjt_chronoforms_data_addupdatelead 어디에서 keromailinglist = 'kerouserTemplate'AND dervmailinglist = '$ dervuserTemplate'AND gasoilmailinglist = '$ gasoiluserTemplate ' 이제 작동합니다! 머리를 가져 주셔서 감사 드리며 진정한 도피를 얻으십시오. –

0

함수 호출 전에 @는 무슨 일이 일어나고 있는지를 알려해야 오류를 억제한다.

관련 문제