【问题标题】:JavaScript form submits, but post data not available in PHPJavaScript 表单提交,但发布数据在 PHP 中不可用
【发布时间】:2013-06-20 05:38:02
【问题描述】:

似乎表单提交(到同一页面 - contact.php),但我不能使用发布的数据,例如 $_POST["message"] 。似乎它们是空的(我试图回应它们但没有打印出来)。

这是 JavaScript(在页面的头部):

$(document).ready(function (){
    $('#contactform').submit(function(){
        var action = $(this).attr('action');
        $.post("contact.php", {
            name: $('#name').val(),
            email: $('#email').val(),
            company: $('#company').val(),
            subject: $('#subject').val(),
            message: $('#message').val()
        }, function(data,status){
            alert("status = " + status);            
            $('#contactform #submit').attr('disabled','');
            if(data=='Message sent!') $('#contactform').slideUp();
           });
           return false;
    });
});  

这是表格:

<form action="contact.php" method="post" id="contactform">
  <ol>
     <li>
        <label for="name">First Name <a href="#">*</a></label>
        <input name="name" id="name" class="text">
     </li>
     <li>
        <label for="email">Your e-mail <a href="#">*</a></label>
        <input id="email" name="email" class="text">
     </li>
     <li>
        <label for="company">Company Name</label>
        <input id="company" name="company" class="text">
     </li>
     <li>
        <label for="subject">Subject<br>
        </label>
        <input id="subject" name="subject" class="text">
     </li>
     <li>
        <label for="message">Message <a href="#">*</a></label>
        <textarea id="message" name="message" rows="6" cols="50"></textarea>
     </li>
     <li class="buttons">
        <input type="image" name="submitbtn" id="submitbtn" src="images/but_send_message.gif">
     </li>
  </ol>
</form>  

javascript 上的alert("status = " + status); 部分会弹出sucess 的状态。

更新

这是contact.php顶部的PHP部分

<?php
  if(isset($_POST["message"])){
    echo '<script>alert("some dummy text");</script>';
  };
?>  

不仅 echo 不打印任何内容,而且我无法访问已发布数据中的值。 PHPMailer 可以很好地手动分配文本到参数。

【问题讨论】:

  • 您还必须发布 PHP。您在哪里回显 POST 变量,您希望它们在哪里打印出来?
  • 看起来不错,你可以试试$('#contactform').serialize()吗?
  • 并且在Form中,没有提交按钮。如何提交表单?
  • 不用问了,放php代码查吧。
  • @Akilan - 输入类型图片有效,将提交表单。

标签: php jquery forms form-submit


【解决方案1】:

如果 $_POST 返回空数据。确保您没有任何导致此问题的 htaccess。 我曾经遇到过这个问题。我的 htaccess 总是清空帖子数据。修改 htaccess 后,我的问题解决了。

【讨论】:

  • 没有 htaccess 不匹配,因为我尝试了 Sheikh Heera 提出的解决方案,它工作正常!但无论如何感谢您提供有用的信息 (+1)
【解决方案2】:

只需尝试使用此代码发布表单并检查是否会在 contact.php 上获得 $_POST

<script type="text/javascript">

$(document).ready(function (){

    $("#submitbtn").click(function(){
        $("#contactform").attr("action" , "contact.php");
        $("#contactform").submit();


});

</script>

如果在 contact.php 中如果你得到 $_POST 则显示成功消息

<?php
  if(isset($_POST["message"])){
    echo '<script>alert("some dummy text");</script>';
  };
?> 

【讨论】:

    【解决方案3】:

    既然你问的答案是评论

    嗯,看起来不错,不过你也可以试试

    $('#contactform').serialize();
    

    为您获取所有表单值,既然您问过,确定表单已提交的更好方法是什么,在这种情况下,您可以检查submit 按钮而不是文本框或其他可以留空的表单字段,所以你可以使用

    if( isset( $_POST['submitbtn'] ) ) {
        // process the form
    }
    

    【讨论】:

      【解决方案4】:

      执行以下操作: 1) 为li类按钮的孩子的输入标签提供一个id或一个类

      2) 然后在jquery中写一段代码来处理:

      $('.inputButton').click(function(){
          var data = $('#contactform').serializeArray();
          $.each(data, function(key, field) {
              // Perform your validations over the data here
              console.log('field Name == '+field.name+', field value == '+field.value);
          });
      
      
          // Make an ajax call using this data
          $.post("contact.php", data, function(returnData) {
              // Handle your code for after form submission response
          });
      });
      

      3) 然后在 PHP 中你可以得到值:

      $name = $_POST["name"]; // and so on...
      

      希望这可以帮助您解决问题

      【讨论】:

      • 我意识到这与我建议的解决方案非常接近,但是需要在 jquery 上有这么多东西来操作表单上的提交操作吗?!!1
      • 如果需要用户定义的验证,那么这可能是客户端验证的更好情况之一,用户可以在提交页面之前验证每个数据
      【解决方案5】:

      正如Sheikh heera 在他对我的问题的评论中提到的那样,我尝试了这个:

      $(document).ready(function (){
          $('#contactform').serialize(function(){
              var action = $(this).attr('action');
              $.post("contact.php", {
                  name: $('#name').val(),
                  email: $('#email').val(),
                  company: $('#company').val(),
                  subject: $('#subject').val(),
                  message: $('#message').val()
              }, function(data,status){
                      $('#contactform #submit').attr('disabled','');
                      if(data=='Message sent!') $('#contactform').slideUp();
                });
                return false;
          });
      });
      

      现在可以正常使用了!感谢其他用户建议的替代解决方案可能适用于这种情况,但当我找到解决方案时,无需检查它们。

      【讨论】:

        【解决方案6】:

        将您的帖子值保存在变量中。例如:

        $name = $_POST["name"];
        

        您可以在脚本中回显此变量:

        var name ="<?php echo $name; ?>";
        

        【讨论】:

        • 我需要先检查是否使用isset($_POST["name"]) 设置了$_POST["name"] 并且返回false。你确定它还有机会起作用吗?
        猜你喜欢
        • 1970-01-01
        • 2019-01-19
        • 2014-07-25
        • 1970-01-01
        • 2013-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多