2016-05-09 34 views
1

我正在從我的數據庫中打印選擇列表。使用PHP和MySQL在選擇選項上打印選定屬性

這裏是我的代碼的一部分:

<form action="" method="post"> 
    <div class="form-item"> 
     <select name="specialties"> 
     <?php 
     $query = "SELECT * FROM specialties"; 
     $result = mysqli_query($connection, $query); 

     echo '<option value="All">' . $filterTitle . '</option>'; 
     while($row = mysqli_fetch_assoc($result)) { 
      $id = $row['id']; 
      $title = $row['title_'. $lang]; 

      if($_POST['specialties'] == $id) { 
       $selected = 'selected'; 
      } 

      echo '<option value="' . $id . ' "' . $selected . '>' . $title . '</option>'; 
     } 
     ?> 
     </select> 
    </div> 

    <div class="form-item"> 
     <input class="form-submit" type="submit" name="submit" value="<?php echo $filterSubmit; ?>"> 
    </div> 
</form> 

在這種形式下,當我選擇了一些選項,它過濾的內容。這工作正常,我不需要發佈那部分代碼。

首先,當我從選擇列表中選擇一些選項並提交後,它會過濾內容,但select選項顯示的是All值,而不是選定的選項。之後,我嘗試了上面的代碼,現在當我提交表單時,選擇值顯示最後一個選項,並且所有選項都具有selected屬性。

如何更改該邏輯,因此當我選擇第二個選項時,在提交表單後,selected屬性將僅出現在第二個選項上,所以文本將成爲第二個選項?

結論: 謝謝你們的答案。你們都是對的。我給你所有+1,我選擇Hassaan的答案,因爲它很好解釋。

+2

這是因爲您設置了$選定的值一次,但是您從未將其取消設置。因此,在您的if語句成功後,所有後續選項也將被設置爲選中狀態。嘗試添加一個else {$ selected =''; }或者一些效果相同的東西。 – apriede

+0

是的,我查看過其他人的答案,現在我知道缺失的差距。不管怎麼說,還是要謝謝你。 :) – user2519032

回答

1

目前正在檢查/比較值,併產生變量。您需要使用else條件,因爲您必須更改/重置生成變量的值。看下面的例子。

if($_POST['specialties'] == $id) { 
    $selected = 'selected'; 
} 
else 
    $selected = ''; 
1

添加else子句可將selected屬性重置爲空字符串。

if($_POST['specialties'] == $id) { 
    $selected = 'selected'; 
} 
else{ 
    $selected = ''; 
} 
1

你需要讓空選擇的變量每次像下面

while($row = mysqli_fetch_assoc($result)) { 
    $selected = ''; 
    $id = $row['id']; 
    $title = $row['title_'. $lang]; 

    if($_POST['specialties'] == $id) { 
     $selected = 'selected'; 
    } 

    echo '<option value="' . $id . ' "' . $selected . '>' . $title . '</option>'; 
}