php - 获取相关表单字段的列表作为关联数组

标签 php javascript forms

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

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

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

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

最佳答案

您实际上可以构建多维数组,例如 contact[id][type]contact[id][address]。因此,如果您有一个 id,如果您要添加新的,它可能是一个增量值,请为两者提供相同的 id。 PHP 会将其视为多维数组,如 $_POST['contact'][1]['type'] == 'sometype, $_POST['contact'][1]['address'] == '地址' .

所以你的新表单输入看起来像:

<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++;
}

关于php - 获取相关表单字段的列表作为关联数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13542692/

相关文章:

php - shell输出到网络

javascript - 如何在 Laravel 中通过 Sweet-alert 确认后删除...?

javascript - 我们如何通过 jquery 中的 .attr() 更改 onclick 函数?

html - 水平和垂直居中表格

c# - 获取 checkedCheckList (Form1) 的 GetItemCheckState (在 Form2)

php - 如何在视频上传时创建缩略图? [php/codeigniter]

php - 如何从 PHP 7 中的嵌套包含文件中跳出 while 循环?

javascript - 仅当先前的弹出窗口关闭时才会显示多个 JavaScript 超时弹出窗口

javascript - typescript crypto-js 如何使用 sha256 算法和 key 对数据进行哈希处理

php - 使用表单文本输入类型上传文件