在我的代码中,我有一个名为“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>
答案 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'))) {
?>
答案 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
}