【问题标题】:Form POST wont transfer variables to PHP script表单 POST 不会将变量传输到 PHP 脚本
【发布时间】:2016-11-08 05:45:24
【问题描述】:

我有这个问题我已经好几天没能解决了,我快疯了......

我有一个 HTML 表单,我试图将这些变量从表单传递到我的 PHP 脚本,但由于某种原因它们没有传递。

HTML 表单:

<div class="col-md-4 col-sm-12">
                <a name="contactus"></a>
                <div class="contact-form bottom">
                    <h2>Send a message</h2>
                    <form  name="contact form" method="POST" action="sendemail_1.php" id="main-contact-form">
                        <div class="form-group">
                          <input type="text"  name="name" id="names" class="form-control" required="required" placeholder="Name">
                        </div>
                        <div class="form-group">
                          <input type="email"  name="email" id="emails" class="form-control" required="required" placeholder="Email">
                        </div>
                        <div class="form-group">
                          <input type="text"  name="number" id="numbers" class="form-control" required="required" placeholder="Number">
                        </div>
                        <div class="form-group">
                          <textarea name="message" id="messages" required="required" class="form-control" rows="8" placeholder="Your text here"></textarea>
                        </div>                        
                        <div class="form-group">
                          <input type="submit" name="submit" class="btn btn-submit" value="Submit">
                        </div>
                    </form> 
                </div>
            </div>

完整的 PHP 脚本:

<?php
require 'PHPMailer/PHPMailerAutoload.php';

$mail = new PHPMailer;
$mail->isSMTP();                            
$mail->Host = 'smtp.gmail.com';             
$mail->SMTPAuth = true;                     
$mail->Username = '*****@gmail.com';          
$mail->Password = '****';
$mail->SMTPSecure = 'tls';                  
$mail->Port = 587;                         
$mail->setFrom('*****@gmail.com', 'Test');
$mail->addReplyTo('****@gmail.com', 'Test');
$mail->addAddress("****@hotmail.com"); 

$mail->isHTML(false);  // Set email format to HTML

$bodyContent = "test";
$name = filter_input(INPUT_POST, 'name');
$number = filter_input(INPUT_POST, 'number');
$email = filter_input(INPUT_POST, 'email');
$message = filter_input(INPUT_POST, 'message');

$mail->Subject = 'Test';
$mail->Body    = $bodyContent;

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';    
}
error_reporting(E_ALL);
?>

使用的JS

// Contact form
var form = $('#main-contact-form');
form.submit(function(event){
    event.preventDefault();
    var form_status = $('<div class="form_status"></div>');
    $.ajax({
        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">Thank you for contact us. As early as possible  we will contact you</p>').delay(3000).fadeOut();
    });
});

我也尝试过使用 $_POST('name') 但它也不起作用。

非常感谢任何帮助!谢谢

【问题讨论】:

  • 所以您遇到任何错误?还是只显示空白?
  • 空白,没有错误。谢谢!
  • 尝试打印帖子和请求变量。 print_r($_POST); print_r($_REQUEST);
  • 这两个文件在同一个目录吗?
  • 是在同一个目录下。它发送电子邮件,它只是不包含任何变量,它们都是空白的

标签: php html forms post http-post


【解决方案1】:

评论开始变得太大,这对于评论来说太大了。

要进行测试,请使用以下内容而不是您现在拥有的内容。

更改自:

$name = filter_input(INPUT_POST, 'name');
$number = filter_input(INPUT_POST, 'number');
$email = filter_input(INPUT_POST, 'email');
$message = filter_input(INPUT_POST, 'message');

收件人:

if(

!empty($_POST['name']) 

&& 

!empty($_POST['number']) 

&& 

!empty($_POST['email']) 

&& 

!empty($_POST['message']) 

) {

$name = $_POST['name'];
$number = $_POST['number'];
$email = $_POST['email'];
$message = $_POST['message'];

}

else{

    echo "No empty fields please.";
    exit; // This will STOP any further execution.

}

// the rest of your code below
  • 我看不到这个失败。

注意:

我到处都能看到 ID,这表明您可能正在使用额外的 Javascript 来处理它。

如果是这种情况,那么你需要确保语法正确。

我之前给你的评论中没有回答这个问题。

【讨论】:

  • 它也不起作用,我已经用与表单一起使用的 JS 更新了帖子。再次感谢您的所有帮助:)
【解决方案2】:

好的找到问题 - 您需要将提交按钮名称作为 submit 而不是 submited 传递。

试试下面的代码:

您的 html 文件:

<form  name="contact form" method="POST" action="sendemail_1.php" id="main-contact-form">
  <div class="form-group">
    <input type="text"  name="name" id="names" class="form-control" required="required" placeholder="Name">
  </div>
  <div class="form-group">
    <input type="email"  name="email" id="emails" class="form-control" required="required" placeholder="Email">
  </div>
  <div class="form-group">
    <input type="text"  name="number" id="numbers" class="form-control" required="required" placeholder="Number">
  </div>
  <div class="form-group">
    <textarea name="message" id="messages" required="required" class="form-control" rows="8" placeholder="Your text here"></textarea>
  </div>                        
  <div class="form-group">
    <input type="submit" name="submit" class="btn btn-submit" value="Submit">
  </div>
</form> 

你的 PHP 文件

if(isset($_POST['submit']))
{
    print_r($_POST);
}

【讨论】:

  • 感谢您的回复,但没有成功,还有其他想法吗?
  • 你复制粘贴了我的两个文件的代码吗?它在这里工作正常,我也检查过,在您的 sendemail_1.php 文件中编写我在您的 php 文件中编写的代码
  • 是的,我刚试过,不走运,它快把我逼疯了
  • 奇怪我创建了相同的文件并且它在这里工作正常再次检查我已经更新了答案
  • 我在我的 ec2 主机上部署它,我如何才能看到 print_r 消息?我发送的电子邮件中仍然没有收到任何值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多