具有硬编码选择的动态下拉列表

时间:2013-08-27 22:45:07

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

我一直在网站上搜索(并通过谷歌),但我想我可能会误解我的问题。

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

    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”,文本为“其他”。此选择也应该由相同的机制(可以指定为预先选择)绑定。

[UPDATE] 因此,为了帮助解决我的情况,这里是这部分之前的代码。这是一个从另一个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

2 个答案:

答案 0 :(得分:0)

我打算把它放在这里:

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

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

  3. 这有意义吗?

答案 1 :(得分:0)

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

这样做:

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.

请注意,您不需要在第一个默认选项标签(“选择一个”选项)上指定所选属性,因为它将自动成为所选选项 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;