2013-06-24 70 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