动态添加的表单元素将发布到PHP但无法访问它们

时间:2013-05-21 22:57:59

标签: php javascript jquery post

我通过AJAX将动态添加的表单元素发布到PHP。

我可以看到序列化的表单数据被发布到php,但是当我尝试访问其中的数据时,一些字段出现NULL,即下面的PHP中的var_dump显示为NULL。

这是添加动态元素的Jquery:

$(function(){
var count=0;
    $('#more_edu').click(function(){
    count ++;
    $('#education_add').append('<br><br><label>University/Institution: </label><input type="text"  class="searchbox" id="edu_inst'+count+'" name="edu_inst[]" maxlength="200" value="">);
    event.preventDefault();
    });

});

和Jquery发布到php:

function profileSub(){
var myform;
        event.preventDefault();
        myform = $('form').serialize();

     $.ajax({
  type: 'POST',
  url: 'tutorprofileinput.php',
  data: {"form": myform},

success:function(data, response, xhr){
 console.log(response); 
   console.log(data); 
   console.log(xhr);

  },
  error:function(){
    // failed request; give feedback to user
    $('#ajax-panel').html('<p class="error"><strong>Oops!</strong> Try that again in a few moments.</p>');
  }
});
}

这是原始形式:

<form id="tutor_profile_input" onsubmit="return false;">
<label>University/Institution: </label>
<input type="text"  class="searchbox" id="edu_inst" name="edu_inst[]" maxlength="200" value=""> </br></br>
<label>Subject:</label> 
<input type="text" class="searchbox" id="edu_subj" name="edu_subject[]" maxlength="200" value=""></br></br>
<label> Level  </label>
<select id="edu_level" name="edu_level[]">

和PHP本身:

<?php
if (isset($_POST['form'])){
$form = $_POST['form'];
var_dump($_POST["edu_inst"]);?>

这是整个$ _POST的var转储:

位置=安培;价格=安培; tutorname =安培; edu_inst%5B%5D = Uni1&安培; edu_subject%5B%5D = subje1&安培; edu_level%5B%5D = BA&安培; edu_inst%5B%5D = UNI2&安培; edu_subject%5B %5D = subj2&安培; edu_level%5B%5D = BA&安培;生物=%09&安培; EXPER

2 个答案:

答案 0 :(得分:0)

您发布的表单的ID为#tutor_profile_input,其中您在jQuery函数中附加的是#education_add - 除非我误解了?

否则我会考虑在AJAX请求中指定一个更具体的目标 - 你现在只是在$('form')定位,这可能是页面上的任何形式..

答案 1 :(得分:0)

已经发现了我想要分享的答案--Jquery serialize()函数将数据编码为一个字符串,然后将其作为一个带有“form”键的数组发布到PHP。

为了在php中处理这个问题,我必须首先使用PHP中的urldecode函数从名称属性转换字符串编码元素(%5B%5D)。这是因为这些中可能有多个值,因此它们在表单中声明为数组(“name =”edu_insts []“)。然后使用parse_str将字符串拆分为数组。

<?php
$querystring = $_POST['form'];
$querystring = urldecode($querystring);
parse_str($querystring, $params);
$insts = $params['edu_inst'];
echo $insts[0]."<br>";
echo $insts[1]."<br>";
?>

这将创建一个名为$ params的数组,其中的键对应于表单名称属性。

请注意,如果您在同一个名称中有多个值,那么每个值都将放在一个数组本身中,因此使用上面的文本您将获得$ insts [0] = University 1 和$ insts [1] =大学2等。

希望这可以帮助任何有同样问题的人。