通过AJAX将表单数据传递给mySQL

时间:2011-07-22 00:57:12

标签: php forms jquery

我正在使用JavaScript和AJAX将表单数据发送到php处理文件,然后填充SQL数据库而不刷新初始表单页面。

php / SQL连接正常,但表单数据没有正确发送。

有两个字段:名为“choice”的广播组和名为“comments”的文本字段。填充数据库时,选择字段始终为“是”(3个单选按钮中的第一个),并且注释字段始终为空白。我认为问题必须是构建数据字符串的方式,但是几小时的修补都没有带来成功。

这是html表单

<form id="paPoll">
  <label><input type="radio" name="RadioGroup1" value="yes" id="choice1">Yes</label>
  <label><input type="radio" name="RadioGroup1" value="no" id="choice2">No</label>
  <label><input type="radio" name="RadioGroup1" value="dont_know" id="choice3">I Don't Know</label>
  <label for="comments">Comments?</label><input name="comments" type="text" id="comments" size="25" maxlength="60">   
  <input type="button" name="form_process" id="form_process" value="submit" onClick="$.fn.removeMbMenu($.mbMenu.options.actualOpenedMenu,true);" />
</form>

这是Javascript / AJAX函数

<script type="text/javascript">
    $(function() {
      $("#form_process").click(function() {
        var choice = $("#choice").val();
        var comments = $("#comments").val();
        var dataString = 'choice='+ choice + '&comments=' + comments;

        $.ajax({
          type: "POST",
          url: "**ABSOLUTE URL TO PROCESSOR**",
          data: dataString
        });
      });
    });
</script>

这是php处理器

<?php
$choice = $_POST ['choice'];
$comments = $_POST ['comments'];
//perform insert
    $query = mysql_query("INSERT INTO paPoll 
    (choice, comments)      
    VALUES  
    ('$choice', '$comments')");         
        if (!query) {
           die("Database query failed: " . mysql_error());
        }
?>

想法或建议?

我在这里发现了一个非常相似的问题,但这个帖子已经有3年了。用户建议了这个

//Instead of using
data: dataString
//use
data : {param: value, param2: value2}

但我不确定他是如何以及以何种格式获取参数值。

谢谢你 -syllable

2 个答案:

答案 0 :(得分:1)

如果是我,我会使用Form plugin让自己变得更轻松。它已经有了ajaxSubmit个函数集,可以轻松地对表单进行调整。 IT还有一个方便的formSerialize函数,它将序列化ajax提交的表单或附加到链接的查询字符串。 : - )

这说没有插件并使用现有代码的更简单方法:

$("#form_process").click(function() {

  $.ajax({
    type: "POST",
    url: "**ABSOLUTE URL TO PROCESSOR**",
    data: {
      'choice': $("input[@name=RadioGroup1]:checked").val(), 
      'comments':  $("#comments").val()
    }
  });

});

无论哪种方式,您还需要更改所有无线电输入以具有唯一ID(或根本没有ID)...您无法使用所需的所有id属性在文档中具有唯一值的相同ID。

答案 1 :(得分:0)

几个星期前我遇到了同样的问题,我只是尝试使用像这样的老方法

<script type="text/javascript">
    $(function() {
      $("#form_process").click(function() {
        //$("#choice").val(); //you cannot use the same id for more than 1 tag
        var choice = 0; 
             if(document.getElementById("choice1").checked) choice='Yes';
        else if(document.getElementById("choice2").checked) choice='No';
        else if(document.getElementById("choice3").checked) choice='Dont Know';

        var comments = document.getElementById('comments').value; //$("#comments").val();
        var dataString = 'choice='+ choice + '&comments=' + comments;

        $.ajax({
          type: "POST",
          url: "**ABSOLUTE URL TO PROCESSOR**",
          data: dataString
        });
     });
   });
</script>

我真的不知道,我认为这不是最好的方法,但这对我有用:)