2013-08-27 23 views
1

我一直在网站上搜索(并通过谷歌),但我想我可能会误解我的问题。硬编码选择的动态下拉框

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

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

+0

为什么不直接在'while'语句之前回显select选项? 'echo“”'? – ChunkyBaconPlz

+0

我不知道这是可能的。让我试试这个,然后更新线程。 – guihamel

+0

只是FYI,在调用'while'之前,您还没有获取'$ row'对象,所以'$ row'将会是未定义的,您需要另一种方法来确定“Other”选项是否为被选中。 – ChunkyBaconPlz

回答

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. 

请注意,您不必指定第一,默认情况下,选择标签选择属性(“选择一个”选项),因为它会自动选择选项如果没有其他选择。我相信这是你想要的。


但是我会做的是将所有值赋给变量,然后回显变量,以便一次显示所有内容。像这样:

$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; 
+0

非常感谢您的解释! :) – guihamel

0

我要在这里把这个:

  1. 只是因为值为“0”并不意味着它将成为名单中的第一个;它会是第一个,因为它是第一个在HTML中。

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

这有道理吗?

+0

我必须诚实地对待你,#2对我来说有点困惑。 #1是清楚的并且是完全意义上的。 ----------- 就#2而言,我真的需要测试一下,并且在这方面让我感到头疼。再次,非常感谢你的时间和答案。 :) – guihamel

+0

CBP的第二点是“其他”可能是选择的选项(因为它是第一选择,用户没有选择不同的选项)。如果您正在测试除“其他”之外的所有内容,那么在这种情况下会发生什么情况(用户未选择某个选项,因此“其他”选项 - 您未测试的选项)是选定的选项。 – gibberish