$_POST[] 未捕获 HTML 表单输入

$_POST[] not catching HTML form input

本文关键字:HTML 表单 输入 POST      更新时间:2023-09-26

我有一个奇怪的问题,我正在将数据从电子邮件表单(HTML5(传递到ajax/JSON并返回false因此页面在按下提交按钮后不会重定向到php脚本。

如果我用逗号分隔每个data参数($email, $name, $message(,只有"name"和"email"被传递给$_POST[],省略了$message的值。

但是,如果参数之间没有逗号,则所有输入都将被$_POST[]捕获。

例如(逗号(:(不会重定向到脚本php$message值未被捕获$_POST[](

var form = $('.contact-form');
form.submit(function (evt) {
    $this = $(this);
    $.post('Scripts/php/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;
});

输出:

$name=foo
$email=bar
$message=null

页面返回false

(

不带逗号(:(重定向到php脚本,但$message值被捕获在$_POST[]中(

var form = $('.contact-form');
form.submit(function (evt) {
    $this = $(this);
    $.post('Scripts/php/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; (does not redirect to `php`)
});

输出:

$name=foo
$email=bar
$message=bar

网页表单:

<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="Scripts/php/sendemail.php">
    <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="email" 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" id="submit" class="btn btn-danger btn-lg">
                    Send Message
                </button>
            </div>
        </div>
    </div>
</form>

JS的形式:

var form = $('.contact-form');
form.submit(function (evt) {
    $this = $(this);
    $.post('Scripts/php/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;
});

PHP 处理程序:

  <?php
header('Content-type: application/json');
$status = array(
    'type'=>'success',
    'message'=>'Email sent! Thankyou :)'
);
$name = $_POST['name'];
$email = $_POST['email'];
$subject = 'query';
$message = $_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: visitor');
echo json_encode($status);
#start buffering (all activity to the buffer)
ob_start() ;
# dumps to buffer
var_dump($_POST) ;
# dump buffered $classvar to $outStringVar
$outStringVar = ob_get_contents() ;
# open your file with append, read, write perms
# (be sure to check your file perms)
$fp=fopen('dmp.txt','a+');
# write output to file & close it
fwrite($fp, $outStringVar );
fclose($fp);
# clean the buffer & stop buffering output
ob_end_clean() ;
die;

在这种情况下,comma分离器如何确定form$_POST[]捕获的input

您必须更改 jquery 以获取文本区域的值,请尝试以下代码:-

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

它可能会对你有所帮助。

使用:

message: $('textarea[name=message]').val()