PHP动态导航菜单active标签异常问题求助
解决动态导航菜单所有项都添加active类的问题
问题根源
你当前的判断条件if($_SERVER['PHP_SELF'] == $_SESSION['page'])逻辑完全错误:$_SESSION['page']本身就是从basename($_SERVER['PHP_SELF'])存入的,这两个值要么永远相等(如果环境中$_SERVER['PHP_SELF']刚好是不带路径的文件名),要么永远不等,但无论哪种情况,都无法正确匹配当前导航项。最终导致循环中每个导航项都满足条件,被加上active类。
修复步骤
1. 优化currentPage.php(可选,减少不必要的session存储)
如果仅用于导航判断,无需将当前页存入session,直接定义变量即可:
<?php // 若其他业务需要session,需先开启 // session_start(); $currentPage = basename($_SERVER['PHP_SELF']); ?>
2. 修正fetchPages.php的判断逻辑
核心是将当前循环项的pageUrl与当前页面的文件名做对比:
<?php include 'connect.php'; include 'currentPage.php'; $sql = "SELECT pageTitle, pageUrl FROM pages ORDER BY id"; $result = mysqli_query($con, $sql); $msg = ""; if(mysqli_num_rows($result) == 0){ $msg = "No pages found"; } ?> <?php if(!empty($msg)) echo $msg; ?> <?php while ($row = mysqli_fetch_assoc($result)) { // 提取导航项URL的文件名(若pageUrl包含路径) $navPage = basename($row['pageUrl']); // 判断是否为当前页面 $activeClass = ($navPage == $currentPage) ? 'active' : ''; ?> <a class="<?php echo $activeClass; ?>" href="<?php echo $row['pageUrl'] ?>"><?php echo $row['pageTitle'];?></a> <?php } ?> <br>
额外注意事项
- 若
pages表中pageUrl字段存储的是不带路径的纯文件名(如index.php),可直接用$row['pageUrl'] == $currentPage,无需调用basename()。 - 所有使用session的页面必须先调用
session_start(),否则$_SESSION变量会失效。
内容的提问来源于stack exchange,提问作者xavier93
相关产品推荐
相关产品推荐

