jQuery post输入具有相同的名称但在不同的数组中

时间:2013-06-30 14:20:07

标签: php jquery

我在一个页面中有各种形式。 所有表单都由以下jQuery函数提交。 一切都很好,但有一个具有重复输入名称的特定表单。 事实上,在这种形式下,输入会根据请求进行克隆。 例如,此表单表示参加活动的人数。 用户可以根据需要添加任意数量的人,并通过填写表单添加每个人的详细信息。 输入即时克隆并插入表单内。 问题是jQuery以错误的方式发送它们,如下所示,并且我的php代码响应不好。事实上,它只是看到一个发布的“人”而不是所有人。

jquery帖子的例子:

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代码的特定数组中使用相同名称的输入。

怎么做?

3 个答案:

答案 0 :(得分:2)

首先需要将表单输入更改为数组,方法是将[]添加到名称中,如下所示:

<input name="protagonist_description[]" />

然后在你的PHP中它将如下所示:

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],
        // ...
    );
}

Per David的建议,如果您愿意,这里是foreach的代码:

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],
        // ...
    );
}

答案 1 :(得分:0)

您需要在输入的名称中添加括号。

示例:

<input name="my_name[]" value="david" />
<input name="my_name[]" value="john" />
<input name="my_name[]" value="francis" />

$_POST['my_name']将是一个包含所有结果的数组。

Array
(
    [my_name] => Array
    (
                    [0] => david
                    [1] => john
                    [2] => francis
    )
)

答案 2 :(得分:0)

处理输入元素的数组,换句话说,定义为具有相同的元素名称。如果你最后用两个方括号定义名称,它将转换为服务器端的数组,用于php。

 <input type='text' name='elmname[]' .....
 <input type='text' name='elmname[]' .....

如果您提交包含这些元素的表单,然后在php端,您将看到$_POST['elmname']将是一个数组