Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.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 jQuery使用相同的名称发布输入,但使用不同的数组_Php_Jquery - Fatal编程技术网

Php jQuery使用相同的名称发布输入,但使用不同的数组

Php jQuery使用相同的名称发布输入,但使用不同的数组,php,jquery,Php,Jquery,我在一页纸上有各种各样的表格。 所有表单都通过下面的jQuery函数提交。 一切正常,但有一个特定的表单具有重复的输入名称。 事实上,在这种形式下,输入会根据请求进行克隆。 例如,这个表格表示有多少人参加一个活动。 用户可以添加任意多的人,并通过填写表单添加每个人的详细信息。 输入被动态克隆并插入表单中。 问题是jQuery以错误的方式发送它们,如下图所示,而我的php代码响应不好。事实上,它只看到一个张贴的“人”,而不是他们所有人 jquery post的示例: protagonist_des

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

jquery post的示例:

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