Динамическое выпадающее меню с жестко заданным выбором

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

[ОБНОВЛЕНИЕ] Итак, чтобы помочь с контекстом моей ситуации, вот код, который предшествует этой части. Это PHP-файл, который вызывается из другого PHP-файла (тот же принципал, что и у div). Рассматриваемый 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 ответа

Решение

Если я правильно понимаю ваш вопрос, все, что вы хотите сделать, это вставить жестко запрограммированную опцию вверху списка, ДО динамически генерируемых вариантов.

Просто сделай это:

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;

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

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

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

Имеет ли это смысл?

Другие вопросы по тегам