2013-08-27 3 views
1

Я искал на сайте (и через 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» и текст «Other». Этот выбор также должен быть связан одним и тем же механиком (где он может быть задан для предварительного выбора).

[UPDATE] Чтобы помочь с контекстом моей ситуации, вот код, который предшествует этой части. Это PHP-файл, который вызывается из другого файла PHP (такого же принципала, как div). Предложенный PHP - это форма ввода, которая используется как для ввода новых данных, так и для изменения существующих данных (и это взаимодействует с базой данных).

Сценарий знает, добавляет ли он или изменяет его на основе «entry_id», который он получает как paramater, немного как функция.

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'? 'echo" <значение опции = \ "0 \" ". ($ row-> id == $ timeinfo-> relatedbid? "selected = selected": ""). "> Другое" '? – ChunkyBaconPlz

+0

Я не знал, что это возможно. Позвольте мне попробовать это и сразу обновить нить. – guihamel

+0

Просто FYI, вы не получили объект '$ row', прежде чем вы назовете' while', поэтому '$ row' будет неопределенным, и вам понадобится другой способ определить, является ли опция« Другой » для выбора. – 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. 

Обратите внимание, что вам не нужно, чтобы указать выбранный атрибут на первом, по умолчанию, вариант тега («Выбрать один» вариант), так как он будет автоматически выбран опция 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; 
+0

Спасибо за объяснение! :) – guihamel

0

Я собираюсь поставить это здесь:

  1. Просто потому, что значение «0» не означает, он будет первым в списке; он будет первым, потому что он первый в HTML.

  2. В элементе формы <select> со всеми его параметрами должен быть только один вариант, который является selected. Если это правда, и вы тестируете все параметры OTHER, чем «другие», то ни один из ваших <options> не получит атрибут selected, если этот параметр, по сути, «другой». Итак, ваш первый вариант («другой») будет выбран, потому что он первый.

Имеет ли это значение?

+0

Я должен быть честным с тобой, №2 немного сбивает меня с толку. # 1 понятен и имеет общий смысл. ----------- Что касается № 2, мне действительно нужно протестировать его и наткнуться на это. Еще раз большое вам спасибо за время и ответы. :) – guihamel

+0

Второй пункт CBP состоит в том, что «другой» может быть выбранным вариантом (поскольку он является первым выбором, а пользователь не выбрал другой вариант). Если вы тестируете все, кроме EXCEPT «other», то что происходит в этом случае (где пользователь не выбрал выбор, поэтому опция «другой» - тот, который вы не тестируете, - выбранная). – gibberish

Смежные вопросы