使用php在表单中插入未定义数量的字段

时间:2013-08-04 22:03:57

标签: php

我有一些JS允许我在表单中添加尽可能多的字段,然后在提交时,必须保存在这样的数据库中:

title[1] >> video_id[1] ||| title[2] >> video_id[2] ||| ...

我需要的是一个PHP代码,它允许我获取所有这些并将它们组合在一起。

(请注意,值的数量可以在1到100之间),我需要将所有这些值一起收集在一个字符串中,无论表单中有多少个字段。我目前的代码无法实现这一点,因为它的数量有限:

$video = $_POST['title[1]'].' >> '.$_POST['video_id[1]'].' ||| '.$_POST['title[2]'].' >> '.$_POST['video_id[2]'].' ||| '.$_POST['title[3]'].' >> '.$_POST['video_id[3]'].' ||| ';

我该怎么做?

3 个答案:

答案 0 :(得分:2)

我知道你在问一个关于如何将多维数据结构从前端传递到PHP后端的问题。你至少有两个选择。

选项号。 1 - 使用多维表格数据

PHP能够解释以下结构(为简单起见,每行一个参数):

items[0][title]=Movie1
items[0][video_id]=3123
items[1][title]=Movie2
items[1][video_id]=5422

当作为POST正文传递或在GET个查询参数中传递时,它将被解释为传递结构将是:

$data = array(
    'items' => array(
        array(
            'title' => 'Movie1',
            'video_id' => '3123',
        ),
        array(
            'title' => 'Movie2',
            'video_id' => '5422',
        ),
    ),
);

除了您可以通过执行$data = $_GET(作为查询参数传递时)或$data = $_POST(传递请求正文时)来检索它。这是一个非常简单的例子。

要从HTML传递它,只需正确命名字段(在我给出的第一个列表中,字段的名称位于“=”的左侧,值在右侧)。因此,为了传递上面的示例值,表单看起来像:

<form action="/some/url" method="post">
    <input name="items[0][title]" value="Movie1" />
    <input name="items[0][video_id]" value="3123" />
    <input name="items[1][title]" value="Movie2" />
    <input name="items[1][video_id]" value="5422" />
</form>

基于类似的模式,您可以创建具有隐藏字段的表单(因此用户将看不到它们),并且您可以以类似的方式构造名称(因此将维护数据结构)。

选项号。 2 - 使用JSON

JSON是非常流行的格式,如果您能够将文本传递到后端,则可以序列化任何原语数据(意思是:标准对象,数组,字符串,布尔值,整数,浮点数和null并在后端解码它:

$data = json_decode($_POST['data']);  // assuming 'data' key contains JSON string

这回答了你的问题吗?

答案 1 :(得分:1)

我相信这应该有效。首先,我们创建数组,一个用于title,一个用于video_id。然后,我们使用>>|||将两者连接在一起。

$titles = $_POST['title'];
$video_ids = $_POST['video_id'];
$video = "";

for ($i = 0, $l = count($titles); $i < $l; $i++) {
  $video .= "{$titles[$i} >> {$video_ids[$i]} |||";
}

答案 2 :(得分:0)

假设title的{​​{1}}次数与video_id次数相同,可能这样的事情可能会指向正确的方向:

// Count the number of elements there are in the form
// (you want to do this outside of the for loop so it doesn't
// repeat the calculation each iteration)
$elementCount = count($_POST['title']);
$video = '';

for ($i = 1; $i <= $elementCount; $i++) {
   // Concatenate $_POST['title[i]'] >> $_POST['video_id[i]'] |||
   // to $video
   $video .= $_POST['title[' . $i . ']']    . ' >> '
           . $_POST['video_id[' . $i . ']'] . ' ||| ';
}

echo $video;