PHP实现单次点击设置变量并携带新值重载页面的方法
你当前通过a标签GET传参的实现本身就符合单次点击传参、重载加载对应页面的需求,是这类场景下的常规实现方案,可以从安全性、可维护性两个方向做优化,更适配后续迭代:
1. 首要优化:补全安全校验
你当前直接用GET参数拼接文件名做include操作,存在路径遍历注入风险,比如恶意用户传入pageName=../数据库配置这类参数,就可能读取到站点非公开的敏感文件。你可以用白名单校验解决这个问题,用到in_array()函数校验传入的页面名是否在允许的列表内。
2. 代码简化优化
原有的多层if判断取值逻辑可以用PHP7+支持的空合并运算符??简化,代码更简洁易读。
3. 导航代码复用优化
原有的导航栏每个li都是手写,后续加新页面需要重复写HTML结构,可以把导航配置存为数组,循环输出导航项,后续加页面只要改配置数组即可,不用修改HTML结构。
优化后代码示例
主页面代码
<?php // 定义允许加载的页面白名单,新增页面只要往这里加对应文件名即可 $allowPages = ['Home', 'Page1', 'Page2', 'Page3']; // 简化取值逻辑,参数不存在/为空时默认取Home $pageName = $_GET['pageName'] ?? 'Home'; // 白名单校验,非法参数自动切回首页 $pageName = in_array($pageName, $allowPages) ? $pageName : 'Home'; include "head.php"; ?> <!-- 其余页面代码在此处 --> <?php include $pageName . ".php"; ?>
头部导航栏代码
<?php // 导航配置可以和主页面白名单共用,抽成公共配置文件维护更方便 $navConfig = [ 'Home' => '首页', 'Page1' => '页面1', 'Page2' => '页面2', 'Page3' => '页面3' ]; foreach ($navConfig as $pageKey => $pageName) { ?> <li class="menu-item"> <a style="font-size: 24px;" href="/My Website?pageName=<?php echo $pageKey; ?>"> <?php echo $pageName; ?> </a> </li> <?php } ?>
用到的相关函数说明
in_array():校验传入值是否在指定数组内,用于实现白名单逻辑,防范路径注入风险- 空合并运算符
??:替代多层isset()判断,快速为不存在的参数设置默认值 htmlspecialchars()(可选):如果后续有用户自定义输入的参数输出到HTML场景,用该函数转义特殊字符,防范XSS攻击- 如果你需要把文字链接改成按钮样式,直接给a标签加CSS样式即可,无需修改现有传参逻辑,当前的a标签GET传参方案已经是单次点击操作场景下的最轻量实现,比用form表单提交的方案更简洁高效。
内容的提问来源于stack exchange,提问作者TamiJo
相关产品推荐
相关产品推荐

