【问题标题】:How to distinguish between two multiple selection lists with same name如何区分两个同名的多选列表
【发布时间】:2013-03-15 10:32:09
【问题描述】:

对于我正在构建的系统,我需要查看哪些选项来自第一个列表(通过 POST 请求),哪些选项来自第二个列表。

<form method="post">
    <select name="cars[]" multiple>
        <option selected>test</option>
        <option selected>test2</option>
        <option>test3</option>
        <option>test4</option>
    </select>
    <select name="cars[]" multiple>
        <option>hai</option>
        <option>hai2</option>
        <option selected>hai3</option>
        <option selected>hai4</option>
    </select>
    <input type="submit">
</form>

现在他们是这样进来的:

Array
(
    [cars] => Array
        (
            [0] => test
            [1] => test2
            [2] => hai3
            [3] => hai4
        )
)

实际上,我想检索除“haiX”选项之外的“testX”选项。现在我看不出哪个来自第一个列表,哪个来自第二个。当然,我知道我也可以使第二个列表的名称与第一个列表的名称不同,但我想这样做是有充分理由的。

【问题讨论】:

  • 您不能为第二个字段使用不同的唯一名称吗?例如cars[]type[] ?
  • 就像我说的,我有充分的理由希望它具有相同的名称。或者必须有其他方法可以在页面上放置未指定数量的多选列表并轻松获取它们使用 PHP。
  • 您可以使用多种形式吗?例如form id=1 name=1 select=name[] ... form id=2 name=2 select=name[]
  • 不确定你有什么理由在同一个表单下有重复的名字,这会阻碍你在不添加隐藏值的情况下完成的工作选择选择值并对帖子进行更多解析,例如option value=frm1|value1 ... option value=frm2|value1

标签: php html forms post


【解决方案1】:

通过以下形式创建多维数组来划分类别:

<form method="post">
    <select name="cars[0][]" multiple>
        <option selected>test</option>
        <option selected>test2</option>
        <option>test3</option>
        <option>test4</option>
    </select>
    <select name="cars[1][]" multiple>
        <option>hai</option>
        <option>hai2</option>
        <option selected>hai3</option>
        <option selected>hai4</option>
    </select>
    <input type="submit">
</form>

然后像这样读取它:第一组为 $_POST['cars'][0],第二组为 $_POST['cars'][1]

【讨论】:

  • 哈哈.. 什么鬼。这行得通!我尝试了汽车[0] 和汽车[1],但显然需要那些额外的[]。关于那些唯一的名称^^:在这种情况下,这不是问题,因为我可以让 PHP 遍历 $_POST['cars'] 并忽略数组键。
  • 如果您对它的工作原理感到困惑,您还可以像这样设置数组:
【解决方案2】:

我做了这个:

<?php

    if (isset($_POST['cars']))
    {
      $test = array();
      $hai = array();

      $lista = $_POST['cars'];
      foreach ($lista as $key ) {
          if (substr($key,0,1)=="t")
          {
            $test[] = $key;
          }
          else
          {
            $hai[] = $key;
          }
      }
    }
    var_dump($test);
    var_dump($hai);
    ?>


    <form method="post">
        <select name="cars[]" multiple>
            <option selected>test</option>
            <option selected>test2</option>
            <option>test3</option>
            <option>test4</option>
        </select>
        <select name="cars[]" multiple>
            <option>hai</option>
            <option>hai2</option>
            <option selected>hai3</option>
            <option selected>hai4</option>
        </select>
        <input type="submit">
    </form>

在本地主机上测试。

感谢 :)

【讨论】:

  • 不,这仅适用于选项名称在每个列表中具有不同开头的情况,但情况并非如此(仅在我的演示中)。
  • 很好的答案@Ttony21 ....这是我第一次看到这样的东西....我也测试过,就像一个魅力 xD
【解决方案3】:

这可以通过为每个选择列表使用隐藏字段(输入)来完成。您可以根据需要命名它们,这就是如何知道的。

【讨论】:

  • 是的,这是一个非常有效的解决方案。将其标记为答案,直到出现更好的结果!如果您还给这些隐藏字段一个数组名称 (hiddenName[]),您可以通过一个 hiddenName POST 变量获取列表的所有名称。
【解决方案4】:

您应该能够像这样检索它们:

$_POST['cars'][0] 指的是“测试”集

$_POST['cars'][1]指的是“hai”集

【讨论】:

  • 我不相信@Ttony21 是正确的,它是带有 x 个项目的单个数组汽车,而不是多维数组
  • 哦,我想我理解这里的问题,由于 'multiple' 属性。
  • @dirt 不,我检查了我的代码,它确实返回了值,但问题是她允许多项选择,因此数据不会在数组中划分
  • 对,$_POST[0-3] 无法判断它来自哪个选择(不假设订单),并且 OP 想知道它来自哪个选择。
  • 添加了一个我测试过的新答案。工作正常,但我不确定它是否符合规格。
猜你喜欢
  • 1970-01-01
  • 2010-11-30
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
  • 1970-01-01
相关资源
最近更新 更多