【问题标题】:Yii - something wrong with if & else if statement in view fileYii - 视图文件中的 if 和 else if 语句有问题
【发布时间】:2013-08-23 12:25:38
【问题描述】:

我的视图文件中的 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 之后的代码???

【问题讨论】:

  • 你遇到了什么错误
  • 如果$updateErrorPost 设置为trueif 将在密码检查中失败
  • 感谢 cmets!我在我的帖子中添加了更多细节。

标签: php if-statement yii


【解决方案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>

【讨论】:

  • 哦!!!!非常感谢你!!有效!所以,我需要的是用 () 包围 A==B。我学会了:)再次感谢!
  • 虽然这行得通,但它就像重新发明轮子。 Yii has dropdown list 用于“徒手”使用或 bound with form(实际上是相同的,只是为了保持一致性)。
【解决方案2】:

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

不一定——因为你有&amp;&amp; $updateErrorPost['password']==$password['id'],那么} else if {...将在$updateErrorPost['password'] != $password['id']时运行

尝试使 2 个单独的 if { } 不具有完整的条件集的 else 并查看它是否有效 - 这将帮助您找出逻辑错误的位置。

【讨论】:

  • 啊,实际上,"$updateErrorPost['password']==$password['id']" 也是如此。
【解决方案3】:

我想你想做这样的事情:

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']) 和另一个。

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

【讨论】:

  • >确保 $updateErrorPost 和 $postUpdate 数组每次都有 ['password'] 键是的,我只是确保两者都有 'password' 键。
  • @Hayato 你试过我建议的代码了吗?你的问题还在吗?
  • 对不起,我想我没有提供足够的信息。我在帖子中显示的代码实际上在“foreach”中。 因此,我无法按原样尝试您的代码。
  • 但我试过“||”而不是你建议的“else if”。但它仍然读取“||”之前的代码和“||”之后的代码,尽管两者都返回 true 布尔值。
  • @Hayato 如果你想在两个条件中的任何一个为真时准确地回显selected,应该没问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
相关资源
最近更新 更多