视图文件中的else-if语句有问题。
我使用的是Yii框架,在我的视图文件中有以下代码。
<select class="formRightPulldown" name="Post[password]">
<?php foreach($passwordData as $password) :?>
<option value="<?php echo $password['id'] ?>"
<?php if(isset($updateErrorPost) &&
$updateErrorPost['password']==$password['id']){
echo 'selected';
} else if(isset($postUpdate) &&
$postUpdate['password']==$password['id']){
echo 'selected'; } ?>
>
<?php echo $password['name'] ?>
</option>
<?php endforeach ;?>
</select>
我相信当"$updateErrorPost"设置为true时,它不应该读取"else-if"之后的代码。
但不知何故,即使"$updateErrorPost"设置为true,它也会在"else-if"之后读取代码,从而将"selected"值添加到多个选项标记中。
有人知道这个问题的原因吗?
我是不是误解了php编程中一些非常基本的东西???
请帮帮我!
提前感谢:)
+++添加+++
它最终将选定的值添加到多个选项标记中,如下所示。。。
<select class="formRightPulldown" name="Post[password]">
<option value="3">temporary</option>
<option value="2" selected>Subscriber</option>
<option value="1" selected>VIP</option>
</select>
在上面的代码中,当第一个if语句为true时,添加第一个选定值,当else-if语句为true时,添加第二个选定值。
为什么若语句为真,代码后若读取???
尝试
<select class="formRightPulldown" name="Post[password]">
<?php foreach($passwordData as $password) :?>
<option value="<?php echo $password['id'] ?>"
<?php if(isset($updateErrorPost) && ($updateErrorPost['password']==$password['id'])) {
echo 'selected';
} else if(isset($postUpdate) && ($postUpdate['password']==$password['id'])) {
echo 'selected';
}
?>>
<?php echo $password['name'] ?>
</option>
<?php endforeach ;?>
</select>
我相信当"$updateErrorPost"设置为true时,它不应该读取"else-if"之后的代码。
不一定-因为那里有&& $updateErrorPost['password']==$password['id']
,那么如果$updateErrorPost['password'] != $password['id']
,则会运行} else if {...
尝试在没有else
具有完整条件的情况下制作2个单独的if { }
,看看它是否有效——这将帮助您找出哪里有逻辑错误。
我想你想做这样的事情:
foreach($passwordData as $password) {
$selected = "";
if((isset($updateErrorPost) && $updateErrorPost['password']==$password['id']) ||
(isset($postUpdate) && $postUpdate['password']==$password['id'])
){
$selected = "selected";
}
echo "<option value='{$password['id']}' {$selected}>";
echo $password['name'];
echo "</option>";
}
还要确保$updateErrorPost
和$postUpdate
阵列每次都有['password']
密钥。否则,您应该通过数组键执行isset()
。例如CCD_ 10和另一个。
更新:如果您想在两个条件中的任何一个等于true
时准确地回显selected
单词,则它应该是正确的。