You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 07:57:34