2013-08-23 50 views
1

我在我的视图文件中遇到了else语句的问题。Yii - if&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时,它读取后,“否则,如果”代码,使“选择”值添加到多个选项标签。

有谁知道什么导致这个问题呢?

我误解的东西在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语句是真实的,其他的代码,如果后读取???

+0

什么样的错误你正面临 –

+0

如果'$ updateErrorPost'设置为TRUE;在'if'将失败密码校验 – tlenss

+0

感谢您的留言!我在我的文章中添加更多细节。 – Hayato

回答

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> 
+0

哦!!!!非常感谢你!!有效! 所以,我需要的是用()包围A == B。我学到了:) 再次感谢! – Hayato

+0

虽然这个工作,它就像重新发明轮子。 Yii [有下拉列表](http://www.yiiframework.com/doc/api/1.1/CHtml#activeDropDownList-detail)用于“徒手”使用或[用表单绑定](http://www.yiiframework.com /doc/api/1.1/CActiveForm#dropDownList-detail)(这实际上是一样的,它只是为了一致性)。 – 2013-08-23 13:57:58

0

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

不一定 - 这将帮助你找到 - 因为你有&& $updateErrorPost['password']==$password['id']那里,然后} else if {...将其是否工作正常运行,如果$updateErrorPost['password'] != $password['id']

尽量使2分隔if { }else有一整套的条件,看看在哪里你有逻辑错误。

+0

啊,实际上,“$ updateErrorPost ['password'] == $ password ['id']”也是如此。 – Hayato

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

更新时间:如果您想在任何的2个条件等于true呼应准确selected的话,它应该是正确的。

+0

>确保$ updateErrorPost和$ postUpdate数组每次都有['password']键 是的,我只是确保两个都有'密码'键。 – Hayato

+0

@Hayato您是否尝试过我建议的代码?你的问题还在吗? – hallaji

+0

很抱歉,我想我没有提供足够的信息。 我在帖子中显示的代码实际上在“foreach”中。 <?php foreach($ passwordData as $ password):?> 因此,我无法尝试您的代码,因为它是。 – Hayato