2

主要作为个人实践,我正在为我正在开发的个人网站编写框架。目前我正在尝试创建一种在我的网站上显示表单的通用方式。我正在使用 JSON 模型对表单进行建模,该表单由 PHP 转换为 HTML。我目前试图允许的是这样的:

[type] [contact address]
[type] [contact address]
+ Add More

我知道对于像“type[]”这样的表单元素名称,各种类型字段的值作为数组发送到 php。但是,在这种情况下,atype和 acontact address属于一起。我知道实现这一点的各种方法,例如循环类型,然后获取相关的其他字段,但是以某种方式将其转换为关联数组似乎更容易在代码中使用。

请注意,我知道实现这一目标的各种方法,但我正在尝试一些最佳实践。我更喜欢在 PHP 中执行此操作,因为我试图尽量减少我网站上的 javascript 数量。

4

2 回答 2

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'];
}

with 示例输入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++;
}
于 2012-11-24T15:40:14.193 回答
0

您需要一个键来将所有相关元素结合在一起。像唯一用户 ID 或系统中唯一的任何东西。因此,每个类型的元素都可以是任何东西,但如果它们属于一个父元素(如用户/客户等),那么它们必须共享父对象 ID。我怀疑有什么更简单的

于 2012-11-24T15:39:19.223 回答