【问题标题】:Form sending email but in the email $_POST values are blank表单发送电子邮件,但电子邮件中的 $_POST 值为空白
【发布时间】:2016-03-25 16:38:23
【问题描述】:

我已经阅读了很多论坛都发布了这个确切的问题,但没有令人满意的答案。有些帖子似乎已经找到了如何让它发挥作用,但答案没有分享或只是部分回答。

我看到最多的答案是(但不知道怎么用):

var form = $('.contact-form');
form.submit(function () {'use strict',
    $this = $(this);
    $.post("sendemail.php", $(".contact-form").serialize(),function(result){
    if(result.type == 'success'){
        $this.prev().text(result.message).fadeIn().delay(3000).fadeOut();
    }
});
    return false;
});

这个问题是 $_POST 没有被发送。邮件功能正常,但邮件内容为空白

我的邮件信息:

Name: 
Email:  
Subject: 
Message:

当我用数据填写表格并且没有发送任何内容时,这正是在我的邮件中

main.html

<h4>Contact Form</h4>
<div class="status alert alert-success" style="display: none"></div>
<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php" role="form">
    <div class="row">
        <div class="col-sm-5">
            <div class="form-group">
                <input type="text" class="form-control" name="subject" required="required" placeholder="Subject">
            </div>
            <div class="form-group">
                <input type="text" class="form-control" name="name" required placeholder="First Name">
            </div>
            <div class="form-group">
                <input type="text" class="form-control" name="email" required placeholder="Email address">
            </div>
            <div class="form-group">
                <button type="submit" class="btn btn-primary btn-lg">Send Message</button>
            </div>
        </div>
        <div class="col-sm-7">
            <textarea name="message" id="message" required class="form-control" rows="8" placeholder="Message"></textarea>
        </div>
    </div>
</form>

sendemail.php

<?php
    header('Content-type: application/json');
    $status = array(
        'type'=>'success',
        'message'=>'Email sent!'
    );

    $name = @trim(stripslashes($_POST['name'])); 
    $email = @trim(stripslashes($_POST['email'])); 
    $subject = @trim(stripslashes($_POST['subject'])); 
    $message = @trim(stripslashes($_POST['message'])); 

    $email_from = $email;
    $email_to = 'myEmail@gmail.com';

    $body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message;

    $success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>');

    echo json_encode($status);
    die;

【问题讨论】:

  • 检查数据,发送到服务器,js可能有问题
  • 您是否检查了开发工具上的网络选项卡以确保发出正确的请求?接下来,你print_r$_POST的值了吗?

标签: php json email post


【解决方案1】:

您的表单是否可能被提交两次? (一旦完成然后空白) html 表单已经完全连接到 POST 而不使用提交处理程序,这是多余的。

如果我要通过 AJAX 提交表单,我通常只设置表单的 id(即无操作和无方法属性),并使用常规按钮(非提交)作为提交按钮。这清楚地表明 jQuery 将处理 POST。

<form id="main-contact-form" class="contact-form" role="form">
    ...fields
    <button id="btn_submit" class="btn btn-primary">Submit</button>
</form>

然后在 jQuery 中

'use strict';
var form = $('.contact-form'),
    btn_submit = $('#btn_submit');

btn_submit.on('click', function(e) {
    e.preventDefault(); //prevent default button behavior
    $.post('sendemail.php', form.serialize(),function(result){
    if(result.type == 'success'){
        form.prev().text(result.message).fadeIn().delay(3000).fadeOut();
    }
});

【讨论】:

  • 刚试过这个。不工作。未发送表单(按下按钮后没有响应)。我将其粘贴在 标记中并拥有 jquery 库。不知道我是不是哪里搞砸了。该按钮还有 id="btn-submit" @rmirablle
  • 2 个快速建议:1)我给出的示例有 btn_submit 而不是 btn-submit 和 2)确保在文档就绪回调中连接 jquery,例如$().ready(function() {});
【解决方案2】:

如下所示更改你的“jquery”代码:

$('.contact-form').submit(function (e) {
    e.preventDefault();  // prevent default form 'submit' event
    $this = $(this);
    $.post(
      "sendemail.php",
       $(".contact-form").serialize(),
       function(result){
          if(result.type == 'success'){
              $this.prev().text(result.message).fadeIn().delay(3000).fadeOut();
          }           
       },
       'json'  // expecting a JSON response from server
    );
});

【讨论】:

  • 问题是发出的电子邮件没有正确的字段,您似乎正在解决 OP 没有明确将 json 设置为返回类型的事实。请注意,jQuery 无论如何都会猜测返回类型,如果您无法将服务器设置为指定响应类型,则只能使用您建议的内容。
  • @JuanMendes,我没有指出问题是“未指定的返回类型”(这只是为了方便)。 sendemail.php 似乎几乎是正确的。所以我建议了一个可读的 jquery 代码。
  • 我刚试过这个。与 rmirabelle 的回答相同的问题。按钮没有响应。 @罗马
  • “按钮没有响应” - 你肯定期望什么“按钮响应”?
  • @RomanPerekhrest,我的意思是提交按钮&lt;button id="btn_submit" class="btn btn-primary"&gt;Submit&lt;/button&gt;
【解决方案3】:

我认为您在同一页面中有多个带有 css 类 .contact-form 的表单。如果你想提交这个表单,那么你可以使用表单 id 选择器。

<script type="text/javascript">
    $(function() {
        $('#main-contact-form').submit(function (e) {
            e.preventDefault();  // prevent default form 'submit' event
            var $this = $(this);
            $.post("sendemail.php", $this.serialize(), function(result) {
                if (result.type == 'success') {
                    $this.prev().text(result.message)
                         .fadeIn().delay(3000).fadeOut();
                }
            }
        }, 'json');
    });
</script>

或者您可以使用 css 选择器编写代码,如下所示:

<script type="text/javascript">
    $(function() {
        $('.contact-form').submit(function (e) {
            e.preventDefault();  // prevent default form 'submit' event
            var $this = $(this);
            $.post("sendemail.php", $this.serialize(), function(result) {
                if (result.type == 'success') {
                    $this.prev().text(result.message)
                         .fadeIn().delay(3000).fadeOut();
                }
            }
        }, 'json');
    });
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 2016-06-07
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多