Как мне использовать переданное значение по умолчанию в выпадающем меню?

#php #mysql

#php #mysql

Вопрос:

—ОТРЕДАКТИРОВАНО, ЧТОБЫ ЛУЧШЕ ОПИСАТЬ СЦЕНАРИЙ—

У меня есть база данных MySQL, содержащая 2 таблицы: technicians и work_orders. В таблице technicians есть столбцы techID, tech_surname, tech_firstname и tech_userlogin. В таблице work_orders, среди прочего, есть столбцы JobID (PK), wtechID, wtech_surname, wtech_firstname и wtech_userlogin.

У меня есть страница с повторяющимся регионом, в котором перечислены отправленные заказы на выполнение работ, дата заказа на выполнение работ — это ссылка, которая передает идентификатор задания в URL-адресе на страницу, содержащую форму обновления. Форма заполняется данными, взятыми из таблицы work_orders, в частности, идентификатором задания (имя клиента, адрес, оборудование для ремонта, проблема и т. Д.). В форме находится выпадающий список, заполненный из таблицы technicians. В этом выпадающем списке перечислены tech_userlogin технических специалистов. Я включил скрытые поля на страницу формы, wtech_userlogin и wtechID. Когда я просматриваю источник страницы, он показывает значения из таблицы work_orders, но я не знаю, как использовать его в запросе для достижения желаемых результатов.

Когда форма публикует, она обновляет таблицу work_orders. Все это работает. Чего я надеюсь добиться, так это того, чтобы значение wtech_userlogin (из таблицы work_orders) для конкретного заказа на работу стало значением по умолчанию в выпадающем меню, если техник уже выбран. Если ранее из выпадающего меню не было сделано никакого выбора, я бы хотел, чтобы по умолчанию в выпадающем списке было «—Выберите техника —«. Я пробовал несколько вещей, но пока ничего не работает.

Вот код для выпадающего списка:

 <select name="tech_userlogin" id="tech_userlogin">
              <?php
        $sql="SELECT techID, tech_userlogin FROM technicians";
$result=mysql_query($sql);

$options="";

while ($row=mysql_fetch_array($result)) {

    $techID=$row["techID"];
    $tech_userlogin=$row["tech_userlogin"];
    $options.="<option value="$tech_userlogin">$tech_userlogin</option>";
}

if(empty($tech_userlogin)) {
die ('You must select a Technician');
}

?>
              <option value='<?php echo $options; ?>' selected='selected'>""<?php echo $options; ?>
          </select>
  

Кто-нибудь может мне помочь с этой проблемой? Любая помощь будет оценена. Я новичок в PHP и MySQL. Я прохожу курс веб-дизайна, и мы используем Dreamweaver. Я хочу оторваться от Dreamweaver и узнать, как это сделать без мастеров. Я смог заставить свои формы публиковать, и все мои функции вставки, обновления и удаления работают на основе того, что я смог собрать из Интернета, но это действительно ставит меня в тупик.

Приветствия.

Комментарии:

1. Почему вы используете заглавные буквы для некоторых элементов и атрибутов, а не для других? Это действительно раздражает.

2. Я принял ваше предложение, но нашел вашу доставку немного едкой.

Ответ №1:

Что-то вроде этого — это то, что вы хотите:

 <select name="tech_userlogin" id="tech_userlogin">
<?php
    $sql="SELECT techID, tech_userlogin FROM technicians";
    $result=mysql_query($sql);

    while ($row=mysql_fetch_array($result)) 
    {
        $techID = $row['techID'];
        $tech_userlogin=$row['tech_userlogin'];

        // Here - check if the tech id in the query matches the logged in tech's id
        $selected = ($techID == $_SESSION['techID']) ? 'selected="selected"' : '';

        echo '<option value="' . $tech_userlogin . '" ' . $selected . '>' . $tech_userlogin . '</option>' . "n";
    }

?>
</select>
  

Комментарии:

1. Спасибо за ваш ответ. Что я хочу сделать, это передать значение ранее выбранного tech_userlogin . Например, для задания был назначен технический специалист, но детали задания необходимо изменить. Поэтому, когда страница обновления заполняется, она заполняет выпадающий список этим ранее выбранным значением (tech_userlogin уже выбран). Если технический специалист не был назначен, я хочу, чтобы значение по умолчанию в выпадающем списке было пустым или — Выберите Tech — или что-то в этом роде.

2. Вы могли бы изменить $techID == $_SESSION['techID'] на $tech_userlogin == $_GET['tech_userlogin']

3. Привет. Это все еще не работает. Когда форма обновления публикуется, она обновляет таблицу work_orders. Значение из выпадающего меню сохраняется как wtech_userlogin в work_orders. techID является скрытым полем в форме и обновляет таблицу work_orders как wtechID. Значение, которое я пытаюсь отобразить в выпадающем поле, — это wtech_userlogin из таблицы work_orders . Нужно ли включать таблицу work_orders в запрос? Если да, то как мне это сделать. Спасибо за вашу помощь. Приветствия.

4. используете ли вы method="post" в своей форме? Если да, используйте $_POST['tech_userlogin'] вместо $_GET['tech_userlogin'] . Вы пропустили много данных 🙂

5. Я очень новичок в этом. Ситуация такова. У меня есть повторяющийся регион, в котором перечислены все рабочие задания. Когда я нажимаю на рабочий заказ, я перенаправляюсь на страницу обновления с формой. Идентификатор задания (PK таблицы work_orders) передается как URL. Форма обновления заполняется данными, которые соответствуют этому конкретному идентификатору задания. На странице обновления находится выпадающее меню, которое заполняется из другой таблицы в базе данных, технические специалисты. Записи формы и результаты хранятся в таблице work_orders . Я хочу, чтобы выпадающее значение по умолчанию было заполнено значением из таблицы work_orders, wtech_userlogin.

Ответ №2:

Ну, у вашего кода много проблем. Начнем с того, что я не вижу, где вы указываете выбор. Вы должны отправить его в скрипт через post. Затем вы объединяете теги параметров в строку, а затем добавляете эту строку в качестве значения в другой параметр. И, наконец, ваша переменная $tech_userlogin — это значение столбца tech_userlogin последней строки в таблице базы данных technicians.

РЕДАКТИРОВАТЬ 1: пожалуйста, прокомментируйте.

Давайте попробуем это исправить:

 <?php
    // first thing: check if a post was sent
    if($_POST)
    {
        if(!empty($_POST['technician']))
        {
            @session_start();
            $_SESSION['tech'] = $tech;
        }
    }

    if(!empty($_SESSION['tech']))
    {
        $tech = $_SESSION['tech'];
    }
    echo '<form action="" method="post">


    $sql = "SELECT `techID`,`tech_userlogin` FROM `technicians`";
    $sql = mysql_query($sql);

    if(!mysql_num_rows($sql))
    {
        echo 'There is no technician in the database'; // or use die for radical thinking
    }

    $options = '';
    $technicians = array();
    echo '<select name="tech_userlogin" id="tech_userlogin">';
            if(empty($tech))
            {
                echo '<option value="">-- Select technician --</option>';
            }
    while($row = mysql_fetch_array($sql))
    {
         $technicians[] = $row;
         $options .= '<OPTION VALUE="'.$tech_userlogin.'" '.((!empty($tech) amp;amp; $tech == $tech_userlogin)) ? 'selected="selected"' : '').'>'.$tech_userlogin.'</option>';
    }

    echo $options;
    echo '</select>';
    echo '<input type="submit" value="Please submit you selection" />';
    echo '</form>';

?>
  

Надеюсь, это поможет :).

Комментарии:

1. Спасибо, что перезвонили мне. Я думаю, возможно, я не совсем понял, что я хотел бы сделать. tech_userlogin поступает из таблицы technicians . Когда tech_userlogin выбирается из выпадающего списка, это значение затем отправляется в таблицу work_orders, где оно сохраняется как wtech_userlogin вместе с другими деталями конкретного задания. Поэтому, если рабочий заказ редактируется после назначения технологии, я хочу, чтобы значение по умолчанию в раскрывающемся списке было заполнено tech_userlogin, которое соответствует wtech_userlogin из таблицы work_orders для этой конкретной работы. Дайте мне знать, если это понятно. Приветствия

2. Ну, теперь я понял … это потребует немного больше кода. И еще один select или join в инструкции sql. Не могли бы вы немного подробнее объяснить, как выглядит таблица work_orders, я имею в виду, вы могли бы сделать что-то вроде этого: $query = ‘SELECT * FROM works_order where wtech_userlogin = «‘.$tech_userlogin.'»‘; НО, как вы видите, в этой таблице может быть более одного специалиста. Пожалуйста, предоставьте более подробную информацию.

3. Привет, в таблице work_orders есть поле wtech_login, его значение берется из поля таблицы technicians tech_userlogin. Итак, когда tech_userlogin выбирается из выпадающего списка, это значение разносится и сохраняется в таблице work_orders . Я согласен с запросом, но не знаю, как объединить таблицы. techID хранится в work_orders (для конкретного задания) как wtechID, а tech_userlogin как wtech_userlogin. Это то, что вы имеете в виду?