作为个人惯例,我正在为我正在制作的个人网站编写框架。目前我正在尝试创建一种在我的网站上显示表单的通用方法。我正在使用JSON模型来对表单进行建模,然后通过PHP将其转换为HTML。我目前正试图允许的是这样的:
[type] [contact address]
[type] [contact address]
+ Add More
我知道使用像“type []”这样的表单元素名称,各种类型字段的值将作为数组发送到php。但是,在这种情况下,type
和contact address
属于一起。我知道实现这一目标的各种方法,比如循环遍历类型,然后获取相关的其他字段,但以某种方式将其转换为关联数组似乎更容易在代码中使用。
请注意,我知道实现这一目标的各种方法,但我正在努力寻求一些最佳实践。我更喜欢在PHP中这样做,因为我正在努力减少我网站上的javascript数量。
答案 0 :(得分:1)
您实际上可以构建多维数组,例如contact[id][type]
和contact[id][address]
。因此,如果您有id
,如果要添加新值,则可以是增量值,为两者提供相同的id
。 PHP会将其视为多维数组,如$_POST['contact'][1]['type'] == 'sometype, $_POST['contact'][1]['address'] == 'theaddress'
。
所以你的新表单输入如下:
<input id='someid_type_123' name='contact[123][type]' />
<input id='someid_address_123' name='contact[123][address]' />
<input id='someid_type_124' name='contact[124][type]' />
<input id='someid_address_124' name='contact[124][address]' />
然后你可以循环$_POST['contact']
:
foreach ($_POST['contact'] as $id => $values) {
echo $values['type'] . ' ' . $values['address'];
}
带示例输入的var_dump($_POST)
类似于:
array(1) {
["contact"]=>
array(2) {
[123]=>
array(2) {
["type"]=>
string(5) "type1"
["address"]=>
string(5) "addr1"
}
[124]=>
array(2) {
["type"]=>
string(5) "type2"
["address"]=>
string(5) "addr2"
}
}
}
用于在JavaScript中生成id的方法(假设您不提前知道它们)完全取决于您。您可以在1
处启动变量,并在每次单击add more
链接时将其递增。 id
的值并不重要,只要它对输入对是相同的。
// Initialize curId on page load.
var curId = 1;
addMoreLink.onclick = function() {
// append the new inputs using curId
// and then increment the value
curId++;
}
答案 1 :(得分:0)
您需要一个键将所有相关元素绑定到一起。您的系统中包含唯一用户ID或任何唯一之类的内容。所以类型的每个元素都可以是任何东西,但如果它们属于一个父元素(如用户/客户等),那么它们必须共享父对象id。我怀疑有什么更简单的