Php jQuery使用相同的名称发布输入,但使用不同的数组
我在一页纸上有各种各样的表格。 所有表单都通过下面的jQuery函数提交。 一切正常,但有一个特定的表单具有重复的输入名称。 事实上,在这种形式下,输入会根据请求进行克隆。 例如,这个表格表示有多少人参加一个活动。 用户可以添加任意多的人,并通过填写表单添加每个人的详细信息。 输入被动态克隆并插入表单中。 问题是jQuery以错误的方式发送它们,如下图所示,而我的php代码响应不好。事实上,它只看到一个张贴的“人”,而不是他们所有人 jquery post的示例:Php jQuery使用相同的名称发布输入,但使用不同的数组,php,jquery,Php,Jquery,我在一页纸上有各种各样的表格。 所有表单都通过下面的jQuery函数提交。 一切正常,但有一个特定的表单具有重复的输入名称。 事实上,在这种形式下,输入会根据请求进行克隆。 例如,这个表格表示有多少人参加一个活动。 用户可以添加任意多的人,并通过填写表单添加每个人的详细信息。 输入被动态克隆并插入表单中。 问题是jQuery以错误的方式发送它们,如下图所示,而我的php代码响应不好。事实上,它只看到一个张贴的“人”,而不是他们所有人 jquery post的示例: protagonist_des
protagonist_description zxcvvcbhcvbjfg
protagonist_description jfghjfghjh
protagonist_email
protagonist_email
protagonist_name zxcvzxcv
protagonist_name dfghdfgh
protagonist_phone
protagonist_phone
protagonist_role zxcvxzcv
protagonist_role hgfjgfhjhgh
protagonist_surname zcxvzxcv
protagonist_surname dfghd
protagonist_video
protagonist_video
protagonist_website
protagonist_website
PHP响应示例:
Array
(
[protagonist_name] => dfghdfgh
[protagonist_surname] => dfghd
[protagonist_role] => hgfjgfhjhgh
[protagonist_description] => jfghjfghjh
[protagonist_email] =>
[protagonist_phone] =>
[protagonist_website] =>
[protagonist_video] =>
)
正如你所见,它只是最后一次发布
以下是我的jQuery函数:
$(".save").click(function() {
$.ajax({
type: 'POST',
data: $('form[name="wizard_form"]').serialize(),
success: function() {
$('#publish').modal('show');
}
});
});
请注意,所有克隆的输入都在同一表单中。
我只能用一种形式。因此,请不要建议使用更多的克隆表单。它对我的代码不起作用
我正在寻找一种方法来正确地合并发布到PHP代码的特定数组中具有相同名称的输入
如何做到这一点?您需要在输入的名称中添加括号 例如:
<input name="my_name[]" value="david" />
<input name="my_name[]" value="john" />
<input name="my_name[]" value="francis" />
处理输入元素的数组,换句话说,定义为具有相同的元素名称。如果在最后用两个方括号定义名称,它将转换为php服务器端的数组
<input type='text' name='elmname[]' .....
<input type='text' name='elmname[]' .....
您首先需要将表单输入更改为数组,方法是在名称中添加[]
,如下所示:
<input name="protagonist_description[]" />
在这一点上,您可以循环通过如下值:
Array
(
[protagonist_name] => Array
(
[0] => zxcvzxcv,
[1] => dfghdfgh,
)
[protagonist_surname] => Array
(
[0] => zcxvzxcv,
[1] => dfghd,
)
[protagonist_role] => Array
(
[0] => zxcvxzcv,
[1] => hgfjgfhjhgh,
)
[protagonist_description] => Array
(
[0] => zxcvvcbhcvbjfg,
[1] => jfghjfghjh,
)
[protagonist_email] => Array
(
[0] => ,
[1] => ,
)
[protagonist_phone] => Array
(
[0] => ,
[1] => ,
)
[protagonist_website] => Array
(
[0] => ,
[1] => ,
)
[protagonist_video] => Array
(
[0] => ,
[1] => ,
)
)
for ($i = 0, $max = count($_POST['protagonist_name']); $i < $max; $i++) {
$first_protagonist = array(
'protagonist_name' => $_POST['protagonist_name'][$i],
'protagonist_surname' => $_POST['protagonist_surname'][$i],
// ...
);
}
只需使用方括号,您还可以为其定义一些键,例如name=“protation\u name[]”或name=“protation[name][]”@chrislondon您应该使用foreach。它比循环+计数更快。我建议你去读一读:@DavidBélanger我只数一次有什么不同吗?请注意,我将$max设置为count()
,并且再也不count()
。@chrislondon是,注意到了。但是,您使用了一个在此过程中不需要的函数。除非您需要知道一个数组中有多少个条目,count
是没有用的。如果您不需要知道,但希望在循环之后知道,那么可以执行foreach并在foreach中放入一个递增的变量。你将获得一代时间。@DavidBélanger酷!谢谢你的信息!我已将一个foreach
添加到answer@chrislondon谢谢你的理解!
for ($i = 0, $max = count($_POST['protagonist_name']); $i < $max; $i++) {
$first_protagonist = array(
'protagonist_name' => $_POST['protagonist_name'][$i],
'protagonist_surname' => $_POST['protagonist_surname'][$i],
// ...
);
}
foreach ($_POST['protagonist_name'] as $key => $val) {
$first_protagonist = array(
'protagonist_name' => $val,
'protagonist_surname' => $_POST['protagonist_surname'][$key],
'protagonist_description' => $_POST['protagonist_description'][$key],
// ...
);
}