2012-04-16 53 views
2

我有一个选择框,用户从下拉菜单中选择一个性别(性别),并且他们的选择在选择标签中用“selected”指定。但盒子总是结束'选择'。以下语法有什么问题?在PHP中选择的字段

echo"<select name='sex'> 
<option value='N' '". ($info['sex'] == "N" ? 'selected=selected':'') ."'>Choose</option> 
<option value='M' '". ($info['sex'] == "M" ? 'selected=selected':'') ."'>Male</option>  
<option value='F' '". ($info['sex'] == "F" ? 'selected=selected':'') ."'>Female</option> 
</select>"; 

$info['sex']是返回总是N,M或F.

+2

''info ['sex']'返回正确的结果吗? – 2012-04-16 21:04:59

+0

show'var_dump($ info);' – zerkms 2012-04-16 21:05:08

+0

你看过源代码以确保其中一个选项显示“selected = selected”?引号并不重要。 – 2012-04-16 21:07:36

回答

4

一个咨询SQL你selected=selected被引用和输出像

<option value='N' 'selected=selected'> 

当你运行你的代码,使用这个

echo"<select name='sex'> 
<option value='N' ". ($info['sex'] == "N" ? 'selected=\'selected\'':'') .">Choose</option> 
<option value='M' ". ($info['sex'] == "M" ? 'selected=\'selected\'':'') .">Male</option>  
<option value='F' ". ($info['sex'] == "F" ? 'selected=\'selected\'':'') .">Female</option> 
</select>"; 

注意在'selected=\'selected\''处的转义引号在". ($info['sex']缺少的单引号和.">

演示:http://codepad.org/AX95BzTR

这里展示您的问题输出一个小提琴:http://jsfiddle.net/JKirchartz/KB4rv

+0

尽管最好用引号括起来 - 它不会改变任何东西:http://jsfiddle.net/7YbMf/ – zerkms 2012-04-16 21:06:23

+0

@zerkms true,但是这会输出html,看起来像OP代码的其余部分,比如'value ='N'',干净一致的输出代码是我的目标... – JKirchartz 2012-04-16 21:08:44

+0

确实是一致的,但它根本不能解决问题 – zerkms 2012-04-16 21:09:37

0

它应该是:

selected=\"selected\" 
+0

如果你使用单引号或双引号,只要它看起来不像这样就没有关系:'selected = selected'它应该看起来像这样:selected = selected或selected =“selected”或selected ='selected' – 2012-04-16 21:22:01

0

真的不知道这是否是答案,但试试这个: ". (($info['sex'] == "N") ? ('selected=\'selected\''):(NULL)) ."

另外看看你的标签是否有autocomplete =“off”或点击ctrl + f5几次以确定。这种情况在过去很常见

0

首先,尽量避免使用这种编码风格,并且在HTML中包含PHP而不是其他方式。

例如,它可以做到这样的:

<?php 
$sex = "F"; //mockup data from DB 
?> 

<select> 
     <option <?= $sex=="M" ? "selected='selected'" : "" ?> value='M' >Male</option> 
     <option <?= $sex=="F" ? "selected='selected'" : "" ?> value='F' >Female</option> 
</select> 
+0

使用''快捷方式可能会在运行此代码时中断,在php 5.2之前您必须启用/安装它才能正常工作......这不是一个错误,只是需要注意的一点... – JKirchartz 2012-04-16 21:20:44

+1

是的,这是真的。更精确地说,在PHP 5.3中,“short_open_tag = On”必须在php.ini中设置 在PHP 5.4中,它已被更改,并且此语法始终有效。 – shark555 2012-04-16 21:24:14

0

如果$info['sex']是N或M或F;

echo "<select name=\"sex\"> 
    <option value=\"N\" ". ($info['sex'] == "N" ? "selected=\"selected\"" : "") .">Choose</option> 
    <option value=\"M\" ". ($info['sex'] == "M" ? "selected=\"selected\"" : "") .">Male</option>  
    <option value=\"F\" ". ($info['sex'] == "F" ? "selected=\"selected\"" : "") .">Female</option> 
    </select>"; 

PS:单引号可以在HTML中使用,但是这是一个不好的趋势,就像justin biebering。