1

我的视图文件中的 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”设置为真时,它不应该在“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 语句为真时添加第一个选定值,当 else-if 语句为真时添加第二个选定值。

为什么虽然 if 语句为真,但读取 else-if 之后的代码???

4

3 回答 3

1

尝试

<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>
于 2013-08-23T13:14:46.673 回答
0

我相信当“$updateErrorPost”设置为真时,它不应该在“else if”之后读取代码。

不一定 - 既然你在&& $updateErrorPost['password']==$password['id']那里,那么} else if {...如果$updateErrorPost['password'] != $password['id']

尝试在if { }没有else完整条件的情况下将 2 分开,看看它是否有效 - 这将帮助您找出逻辑错误的位置。

于 2013-08-23T12:31:49.517 回答
0

我想你想做这样的事情:

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()通过数组键来做。例如isset($updateErrorPost['password']),还有另一个。

更新: 如果您想在selected两个条件中的任何一个等于时准确地回显单词true,它应该是正确的。

于 2013-08-23T12:37:40.610 回答