Установить выбранное значение как выбранное при выборе из выпадающего списка m sql - PullRequest
0 голосов
/ 11 апреля 2020

Я начал курс php. Теперь я «научился» отображать sql -данные в html -таблицу. Следующий вопрос сейчас выше моих знаний ... но я, тем не менее, заинтересован, чтобы решить его, так как это помогло бы мне. Я нашел некоторые решения, но не в связи с mysql.

У меня есть mysql -просмотр с тремя колонками: Пивоварня, Город и Пиво. Я хотел бы дать клиенту возможность выбрать город из выпадающего списка. Для этого я создал действие формы:

<?php $CityShow = 'All' ?>;

<form action='<?php echo $_SERVER['PHP_SELF']; ?>' method='post' name='form_filter' >
    <h2>City</h2>
    <?php
    $resultSet = $Verbindung->query("SELECT DISTINCT City FROM breweries");
    ?>
    <select name = 'City'>
    <?php
       echo"<option selected value = $City>All</option>";
       while ($rows = $resultSet->fetch_assoc())
       {
          $City = $rows ['City'];
          echo"<option value = '{$City}'>{$City}</option>";
       };
    ?>
    <input type='submit' value = 'Send'>
    <!-- <?php $CityShow = $_POST["City"]; ?>; -->
  </select>

Это отлично работает, клиент может выбрать город, и таблица создается динамически.

<?php
if($CityShow == '' || $CityShow == 'All'){
$SQL = "SELECT * from Breweries";
}
else{
  $SQL = "SELECT * from Breweries where city = '$CityShow'";   
}

$Ergebnis =  $Verbindung->query($SQL);
?>
<!-- fill table-->
<?php
if($Ergebnis->num_rows > 0) {
echo "<table><tr><th>Brewery</th><th>City</th><th>Beer</th></tr>";
   while($row = $Ergebnis->fetch_assoc()){
   echo"<tr>";
   echo "<td>" . $row['Brewery'] . "</td>";
   echo "<td>" . $row['City'] . "</td>";
   echo "<td>" . $row['Beer'] . "</td>";
   echo"</tr>";
  }
  echo "</table>";
 }
 ?>

Я думаю, это не самый лучший способ, но он работает для меня.

Моя проблема: в настоящее время, когда город выбирается с помощью кнопки отправки, фокус всегда меняется на «Все» (это опция, которой нет в базе данных - ее цель - показать все записи Я бы хотел сосредоточиться на выбранном городе.

Ив

1 Ответ

0 голосов
/ 11 апреля 2020

В теге option, где вы обычно вводите атрибут stati c selected, вы вводите условие, которое проверяет, установлено ли значение и установлено ли оно, а затем выводит атрибут selected.

Ниже приведен пример состояния c select / option, устанавливающего заданное значение для выбранного.

<select class="form-control" name="city">
    <option value="San Diego"<?php if($row['City'] === "San Diego"){ echo ' selected'; } ?>>San Diego</option>
    <option value="Austin"<?php if($row['City'] === "Austin"){ echo ' selected'; } ?>> Austin</option>
    <option value="New Orleans"<?php if($row['City'] === "New Orleans"){ echo ' selected'; } ?>>New Orleans</option>
    <option value="Portland"<?php if($row['City'] === "Portland"){ echo ' selected'; } ?>>Portland</option>
    <option value="Detroit"<?php if($row['City'] === "Detroit"){ echo ' selected'; } ?>>Detroit</option>                                    
</select>

Если ваш выбор создается динамически с использованием массива городов, и вы будете * От 1012 * до l oop над этим массивом и найдите установленный город, который установлен в вашем массиве $ row, вы можете перебрать массив и установить условие, которое ищет заданное значение из БД:

//start your select and assign to a variable
$stmt = '<select class="form-control" name="city">';
// Run the array of cities through a loop
foreach($breweries as $city){
    //if the value from DB $row['City'] is equal to a value in the array set selected in the  
    //option tag else we display without selected attribute in the option tag
    if($row['City'] === $city){
        $stmt .= '<option value="'.$city.'" selected>'.$city.'</option>';
    }else{
        $stmt .= '<option value="'.$city.'">'.$city.'</option>';
    }
}
//close the select tag
$stmt .= '</select>';
...