【问题标题】:Dynamic dropdown with hardcoded choice带有硬编码选项的动态下拉菜单
【发布时间】:2013-08-30 20:45:37
【问题描述】:

我一直在该网站上搜索(并通过 Google),但我想我的问题可能表述错误。

这是我的情况。我有这个动态填充的下拉列表(它正在工作),在某些情况下,它可以接收一个值来显示特定选项。

    echo "<td><select id='bids_id' class='ui-widget-content ui-corner-all normalselect' style='width: 150px'>";
    $sql = "SELECT
                `bids`.`id`,
                `bids`.`name`
            FROM
                `bids`
                Inner Join `bids_primes` ON `bids`.`id` = `bids_primes`.`bid_id`
            WHERE
                `bids_primes`.`tid` = '". $db->real_escape_string($_SESSION['Current_TID']) ."'
            ";
    $querybids = $db->query($sql);
while($row = $querybids->fetch_object()) {
    echo "<option value='{$row->id}' ". ($row->id == $timeinfo->relatedbid ? "selected=selected" : "") .">{$row->name}</option>";
}

现在我唯一尝试做的事情是添加一个“硬编码”选项,其值为“0”,文本为“其他”。此选择也应受相同机制的约束(可以指定为预先选择)。

[更新] 因此,为了帮助了解我的情况,这里是这部分之前的代码。这是从另一个 PHP 文件(与 div 相同的主体)中调用的 PHP 文件。有问题的 PHP 是一种输入表单,用于新数据输入和现有数据的修改(并与数据库交互)。

脚本根据它作为参数接收的“entry_id”知道它是添加还是修改,有点像函数。

    if(isset($_REQUEST['entry']) && ($_REQUEST['entry'] > 0)) {
    $sql = "SELECT
                `cap_plan`.`entryid`,
                `cap_plan`.`startdate`,
                `bids`.`name`,
                `cap_plan`.`duration`,
                `cap_plan`.`description`,
                `cap_plan`.`relatedbid`
            FROM
                `cap_plan`
            LEFT JOIN
                `bids` ON `cap_plan`.`relatedbid` = `bids`.`id`
            WHERE
                `cap_plan`.`entryid` = '". $db->real_escape_string($_REQUEST['entry']) ."'
            ";
    $timeinfo = $db->query($sql)->fetch_object();
} 
    else {
        $timeinfo = new StdClass();
        $timeinfo->entryid = 0;
        $timeinfo->employee = $_SESSION['name'];
        $timeinfo->startdate = date("Y-m-d");
        $timeinfo->duration = "";
        $timeinfo->description = "";
        $timeinfo->relatedbid = "0";
    }

这里有一个截图来帮助说明这一切: http://i.imgur.com/EYcXfO9.png

【问题讨论】:

  • 为什么不在while 语句之前回显选择选项? echo "&lt;option value=\"0\" ". ($row-&gt;id == $timeinfo-&gt;relatedbid ? "selected=selected" : "") ."&gt;Other&lt;/option&gt;"?
  • 我不知道这是可能的。让我试试这个并在之后更新线程。
  • 仅供参考,在调用 while 之前,您还没有获取 $row 对象,因此 $row 将是未定义的,您需要另一种方法来确定将选择“其他”选项。
  • 为第一个解决方案点赞,因为它解决了我的问题。现在,对于最后的提示,我将不得不四处玩耍并做一些研究,以确保它能够正常工作。您是否建议我使用类似于此的格式: $row = $querybids->fetch_object(); echo "id == $timeinfo->relatedbid ? "selected=selected" : "") .">其他"; while($row) { echo ""; }
  • 我感觉您对 PHP/MySQL 的交互方式没有最好的把握,而且您正在抓住稻草;您只是获取返回的第一行,这可能是也可能不是您想要的。老实说,我不知道你到底想在这里做什么。您只需要一种方法来判断是否要选择“其他”选项。也许是一个 if 语句,它检测到您的 while 循环中的值 0 并设置一个标志?

标签: php mysql dynamic drop-down-menu hardcoded


【解决方案1】:

如果我正确理解了您的问题,您所要做的就是在列表顶部,在动态生成的选项之前插入一个硬编码选项。

这样做:

echo "<td><select id='bids_id' class='ui-widget-content ui-corner-all normalselect' style='width: 150px'>";
echo "<option value = '0'>Choose One</option>";
$sql = "SELECT etc etc etc
etc.

请注意,您不需要在第一个默认选项标记(“Choose One”选项)上指定 selected 属性,因为它会自动成为选定选项 IF选择。我相信这就是您想要的。


不过,我要做的是将所有值分配给一个变量,然后回显该变量,以便所有内容都同时出现。像这样:

$opt = "<td><select id='bids_id' class='ui-widget-content ui-corner-all normalselect' style='width: 150px'>";
$opt .= "<option value = '0'>Choose One</option>";

$sql = "SELECT etc etc etc";
$querybids = $db->query($sql);

while($row = $querybids->fetch_object()) {
    $opt .= "<option value='{$row->id}' ". ($row->id == $timeinfo->relatedbid ? "selected=selected" : "") .">{$row->name}</option>";
}

echo $opt;

【讨论】:

  • 非常感谢您的解释! :)
【解决方案2】:

我要把这个放在这里:

  1. 仅仅因为值为“0”并不意味着它将是列表中的第一个;它将是第一个,因为它在 HTML 中是第一个。

  2. 在带有所有选项的&lt;select&gt; 表单元素中,应该只有一个选项selected。如果这是真的,并且您正在测试除“其他”之外的所有选项,那么如果选项实际上是“其他”,那么您的任何&lt;options&gt; 都不会获得selected 属性。因此,您的第一个选项(“其他”)将被选中,因为它是第一个。

这有意义吗?

【讨论】:

  • 老实说,#2 让我有点困惑。 #1很清楚并且完全有意义。 ------------ 就#2 而言,我真的需要对其进行测试并对此进行测试。再次,非常感谢您的时间和回答。 :)
  • CBP 的第二点是“其他”可能是选定的选项(因为它是第一选择,用户没有选择其他选项)。如果您正在测试除“其他”之外的所有内容,那么在这种情况下会发生什么(用户尚未选择选项,因此“其他”选项 - 您没有测试的选项 - 是选定的选项)。
猜你喜欢
  • 1970-01-01
  • 2016-01-06
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多