PHP没有从表单

时间:2015-12-10 00:17:08

标签: php html forms

我正在使用PHP mail(),并且有一个联系表单posts输入字段submit html表单上的所有输入都附加了name attr,因此PHP可以检索它们的值。

<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-6">
                                <div class="form-group">
                                    <input type="text" name="name" class="form-control" required="required" placeholder="Name">
                                </div>
                            </div>
                            <div class="col-sm-6">
                                <div class="form-group">
                                    <input type="text" name="email" class="form-control" required="required" placeholder="Email address">
                                </div>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-sm-12">
                                <div class="form-group">
                                    <textarea name="message" id="message" required="required" class="form-control" rows="8" placeholder="Message"></textarea>
                                </div>
                                <div class="form-group">
                                    <button type="submit" class="btn btn-danger btn-lg">Send Message</button>
                                </div>
                            </div>
                        </div>
</form>

submit表单上postedsendemail.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 = 'keilcarpenter01@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;

如您所见,我试图通过以下方式检索表单值:

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

引用归因于每个表单输入名称的正确名称

但它没有得到实际值,所以当我收到一封电子邮件时,邮件的所有内容都包含:

Name:
Email:
Subject:
Message:

而不是田野的实际内容。

我已经读过,当您的enctype与application/x-www-form-urlencodedmultipart/form-data不同但我的enctype上没有任何form attr时,PHP无法解析POST。

var_dump($ _ POST)的结果:

  array(0) {
}

我无法看到我出错的地方

3 个答案:

答案 0 :(得分:0)

你能告诉我你在php文件中做了什么吗?

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

您是否通过ajax电话提交表单。

同样重要的是要注意@Darren说,删除那些&#39; @&#39;从您的代码中,您不需要它。如果有的话,这将抑制函数中的错误!

也许你可以试试这个:

$(document).ready(function(){
    $('#submit').click(function(e) {
            e.preventDefault;

            var form = $('form#main-contact-form');

            var formAction = form.attr('action');

            $.ajax({
                url: formAction,
                data : form.serialize(),
                dataType: "json",
                type : 'POST',
            })
            .done(function(data) {
               //here is your returned array
               if(data.type == 'success'){
                   alert(data.message)
               }
            })
            .fail(function() {
                console.log("error");
            })


    })
})

答案 1 :(得分:0)

You can get the raw format like this.

$post = json_decode(file_get_contents('php://input'));

And then access like this

$email = $post->email;

答案 2 :(得分:0)

所以我发现它,事实证明类.contact-form已经绑定到js函数,该函数使用ajax将数据传递给php脚本。当时它没有从表单中捕获任何数据,因此为什么$_POST没有收到任何价值。

我通过传递表单值来修复错误:

var form = $('.contact-form');
form.submit(function (evt) {
    $this = $(this);
    $.post('sendemail.php',{ name: $('input[name=name]').val() email: $('input[name=email]').val() message: $('input[name=message]').val() }, function(data) {;
        $this.prev().text(data.message).fadeIn().delay(3000).fadeOut();
    },'json');
    evt.preventDefault();
    return false;
});