PHP 表单发送电子邮件但 $_POST['email'] 失败

Posted

技术标签:

【中文标题】PHP 表单发送电子邮件但 $_POST[\'email\'] 失败【英文标题】:Php form emailing but $_POST['email'] is failingPHP 表单发送电子邮件但 $_POST['email'] 失败 【发布时间】:2019-07-28 21:51:46 【问题描述】:

我的网站上有一个表单,我想在提交时发送电子邮件。电子邮件已发送,但没有任何内容随之发送。似乎 isset($_POST['email']) 失败了。

这是我的表格:

<form id="sponsorForm" name="sponsor" role="form">
   <div class="modal-body">
      <div class="form-group col-md-12">
         <label for="sponsorname">Name</label>
         <input type="text" name="sponsorname" class="form-control">
      </div>
      <div class="form-group col-md-12">
         <label for="sponsoremail">Email</label>
         <input type="email" name="sponsoremail" class="form-control">
      </div>
      <div class="form-group col-md-12">
         <label for="sponsormessage">Message</label>
         <textarea class="form-control" name="sponsormessage" rows="7" placeholder="Message...">
         </textarea>
      </div>
   </div>
   <div class="modal-footer" style="border: none;">                  
      <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
      <input type="submit" class="btn btn-success" data-toggle="modal" data-target="#sponsor-thanks" id="sponsor-submit">
   </div>
</form>

这里有一些 javascript 来调用 php

$(document).ready(function()   
    $("#sponsorForm").submit(function(event)
        submitSponsorForm();
        return false;
    );
);

function submitSponsorForm()
     $.ajax(
        type: "POST",
        url: "sendSponsor.php",
        cache:false,
        data: $('form#sponsorForm').serialize(),
        success: function(response)
            $("#sponsor").html(response)
            $("#sponsor-modal").modal('hide');
        ,
        error: function()
            alert("Error");
        
    );

这里是php:

<?php
if (isset($_POST['email'])) 
    $sponsorname = strip_tags($_POST['sponsorname']);
    $sponsoremail = strip_tags($_POST['sponsoremail']);
   $sponsormessage = strip_tags($_POST['sponsormessage']);
    $message = "Name: ".$sponsorname."\r\nEmail: ".$sponsoremail."\r\nMessage: ".$sponsormessage; 

    mail("xxx@xxx.com", "subject", $message, "from: xxx");
?>

【问题讨论】:

print_r($_POST) 检查它是否正在获取任何数据。 您的电子邮件名称是sponsoremail,请查看$_POST['sponsoremail'] 您还应该在大括号内移动mail("xxx@xxx.com", "subject", $message, "from: xxx");。让邮件函数在if 子句之外发送电子邮件是不合逻辑的,因为它依赖于if 子句中的值。 【参考方案1】:

在您的表单中,您的电子邮件输入字段的名称是“sponsoremail” 所以你应该使用名称赞助商电子邮件作为$_POST变量的索引$_POST['sponsoremail']来检查用户是否填写了电子邮件,但你使用了$_POST['email'],在你的表单中没有找到。

使用if (isset($_POST['sponsoremail'])) 而不是if (isset($_POST['email'])),它应该可以工作。

【讨论】:

【参考方案2】:

试试这个

    <?php
    if (isset($_POST['sponsoremail'])) 
        $sponsorname = strip_tags($_POST['sponsorname']);
        $sponsoremail = strip_tags($_POST['sponsoremail']);
       $sponsormessage = strip_tags($_POST['sponsormessage']);
        $message = "Name: ".$sponsorname."\r\nEmail: ".$sponsoremail."\r\nMessage: ".$sponsormessage; 
      mail("xxx@xxx.com", "subject", $message, "from: xxx");
     
    ?>

【讨论】:

以上是关于PHP 表单发送电子邮件但 $_POST['email'] 失败的主要内容,如果未能解决你的问题,请参考以下文章

使用 mail() PHP 脚本的 jQuery AJAX 表单发送电子邮件,但来自 HTML 表单的 POST 数据未定义

PHP 电子邮件表单 - 定义发件人

php发送表单无法正常工作[关闭]

php表单不发送联系电子邮件

如何在邮件发送前清理 PHP 中的用户输入?

php表单不发送联系电子邮件