Как я могу изменить выбранную опцию в поле выбрать атрибут, используя значение php, которое у меня есть?

#php #html #mysql

Вопрос:

Я хочу, чтобы мой атрибут select изменил выбранную опцию в зависимости от выбора php$. Например, если я выбрал FOOD ASC (это вариант 1), я хочу, чтобы он был выбран после нажатия кнопки с именем «сортировка».

 if(isset($_POST['sortbutton']))// if button pressed
{
    $choice = $_POST['sort_select'];
    if($choice == 0){...there was some code //if selected option == 0
        $qr_result = mysqli_query($db, "Select * 
                                        from `menu` 
                                        WHERE id>0 
                                        ORDER BY price ASC")
            or die(mysqli_error());

        echo '<table class="tam" style = "position:fixed; top: 110px;">'; //table
        echo '<td>' . 'Блюдо' . '</td>';
        echo '<td>' . 'Состав' . '</td>';
        echo '<td>' . 'Цена' . '</td>';
        while($data = mysqli_fetch_array($qr_result)){
            echo '<tr>';
            echo '<td>' . $data['product'] . '</td>';
            echo '<td>' . $data['consistency'] . '</td>';
            echo '<td>' . $data['price'] . '</td>';
            echo '</tr>'; //outputing database
 

HTML

 <form action="" method="POST">
    <div class="sorti">
        <select name="sort_select" >
            <option value="0" name = "value1">PRICE ASC</option>
            <option value="1" name = "value2">PRICE DESC</option>
            <option value="2" name = "value3">NAME ASC</option>
            <option value="3" name = "value4">NAME DESC </option>
        </select>
        <button name = "sortbutton">Show menu</button>
</form>
 

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

1. WHERE id>0 по сути, это оксюморон. id предположение, что это АвтоИнкремент, всегда будет больше нуля

2. спасибо за исправление

3. Ваш код не генерирует ничего похожего на HTML, который вы показываете

4. это html-код, установленный на сайте по умолчанию

5. <div> Внутренний блок формы не закрыт

Ответ №1:

 <form action="" method="POST">
    <div class="sorti">
        <select name="sort_select" >
            <option value="0" name = "value1" <?php echo $choice== 0?"selected":"";  ?>>PRICE ASC</option>
            <option value="1" name = "value2" <?php echo $choice== 1?"selected":"";  ?> >PRICE DESC</option>
            <option value="2" name = "value3" <?php echo $choice== 2?"selected":"";  ?> >NAME ASC</option>
            <option value="3" name = "value4" <?php echo $choice== 3?"selected":"";  ?> >NAME DESC </option>
        </select>
        <button name = "sortbutton">Show menu</button>
        </div>
</form> 

Я предполагаю , что следующая страница снова отображает ту же форму, что и выше, в html, должно сработать.
Я, вероятно, хотел бы написать это лучше, но установка выбранного параметра-это решение, которое вам следует выбрать

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

1. Я предполагаю, что вы имели в виду $choice == 1 , == 2 и т. Д., А == 0 не для всех вариантов?

2. К сожалению, это не помогло решить эту проблему

3. ОБНОВЛЕНИЕ: с помощью @WOUNDEDStevenJones все получилось так, как я хотел, спасибо

4. да , я думал , что правильно изложил это, отредактировал сейчас, чтобы сделать это правильно

5. Вы также можете захотеть удалить name атрибуты из <option> тегов

Ответ №2:

У option элемента нет name атрибута, который следует удалить, имя выпадающего списка, конечно, является именем, используемым в <select name="sort_select"> элементе, затем простой троичный тест, проверка значения $choice установит выбранный атрибут для вас, как это

 <form action="" method="POST">
    <select name="sort_select">
        <option value="0" <?php echo $choice==0 ? 'selected="selected"' : '';?>>PRICE ASC</option>
        <option value="1" <?php echo $choice==1 ? 'selected="selected"' : '';?>>PRICE DESC</option>
        <option value="2" <?php echo $choice==2 ? 'selected="selected"' : '';?>>NAME ASC</option>
        <option value="3" <?php echo $choice==2 ? 'selected="selected"' : '';?>>NAME DESC </option>
    </select>
    <button name="sortbutton">Show menu</button>
</form>