Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态添加的表单元素已发布到PHP,但无法访问它们_Php_Javascript_Jquery_Post - Fatal编程技术网

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

动态添加的表单元素已发布到PHP,但无法访问它们,php,javascript,jquery,post,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><labe

我正在通过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();
    });

});
$(函数(){
var计数=0;
$(“#更多教育”)。单击(函数(){
计数++;
$(“#教育添加”)。追加(“

大学/机构:); 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>');
  }
});
}
function profileSub(){
var-myform;
event.preventDefault();
myform=$('form')。序列化();
$.ajax({
键入:“POST”,
url:'tutorprofileinput.php',
数据:{“形式”:myform},
成功:功能(数据、响应、xhr){
控制台日志(响应);
控制台日志(数据);
console.log(xhr);
},
错误:函数(){
//请求失败;向用户提供反馈
$('ajax panel').html('p class=“error”>Oops!请稍后再试。

'); } }); }
这是原始形式:

<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"]);?>

这是整个$u POST的var转储:


地点=&price=&tutorname=&edu_inst%5B%5D=Uni1&edu subject%5B%5D=subject1&edu level%5B%5D=BA&edu inst%5B%5D=uni2&edu subject%5B%5D=subject2&edu level%5B%5D=BA&bio=%09&exper

您发布的表单的ID为
,您在jQuery函数中附加的是
#education\u add
——除非我误解了


否则,我会考虑在AJAX请求中指定一个更具体的目标-您现在的目标是
$('form')
,它可以是页面上的任何表单

已经找到了答案,我想与大家分享一下——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]=1 和$insts[1]=大学2等


希望这对有同样问题的人有所帮助。

Hi christian-感谢您的输入!实际上,页面上只有一个表单,因此我认为针对唯一一个表单可以最大限度地减少出错的机会-尽管现在您提到了这一点-此页面将包含在另一个表单页面中,因此将对其进行调整以确保安全。#eduacation\u add是一个div包含与教育相关的形式元素-任何其他想法都会非常感激-整天都在用一双新的眼睛看着var转储,有
edu_inst%5B%5D=Uni1
edu_inst%5B%5D=uni2
-所以看起来这个值似乎是通过PHP得到的?大概Uni1就是您输入的值原始形式的d,Uni2是您在Javascript调用附加的字段中输入的值,否?您得到的jQuery也缺少一个结尾
'
-它应该是
maxlength=“200”value=“”>);
不是
maxlength=“200”value=”">);-可能这只是上面代码中的一个输入错误,否则Javascript将无效,字段将不会追加。-这是正确的-第一个输入值为Uni1,第二个输入值为Uni2-但我似乎无法在PHP中找到这些值,这是令人沮丧的事情-我还在url解码器中检查了它,并且%5B%5D对应于[]它来自作为数组的名称声明(我需要它,因为可能有多个字符串具有相同的name属性。jquery只是一种类型,因为字段是追加的,没有问题