我有一些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]'].' ||| ';
我该怎么做?
答案 0 :(得分:2)
我知道你在问一个关于如何将多维数据结构从前端传递到PHP后端的问题。你至少有两个选择。
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>
基于类似的模式,您可以创建具有隐藏字段的表单(因此用户将看不到它们),并且您可以以类似的方式构造名称(因此将维护数据结构)。
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;