PHP脚本发送邮件但不显示表单数据

时间:2014-11-02 05:57:32

标签: php html5 contact-form

我正在尝试通过联系表单发送邮件。该脚本已执行并将邮件发送到我的电子邮件但无法捕获数据......它显示为空白。

这是我的HTML代码:

 <form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php">
                    <div class="col-sm-5 col-sm-offset-1">
                        <div class="form-group">
                            <label>Name *</label>
                            <input type="text" name="name" class="form-control" required="required">
                        </div>
                        <div class="form-group">
                            <label>Email *</label>
                            <input type="email" name="email" class="form-control" required="required">
                        </div>
                        <div class="form-group">
                            <label>Phone</label>
                            <input type="number" class="form-control">
                        </div>
                        <div class="form-group">
                            <label>Company Name</label>
                            <input type="text" class="form-control">
                        </div>
                    </div>
                    <div class="col-sm-5">
                        <div class="form-group">
                            <label>Subject *</label>
                            <input type="text" name="subject" class="form-control" required="required">
                        </div>
                        <div class="form-group">
                            <label>Message *</label>
                            <textarea name="message" id="message" required="required" class="form-control" rows="8"></textarea>
                        </div>
                        <div class="form-group">
                            <button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">Submit Message</button>
                        </div>
                    </div>
                </form>

这是完整的PHP脚本

<?php
    header('Content-type: application/json');
    $status = array(
        'type'=>'success',
        'message'=>'Thank you for contact us. As early as possible  we will contact you '
    );

    $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 = 'vishal@gmail.com';//replace with your email

    $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;

实际上我正在使用HTML模板..它就在那里......我尝试了很多方法来修改它,但它没有捕获表单数据。

任何建议......请仔细检查。

6 个答案:

答案 0 :(得分:1)

您的内容位于名为$message的变量中。您将名为$body的{​​{1}}传递给mail()。如果您启用了错误报告,那么php会向您报告此情况。

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

仅供参考,使用@来抑制错误是一种不好的做法。它只会使调试变得更加困难,并且不是处理潜在错误的正确方法。

答案 1 :(得分:1)

  1. &#34; @&#34; php中函数之前的符号将禁止任何错误消息。在您的应用程序准备好部署之前,最好不要使用它们。我建议删除那些,直到所有内容都按照您的意愿运行。

  2. 我建议在处理之前验证用户输入。您可以在线使用多个脚本。

  3. 要解决当前问题,请使用:$success = @mail($email_to, $subject, $message, 'From: <'.$email_from.'>');

答案 2 :(得分:1)

注意阅读答案中的评论。在那里我解释,为什么你能够发送邮件。而不是其他值

像 改变这些行。 注意使用input type代替button

<button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">Submit Message</button>

到这些

<input type="submit" name="submit" class="btn btn-primary btn-lg" required="required">

评论您可以发送mail因为您在脚本中对其进行了硬编码

喜欢这一行

$email_to = 'vishal@gmail.com';//replace with your email

您的其他价值取决于您的表单。 这些价值。您没有通过表单获得这些价值。

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

评论二不要在制作中使用@。因为它压制了错误。在生产过程中,错误信息很重要。

评论三始终清理或验证用户输入。出于安全目的。

答案 3 :(得分:0)

解决错误的步骤:

1)检查这些变量是否存储数据:

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

逐个回声。

2)然后将它们传递给$body变量。

3)使用适当的标题包含内容类型以及来自和回复标记。

试试这个:

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers`enter code here`
$headers .= 'To:' . "\r\n";
$headers .= 'From: Admin<youremail@email.com>' . "\r\n";
// Mail it
mail($to, $subject, $body, $headers);     

答案 4 :(得分:0)

以上所有事情都不适合我。基础javascript中只有一个问题...它无法获取数据,序列化表单对我来说效果很好

//联系表格

var form = $('#main-contact-form');
var data = $form.serialize()
form.submit(function(event){
    event.preventDefault();
    var form_status = $('<div class="form_status"></div>');
    $.ajax({
        type: "POST",
        dataType: "json",
        data: data,
        url: $(this).attr('action'),

        beforeSend: function(){
            form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
        }
    }).done(function(data){
        form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
    });
});

答案 5 :(得分:0)

解决方案:

1)在/ js

中打开文件main.js

2)找到//联系表格

3)将代码替换为:

jQuery(function($){&#39; use strict&#39;,

$('.contact-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;
});

});

4)测试! :d