Предварительно выбрать опцию выпадающего во время цикла в зависимости от значения - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть две таблицы: Workorder таблица, в которой есть столбец с именем status_id , который позволяет мне узнать статус заказа, если он не тронут, в прогресс или закончен. Это просто удержание числового значения статуса.

workorder table

У меня есть вторая таблица с именем Status , которая имеет соответствующий status_id и текст статуса.

status table

У меня есть выпадающий цикл, который извлекает таблицу состояния и выводит ее на экран.

Я пытаюсь выбрать вариант раскрывающегося списка, связанный со статусом таблицы рабочих заказов.

<select name="status" class="form-control input-default" required>
<option selected disabled>Status</option>       
<?php
$status_sql = "SELECT * FROM STATUS";   
$result_status = $conn->query($status_sql);
while ($status_row = $result_status->fetch_assoc()) {
$status_id   = $status_row['status_id'];
$status_name = $status_row['status_text'];
//select status based on value in workorder row
$select_status = (1 == 1)? 'selected="selected"':'';
echo '<option value="' . $status_id . '" '.$select_status.'>'.$status_name . '</option>';   
}
?>
</select>

Я использую этот php-код, поскольку он повторяет выбранный HTML-тег

Я пытаюсь объединить две таблицы в одну

$sql = "SELECT *, w.status_id as wid, s.status_id as sid 
FROM WORKORDER w 
INNER JOIN STATUS s 
ON w.status_id = s.status_id
";

и затем превращение заявления в это

$select_status = ( $status_row['sid'] == $status_id  = $status_row['status_id'])? 'selected="selected"':'';

Я не могу понять, может ли кто-нибудь помочь мне. Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Поскольку вы присоединяетесь к ON w.status_id = s.status_id, оба эти значения будут идентичны в SELECT *, w.status_id as wid, s.status_id as sid (также вы не используете свой столбец с псевдонимом $status_row['wid']).

Посмотрите на проблему, которую вы вызываете, разбив воедино свою логику назначения и сравнения:

Код: ( Демо )

$status_row['sid'] = $status_row['status_id'] = 3;
foreach (range(1, 5) as $status_id) {
    $select_status = ( $status_row['sid'] == $status_id  = $status_row['status_id'])? 'selected="selected"':'';
    var_dump($select_status);
}

Выход:

string(19) "selected="selected""
string(19) "selected="selected""
string(19) "selected="selected""
string(19) "selected="selected""
string(19) "selected="selected""

Вы должны просто использовать это: Демо

$select_status = $status_row['sid'] == $status_id ? 'selected="selected"' : '';

Выход:

string(0) ""
string(0) ""
string(19) "selected="selected""
string(0) ""
string(0) ""
0 голосов
/ 05 ноября 2018

Попробуйте, получите статусы в массиве для отображения, выберите и сравните status_id с status_id вашего заказа

   $status_sql = "SELECT status_id,status_text FROM STATUS";   // keep this query out of while, else will run n times //
    $result_status = $conn->query($status_sql);
    //$statuses = $result_status->fetch_all(MYSQLI_ASSOC); //requires MySQL Native Driver (mysqlnd)
    $statuses = []; 
    while($status_row = $result_status->fetch_assoc()){
       $statuses[] = $status_row;
    }

    $workorder_sql = "SELECT first_name, status_id FROM wordorder LIMIT 0,30";  // or do a where id= if this is a single workorder page 
    $result_workorder = $conn->query($workorder_sql );
    while ($workorder_row = $result_workorder->fetch_assoc()) {

    //rest of code/logic/form fields
    ?>

    <select name="status" class="form-control input-default" required>
    <option selected disabled>Status</option>       
    <?php
    foreach($statuses as $status) {
    $status_id   = $status['status_id'];
    $status_name = $status['status_text'];
    //select status based on value in workorder row
    $select_status = ($workorder_row['status_id']  == $status['status_id'])? 'selected="selected"':'';
    echo '<option value="' . $status_id . '" '.$select_status.'>'.$status_name . '</option>';   
    }
    ?>
    </select>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...