我有PHP表单(Joomla模块(,该表单将电子邮件提交并将用户电子邮件保存到数据库中。表格正在检查数据库中是否已经存在用户电子邮件,如果没有保存电子邮件(创建了新的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;
}
}
您的代码中有一些明显的错误。线:
JFactory::getSession()->clear('user');
永远不会到达,因为脚本在此行之前返回。另外,行:
if($send = true){
简单地分配true即可发送,并且将永远是正确的。
我也质疑这一行:
$send = & $mailer->Send();
您在这里分配了出于某种原因发送$发送的引用。不。
我不确定您为什么会发现自己的错误,但是:我真的会考虑使用正确的凹痕正确格式化代码,这使发现错误变得容易得多。并尝试清除其他错误...考虑出于某种原因可能将您的功能称为两次...