2013-06-24 92 views
1

GET變量PHP isset我有一個<select>領域,我想有基於選擇適當<option>的GET值 所以我使用了一個三元語句來輸出selected屬性,像這樣的內容:在三元操作

<select name="data" id="data"> 
    <option value="1" <?php echo $_GET['data'] == '1' ? 'selected' : '' ; ?>>One</option> 
    <option value="2" <?php echo $_GET['data'] == '2' ? 'selected' : '' ; ?>>Two</option> 
    <option value="3" <?php echo $_GET['data'] == '3' ? 'selected' : '' ; ?>>Three</option> 
</select> 

的問題是,在當頁面第一次加載沒有$_GET陣列所以我在選擇框中得到一個PHP錯誤:

公告:未定義指數:數據...

所以我試着用isset先檢查,如果陣列如果值匹配檢查之前設置:

<option value="1" <?php echo isset($_GET) && $_GET['data'] == '1' ? 'selected' : '' ; ?>>One</option> 

這將返回相同的錯誤。

什麼是最好的方式來簡潔地處理這個錯誤,並實現我所追求的?

+5

$ _GET總是設置!你需要用isset($ _ GET ['data'])檢查參數 – Waygood

+1

@Waygood你是對的。作爲回答發佈,我將接受。 – harryg

+1

您接受的答案很好。僅用於第一次迭代,並導致重複。 – Jimbo

回答

0

嘗試像

<option value="1" <?php echo (isset($_GET['data']) && $_GET['data'] == '1') ? 'selected' : '' ;?> >One</option> 
+0

任何理由downvote它.. ?? – Gautam3164

+0

不確定,雖然它可能違反了[DRY原則](http://en.wikipedia.org/wiki/Don't_repeat_yourself)? – Jimbo

+0

我已經談到了條件只是不是爲整個選項..只是它的三元條件referin @Jimbo – Gautam3164

3

試試這個,

<option value="1" <?php echo isset($_GET['data']) ? ($_GET['data'] == '1' ? 'selected' : '') : ''; ?>>One</option> 
+0

工作,但不是最有效或可讀。嵌套三元陳述是我想要避免 – harryg

3

你可以利用for循環,只打印出$selected變量時,你的要求是正確的。這將會讓你無法重複自己。

<select name="data" id="data"> 
    <?php for ($i = 1; $i <= 3; $i++) { ?> 
     <?php $selected = (isset($_GET['data']) && $_GET['data'] === $i) ? 'selected' : ''; ?> 
     <option value="<?=$i?>" <?=$selected?>><?=$i?></option> 
    <?php } ?> 
</select> 

注:我使用PHP 5.4,所以可以合法使用PHP短回波的這,在我看來,在視圖/模板

好得多。如果你想顯示的號碼和唐文本不想手動操作,使用數組,你可以查看梨的Numbers_Words包。

+0

這通常是我所採取的路線,但看到我只有3''我覺得構建一個數組,並使用'for'循環會矯枉過正,並且使代碼更少可讀。雖然公平答案。(我也更喜歡這個例子中的foreach循環,因爲它不需要知道數組長度和元素鍵 - 我的數據實際上並不是數字)。 – harryg

+0

只有我沒有提出'foreach()'的原因是因爲你需要一些東西來迭代,而你沒有這樣的東西;)但很酷。類似於這個以防止代碼重複的事情總是向前邁出的一大步。 – Jimbo