【问题标题】:sending mail in php if (($_SERVER["REQUEST_METHOD"] == "POST")在 php 中发送邮件 if (($_SERVER["REQUEST_METHOD"] == "POST")
【发布时间】: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 错误?
  • 也许你需要提高错误日志级别,但应该有某种错误消息(可能在日志中)

标签: php pdo


【解决方案1】:

沃特斯,

在您的 IF 条件下,尝试一次删除一个条件...看看是否可以解决问题。即

if (($_SERVER["REQUEST_METHOD"] == "POST") && $geslachtErr== "" && $voornaamErr== "" && $familienaamErr== "" && $emailErr== "" && $telErr== ""){

然后

if (($_SERVER["REQUEST_METHOD"] == "POST") && $geslachtErr== "" && $voornaamErr== "" && $familienaamErr== "" && $emailErr== ""){

然后

if (($_SERVER["REQUEST_METHOD"] == "POST") && $geslachtErr== "" && $voornaamErr== "" && $familienaamErr== ""){

等等

最后,如果您已经在 sendmail.php 中创建了 PHPMailer 的实例,那么您不需要重新创建它...因为您已经在 solliciteerform.php 中包含了 sendmail.php 文件

所以我会删除以下内容:

$mail = new PHPMailer(true);

希望这会有所帮助!

-冲刺

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多