2011-06-13 70 views
3

我有一個搜索表單在我的數據庫中搜索一個表。該表具有以下的列:optgroup用於選擇字段 - 同一表中的組和選項字段。我怎樣才能做到這一點?

ICAO - 名字 - 國家

我會放在選擇的選項,這些領域與下面的查詢每一行的PHP:

public function airportstuff() { 
     $query = "SELECT icao, name, country 
       FROM phpvms_airports 
       ORDER BY icao"; 

     return DB::get_results($query); 
    } 

那麼php如下:

<?php foreach ($airports as $airport) 
{echo '<option value="'.$airport->icao.'">'.$airport->icao.' - '.$airport->name.'</option>';} 
        ?> 

這工作不錯,但我希望能夠使用該國列作爲OPTGROUP,因此每個國家是一個OPTGROUP,與各自的airpo在正確的optgroup中爲該國家提供。

我已經試過這樣:

<?php 
foreach ($airports as $airport) 
{ 
echo '<optgroup label="'.$airport->country.'">'; 
echo '<option value="'.$airport->icao.'">'.$airport->icao.' - '.$airport->name.'</option>'; 
?> 
<?php echo '</optgroup>';}?> 

,但它只是創造了每一個機場OPTGROUP。

對此的任何幫助將非常感激,並提前感謝。

斯圖爾特

回答

5

首先,修改查詢通過country第一,然後icao排序。 BTW

$previousCountry = null; 
foreach ($airports as $airport) { 
    if ($previousCountry != $airport->country) { 
     // close the previous optgroup tag only if this isn't our first time through the loop 
     if ($previousCountry !== null) { 
      echo '</optgroup>'; 
     } 
     echo '<optgroup label="'.$airport->country.'">'; 
    } 
    echo '<option value="'.$airport->icao.'">'.$airport->icao.' - '.$airport->name.'</option>'; 
    $previousCountry = $airport->country; 
} 
// close the final optgroup only if we went through the loop at least once 
if ($previousCountry !== null) { 
    echo '</optgroup>'; 
} 

public function airportstuff() { 
    $query = "SELECT icao, name, country 
      FROM phpvms_airports 
      ORDER BY country, icao"; 
    return DB::get_results($query); 
} 

那就試試這個爲避免你的代碼XSS vulnerabilities,你真的應該換你正在構建中htmlspecialchars()的HTML或一些類似功能的所有動態部分。

+1

工作完美,非常感謝你! – 2011-06-13 05:25:08

+0

@Stuart Boardman:我的榮幸:) – Asaph 2011-06-13 05:26:16

相關問題