【问题标题】:How to post two values in an option field?如何在选项字段中发布两个值?
【发布时间】:2011-12-23 01:15:39
【问题描述】:

我想在一个下拉选项中发布两个值,但我不确定最好的方法。

下拉列表从外部服务中提取数据。该数据是“id”和“name”。

当我在下拉列表中选择一个选项然后按提交时,我希望发布“id”和“name”。

我的代码如下所示:

<select name="data">
<option>Select a name</option>
<?php foreach($names as $name): ?>
    <option value="<?php echo $name['id']);?>">
       <?php echo $name['name']);?>
    </option>               
<?php endforeach; ?>
</select>

我尝试输入一个隐藏的输入字段,但这并没有呈现出下拉列表(相反它只是创建了一个列表)。

我在其他地方同时使用了 id 和 name,所以我不想只发布 id 然后必须再次获取名称,因此我想同时发布它们。

有什么建议吗?

【问题讨论】:

  • 我认为您可以在选择之外创建一个隐藏输入列表。

标签: php html post


【解决方案1】:

您不能发布两个值,除非它们都出现在value 属性中。您可以将两者都放入,用逗号或连字符分隔,explode() 在 PHP 中将它们分开:

// Place both values into the value attribute, separated by "-"
<option value="<?php echo $name['id'] . "-" . $name['name']);?>">
   <?php echo $name['name']);?>
</option>      

用 PHP 接收它们

// split the contents of $_POST['data'] on a hyphen, returning at most two items
list($data_id, $data_name) = explode("-", $_POST['data'], 2);

echo "id: $data_id, name: $data_name";

【讨论】:

    【解决方案2】:

    您可以添加一个名为“id”的隐藏字段,然后将 onchange 事件侦听器绑定到&lt;select&gt;。在 onchange 函数中,获取&lt;select&gt; 的值并将其分配给“id”字段。

    <form>
    <select name="name" onchange="document.getElementById('id').value=this.value">
      <!--
        ...
        options
        ...
      -->
    </select>
    <input type="hidden" name="id" id="id" />
    <input type="submit" />
    </form>
    

    【讨论】:

      【解决方案3】:

      你可以输出如下内容:

      <option value="<?php echo $name['id']."_".$name['name'];?>">
      

      然后在处理完表单数据后使用preg_splitexplode将两者分开。

      【讨论】:

        【解决方案4】:

        这样做的唯一方法是在单个选项的值中包含两条信息。只需使用如下代码,然后当您取回值时,在第一个下划线处拆分字符串以分离出值。

        <select name="data">
        <option>Select a name</option>
        <?php foreach($names as $name): ?>
            <option value="<?php echo $name['id'] . "_" . $name['name']);?>">
               <?php echo $name['name']);?>
            </option>               
        <?php endforeach; ?>
        </select>
        

        另外,您可以只在表单中保留 ID,然后在用户提交表单时再次查找该 ID。

        【讨论】:

          【解决方案5】:

          您可以创建与选项一样多的隐藏输入,每个选项都有一个选项值的名称。输入的值是选项的内容。在第二个脚本中,您可以查找下拉值,然后使用该名称获取隐藏输入的值。

          【讨论】:

            【解决方案6】:

            我们可以通过data属性传递,并且可以在js中访问,

            <option value="<?php echo $name['id']);?>" data-name="<?php echo $name['name']);?>">One</OPTION>
            
            var name = $(this).find(':selected').data('name');
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-11-13
              • 1970-01-01
              • 2020-04-08
              • 1970-01-01
              • 2020-04-26
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多