0

我有一些 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]'].' ||| ';

我该怎么做?

4

3 回答 3

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

这回答了你的问题吗?

于 2013-08-04T22:23:39.763 回答
1

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

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

for ($i = 0, $l = count($titles); $i < $l; $i++) {
  $video .= "{$titles[$i} >> {$video_ids[$i]} |||";
}
于 2013-08-04T22:17:31.987 回答
0

假设titles 的数量比video_ids 的数量多,也许这样的事情可以为您指明正确的方向:

// 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;
于 2013-08-04T22:18:16.500 回答