значения, поступающие два раза при ограничении одинаковых значений в раскрывающемся списке выбора в php - PullRequest
1 голос
/ 08 января 2020

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

<select class="form-control" id="space" name="space">
   <option value="--Select--">--Select--</option>
 <?php
  $select=mysqli_query($con,"select * from clients");
 while($menuz=mysqli_fetch_array($select))
  {
  $filled =$menuz['Space'];
 $valuez = array("C101","C102","C103","C104","C105","C106","C107","C108","W1","W2","W3","W4","W5","W6","W7","W8","W9","W10","W11","W12","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10");
 foreach($valuez as $value){
  if($value != $filled){ 





    ?>
        <option value="<?php echo $value;?>">
          <?php echo $value; ?>
        </option>
    <?php 
    } 
 }
}
?> 
</select>

Теперь проблема заключается в том, что значения отображаются в столбце выбора два раза. первый раз, когда он отображает все значения, а после этого его значения отображаются не в базе данных, как я хочу. Может кто-нибудь, пожалуйста, помогите мне с этим.

1 Ответ

1 голос
/ 08 января 2020

Посмотрите на следующие опции:

Опция 1: Только что добавленный DISTINCT в SQL запросе

<select class="form-control" id="space" name="space">
   <option value="--Select--">--Select--</option>
   <?php
    $select=mysqli_query($con,"select DISTINCT `Space` from clients");
    while($menuz=mysqli_fetch_array($select)){
    $filled =$menuz['Space'];
    $valuez = array("C101","C102","C103","C104","C105","C106","C107","C108","W1","W2","W3","W4","W5","W6","W7","W8","W9","W10","W11","W12","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10");
    foreach($valuez as $value){
      if($value != $filled){
        ?>
            <option value="<?php echo $value;?>">
              <?php echo $value; ?>
            </option>
        <?php 
      }
    }
  }
  ?> 
</select>

ИЛИ

Опция 2: Игнорирование существующего набора значений из SQL запрос только с использованием "NOT IN". Здесь вы можете использовать подготовленный оператор, чтобы избежать SQL инъекций. Только для демонстрации, я показал здесь запрос со встроенными входными параметрами.

<?php
  $valuez = array("C101","C102","C103","C104","C105","C106","C107","C108","W1","W2","W3","W4","W5","W6","W7","W8","W9","W10","W11","W12","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10");
?>
<select class="form-control" id="space" name="space">
   <option value="--Select--">--Select--</option>
   <?php
    $select=mysqli_query($con,"SELECT DISTINCT `Space` FROM `clients` WHERE `Space` NOT IN ('". implode("', '", $valuez) ."')");
    while($menuz=mysqli_fetch_array($select)){
      $filled =$menuz['Space'];
      ?>
      <option value="<?php echo $filled;?>">
        <?php echo $filled; ?>
      </option>
      <?php
    }
  ?> 
</select>
...