使用'或'运算符不用于菜单

时间:2010-05-03 04:58:11

标签: php

在我的代码中,我有一个名为“active”的CSS类,如果$ _GET ['page'] ==教程,php,mysql等我会使用它......

问题是,即使'page'变量不等于这些值中的任何一个,在这种情况下Tutorials按钮仍然有效。

为什么会发生这种情况? 我是否错误地使用'或'(||)操作数?

<?php if($_GET['page'] == 'tutorials' || 'php' || 'mysql' || 'html' || 'css' || 'js') { ?>
      <li class="active"> <?php } else { ?> <li> <?php } ?>

      <a href="index.php?page=tutorials">Tutorials</a>
        <ul>
     <li><a href="index.php?page=php">PHP</a></li>
     <li><a href="index.php?page=mysql">MySQL</a></li>
     <li><a href="index.php?page=html">HTML</a></li>
     <li><a href="index.php?page=css">CSS</a></li>
     <li><a href="index.php?page=js">JS</a></li>
        </ul>
        </li>

3 个答案:

答案 0 :(得分:8)

您错误地使用了||

您需要分别测试每个完整条件才能以这种方式使用它。所以你可以这样做:

<?php if($_GET['page'] == 'tutorials' || $_GET['page'] == 'php' || $_GET['page'] == 'mysql' || $_GET['page'] == 'html' || $_GET['page'] == 'css' || $_GET['page'] == 'js') { ?>

这是另一种语法:

<?php
  if(in_array($_GET['page'], array('tutorials', 'php', 'mysql', 'html', 'css', 'js'))) {
?>

详细了解PHP Control Structuresarraysin_array()

答案 1 :(得分:1)

你不能||这样的字符串。这被PHP解析为true OR true OR true OR ...。必须将if()重写为

if ($_GET['page'] == 'tutorials') || ($_GET['page'] == 'php') || etc....)

答案 2 :(得分:1)

您正在使用||不正确。

基本上你正在做的是测试是否$ _GET ['page'] =='教程',就是这样 - 每个后续的'php','mysql'等评估为true。 所以你得到:

$_GET['page'] || true || true || true || true

简化它。把你所有的东西放在一个数组中,看看它们是否存在。

$pages = array('tutorials', 'php', 'mysql' /* etc */);
if (in_array($_GET['page'], $pages)) {
    // handle
}