【发布时间】:2017-06-16 12:03:58
【问题描述】:
我有一个 php 邮件脚本 sendmail.php,当我使用简单的 html 脚本和 if(isset($_POST['btn_send'])) 命令运行它时,它就可以工作。
但我想将此脚本集成到我拥有的 php 表单脚本 solliciteerform.php 中。
表单首先验证用户输入,当没有错误时,通过准备好的语句 PDO 将用户输入发送到我的 mysql 数据库。
我正在使用的
if (($_SERVER["REQUEST_METHOD"] == "POST") && $geslachtErr== "" && $voornaamErr== "" && $familienaamErr== "" && $emailErr== "" && $telErr== "" && $afileErr== "") {
$servername = "xxxxx.eu.mysql";
$username = "xxxxxx";
$password = "xxxxx";
try {
$conn = new PDO("mysql:host=$servername;dbname=xxxxxx", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
/***
irrelevant code
***/
if(move_uploaded_file($file_loc,$folder.$final_file))
{
// prepare sql and bind parameters
$stmt = $conn->prepare("INSERT INTO sollicitatie_form (geslacht, voornaam, familienaam, email, tel, afile, type)
VALUES (:geslacht, :voornaam, :familienaam, :email, :tel, :final_file, :file_type)");
$stmt->bindParam(':geslacht', $geslacht);
$stmt->bindParam(':voornaam', $voornaam);
$stmt->bindParam(':familienaam', $familienaam);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':tel',$tel);
$stmt->bindParam(':final_file', $final_file);
$stmt->bindParam(':file_type', $file_type);
$stmt->execute();
?>
<script>
alert('successfully uploaded');
window.location.href='thank.php';
</script>
<?php
exit();
}
}
catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
$conn->null;
}
此脚本在没有sendmail.php 的情况下进行测试。
所以问题不在于sendmail.php 或我的solliciteerform.php,因为它们都是分开工作的。
我遇到的问题是我想在之后向用户发送邮件
if (($_SERVER["REQUEST_METHOD"] == "POST") && $geslachtErr== "" && $voornaamErr== "" && $familienaamErr== "" && $emailErr== "" && $telErr== "" && $afileErr== "")
但是在数据发送到我的数据库之前......
我尝试了两种解决方案,但都没有奏效....:
解决方案 1:
在我的solliciteerform.php顶部添加include ('Send-HTML-mail-in-PHP/mailer/sendmail.php');
比我的sendmail.php 我替换if(isset($_POST['btn_send']))
与:
if(($_SERVER["REQUEST_METHOD"] == "POST") && $geslachtErr== "" && $voornaamErr== "" && $familienaamErr== "" && $emailErr== "" && $telErr== "" && $afileErr== ""){
结果是solliciteerform.php 正常运行,但我没有收到电子邮件。
解决方案 2:
在我的solliciteerform.php 顶部我添加了:
include ('Send-HTML-mail-in-PHP/mailer/class.phpmailer.php');
然后之前:
if (($_SERVER["REQUEST_METHOD"] == "POST") && $geslachtErr== "" && $voornaamErr== "" && $familienaamErr== "" && $emailErr== "" && $telErr== "" && $afileErr== ""){
我已添加:
$mail = new PHPMailer(true);
和之后的
if (($_SERVER["REQUEST_METHOD"] == "POST") && $geslachtErr== "" && $voornaamErr== "" && $familienaamErr== "" && $emailErr== "" && $telErr== "" && $afileErr== ""){
我已经粘贴了sendmail.php 中的所有代码。
当我这样做时,我的 solliciteerform.php 甚至都不会运行。获取错误页面。
什么是我想要实现的最佳解决方案?
【问题讨论】:
-
您遇到了哪些错误?
-
@B.Desai,页面无法加载
-
开启php报错。将
error_reporting(-1);添加到脚本的开头。此外,您应该将邮件部分放在一个函数中,然后您可以在页面开头包含包含该函数的文件。并在需要时使用所需的变量调用它。 -
不,您遇到了什么 PHP 错误?
-
也许你需要提高错误日志级别,但应该有某种错误消息(可能在日志中)