2017-06-01 74 views
0

我有提交電子郵件並將用戶電子郵件保存到數據庫的php表單(Joomla模塊)。 表單正在檢查用戶電子郵件是否已經存在於數據庫中,如果沒有保存電子郵件(新的joomla用戶被創建)並且郵件被提交給管理員電子郵件和用戶電子郵件。這部分工作正常。 但是,如果電子郵件已經在數據庫(返回用戶場景)表單發送雙重電子郵件給管理員和用戶。PHP郵件 - 雙電子郵件(Joomla模塊)

$mailer = & JFactory::getMailer(); 

     $mailer->isHTML(); 
     $mailer->setSender($params->get('email_from')); 
     $mailer->addRecipient($params->get('email_to')); 
     $mailer->addBCC($email); 
     $mailer->setSubject($params->get('subject')); 
     $mailer->setBody($message); 

$db = JFactory::getDbo(); 
$query = $db->getQuery(true); 
$query = 'SELECT id FROM #__users WHERE email = ' . $db->Quote($email); 
$db->setQuery($query, 0, 1); 
$check = $db->loadResult(); 

if(!$check){ 

    $udate = date('d/m/Y'); 
    $utime= date("h:i:s"); 
    $udata = array( 
    "name"=>"user".$udate."-".$utime, 
    "username"=>"user".$utime, 
    "password"=>$utime, 
    "password2"=>$utime, 
    "email"=>$email, 
    "block"=>0, 
    "groups"=>array("9") 
); 
$user = clone(JFactory::getUser()); 

if(!$user->bind($udata)) { 
    throw new Exception("Could not bind data. Error: " . $user->getError()); 
} 
if (!$user->save()) { 
    throw new Exception("Could not save user. Error: " . $user->getError()); 
} 
    return $user->id;   

JFactory::getSession()->clear('user'); 


    } 

    $send = & $mailer->Send(); 
    $mailer->ClearAddresses(); 
    $mailer->ClearAllRecipients(); 
     if($send = true){ 
      echo "Mail sent"; 
      return true; 
      } 
     else if ($send != true) 
     { 
      echo "Error sending email: ". $send->message; 
      return false; 

      } 

     } 
+0

我也試過這個,但沒有結果$ send =&$ mailer-> Send(); \t \t if(!$ send){ \t \t \t echo「發送郵件時出錯:」。 $發送 - >消息; \t \t \t return false; \t \t \t} \t \t \t 其他\t { \t \t \t $ \t mailer-> ClearAllRecipients(); \t \t $ mailer-> ClearAddresses(); \t \t $ mailer-> ClearBCCs(); \t \t unset($ mailer); echo「郵件發送」; \t \t \t return true;} – Rada

回答

0

你的代碼中有一些明顯的錯誤。該行:

JFactory::getSession()->clear('user'); 

永遠不會到達,因爲腳本在此行之前返回。此外,該行:

if($send = true){ 

只是將true賦予發送並始終爲真。

我還質疑這一行:

$send = & $mailer->Send(); 

您在這裏分配給$參考發送出於某種原因。別。

我不知道爲什麼你會得到你觀察到的錯誤,但是:我真的會考慮用正確的縮進來正確地格式化你的代碼,這使得更容易發現錯誤。並嘗試清除其他錯誤...考慮到你的功能可能會被某些原因調用兩次...

+0

感謝您回答我的問題:)當我回到了stackoverflow我已經發現並糾正了您指出的問題。你在回答中說的最後一件事讓我停下來想,我查看了服務器日誌,發現它被調用了兩次,問題是由模塊位置重複加載引起的:D – Rada