如何解决如何将每个页面上的表单数据从数据库发送到不同的电子邮件地址
我创建了一个类似预订的网站,其中在每个页面上都有两个表单。但是,如果我只有两个收件人,此表单可以很好地与 AJAX、jQuery、PHP 验证、PHPMailer 和 MysqL 配合使用,但在第二种形式中我有问题,因为在每个页面上我都需要更改电子邮件收件人,我需要使用 PDO 从数据库中获取,所以我尝试使用连续的代码行,但这会将表单数据发送到包含电子邮件地址的表 owner_email 中的所有电子邮件。
$sql="SELECT email_address FROM neum.owners_email";
foreach ($pdo->query($sql) as $row) {
$mail->AddAddress($row[email_address]);
}
但是,我明白为什么,因为我的 sql 查询它选择所有电子邮件,但我需要为每个页面选择不同的电子邮件地址,并再次在 INSERT 语句中使用它,因为在带有表单数据的表中,我已经引用了 email_address_id 从带有电子邮件地址的表格,您可以在下面看到:
CREATE TABLE IF NOT EXISTS `neum`.`owners_email` (
`email_address_id` INT(11) NOT NULL AUTO_INCREMENT,`email_address` VARCHAR(255) CHaraCTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,PRIMARY KEY (`email_address_id`))
ENGINE = InnoDB
AUTO_INCREMENT = 3
DEFAULT CHaraCTER SET = utf8
COLLATE = utf8_unicode_ci
COMMENT = 'Table with information about email addresses of owners.';
-- -----------------------------------------------------
-- Table `neum`.`form_data`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `neum`.`form_data` (
`form_data_id` INT(11) NOT NULL AUTO_INCREMENT,`name` VARCHAR(50) CHaraCTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,`tel` VARCHAR(50) CHaraCTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,`from` VARCHAR(255) CHaraCTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,`to` VARCHAR(255) CHaraCTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,`mail` VARCHAR(255) CHaraCTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,`message` TEXT CHaraCTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,`dateSent` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,`email_address_id` INT(11) NOT NULL,PRIMARY KEY (`form_data_id`),INDEX `fk_form_data_idx` (`email_address_id` ASC),CONSTRAINT `fk_form_data`
FOREIGN KEY (`email_address_id`)
REFERENCES `neum`.`owners_email` (`email_address_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHaraCTER SET = utf8
COLLATE = utf8_unicode_ci
COMMENT = 'Table with information about form data.';
尽管如此,我正在尝试在谷歌上找到这个问题的答案,但可能没有人使用 PHPMailer 将每个页面上的电子邮件发送到不同的电子邮件地址,因为在我的每个问题上,谷歌通常会向我显示简单的结果,例如如何发送邮件或如何发送多封邮件,但对于我的问题不存在答案,所以如果有人知道如何解决它,请提前感谢您的帮助和感谢时间。
解决方法
PHPMailer 不关心您发送给谁 - 它只使用您传递给 addAddress()
的任何内容。如果要发送给不同的人,则需要弄清楚如何获取要发送到的地址列表,这与以后向他们发送消息完全无关。将其视为两个独立的任务:
第一个任务:获取地址列表。这与 PHPMailer 无关。
第二个任务:向一组地址发送消息。这与您的数据库无关。
碰巧的是,PHPMailer provides an example 结合了这两项任务,您应该能够适应。仅仅因为您发送给 2 个人而不是 10,000 并不意味着您没有发送给一个列表,同样的代码也可以正常工作。
您的第一个代码片段中唯一缺少的是您的 MySQL 查询中的某些内容,以限制它选择发送的对象。通过执行以下操作来调整它:
$sql="SELECT email_address FROM owners_email JOIN form_data ON form_data.email_address_id = owners_email.id WHERE form_data_id = " . $form_data_id;
如何获得正确的 $form_data_id
值取决于您,您可能需要考虑使用连接表,以便您可以将任意数量的地址与任意数量的页面相关联,而不仅仅是一个固定一个。
首先,感谢所有就如何解决我将电子邮件发送到数据库中的地址的问题给我指导的所有人。 稍微拖延一下,最后我想对这个困扰了我好几天的问题给出一个答案,但现在对我来说似乎很简单,因为整个解释也在official page of phpmailer上。该代码还包含用于将数据插入数据库的代码。所以,完整的代码如下:
$sql = "SELECT owners_email.email_address_id,email_address,owner_name,owner_property,owner_sex,owner_type FROM visitneum.owners_email INNER JOIN visitneum.pages ON (pages.email_address_id = owners_email.email_address_id) WHERE `owner_sex`='M' AND `owner_type`='other' AND `pages_id` = ?";
$dbstmt = $pdo->prepare($sql);
$dbstmt->bindParam(1,$pages_id);
$dbstmt->execute();
$emails = $dbstmt->fetchAll(PDO::FETCH_ASSOC);
if(is_array($emails) && count($emails) > 0){
foreach ($emails as $email){
$mail->addAddress($email['email_address']);
$body_other = "<p>Dear {$email['owner_name']},<br>" . "You just received a message from the site <a href='https://www.visit-neum.com'>visit-neum.com</a><br>Details of your message are below:</p><p><strong>From: </strong>" . ucwords($fname) . "<br><strong>Phone: </strong>" . $tel . "<br><strong>E-mail: </strong>" .strtolower($userMail)."<br><strong>Message: </strong>" . $userMessage . ";
$mail->Body = $body_other;
try {
$mail->send();
//Insert data into db
$mail = "INSERT INTO visitneum.contact_owner (fname,tel,userMail,userMessage,email_address_id) VALUES (:fname,:tel,:userMail,:userMessage,:email_address_id)";
$stmt = $pdo->prepare($mail);
$stmt->execute(['fname' => $fname,'tel' => $tel,'userMail' => $userMail,'userMessage' => $userMessage,'email_address_id' => $email['email_address_id']]);
echo "Thanks ".ucwords($fname)."! Your message has been successfully sent to the owner of {$email['owner_property']}! You will get an answer soon!";
} catch (Exception $e) {
echo "An error has occurred! Please try again ..." . $mail->ErrorInfo;
}
}
}
我希望这个答案也能帮助别人,所以如果这个答案也解决了你的问题,请点击答案旁边的复选标记将其标记为已接受。提前致谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。