如何通过PHP依据Session ID隐藏按钮?现有实现失效求解决
解决用户资料编辑按钮的显示控制问题
你现在的代码里有一个关键错误导致逻辑失效——在判断当前登录用户ID和访问的资料ID是否一致时,用了赋值运算符=而不是比较运算符==(或===)。=会把$id的值赋给$_SESSION['id'],而不是做相等判断,所以这个条件永远会“成立”,编辑按钮会一直显示。
修正后的完整代码示例
<?php // 先确保Session已经启动(如果代码中还未启动的话) if (!isset($_SESSION)) { session_start(); } // 初始化变量,避免后续出现未定义错误 $use = null; $id = null; // 处理用户ID的获取与数据库查询 if (isset($_GET['id'])) { $id = mysqli_real_escape_string($conexion, $_GET['id']); // 推荐使用预处理语句提升SQL安全性(比直接拼接更可靠) $stmt = mysqli_prepare($conexion, "SELECT * FROM users WHERE id = ?"); mysqli_stmt_bind_param($stmt, "i", $id); mysqli_stmt_execute($stmt); $infouser = mysqli_stmt_get_result($stmt); $use = mysqli_fetch_array($infouser); } // 条件判断:仅当登录用户ID与访问资料ID严格一致时,显示编辑按钮 if (isset($_SESSION['id']) && isset($id) && $_SESSION['id'] === $id) { ?> <button class="ml-4" id="edit" data-toggle="modal" data-target="#exampleModalCenter">编辑资料</button> <?php } ?>
关键修改说明
- 修复比较逻辑:把
$_SESSION['id'] = $id改为$_SESSION['id'] === $id,===是严格相等比较,会同时检查值和数据类型,避免比如字符串ID与数字ID的误匹配问题。 - 增加安全边界检查:
- 先判断Session是否启动,防止
$_SESSION未定义报错。 - 检查
$_SESSION['id']和$id是否都存在,避免因变量未定义导致的逻辑混乱。
- 先判断Session是否启动,防止
- 优化SQL查询安全性:替换直接拼接SQL的写法,使用mysqli预处理语句,能更彻底地防范SQL注入风险。
额外注意事项
- 确保你的
$conexion数据库连接是正常生效的,否则用户信息查询会失败。 - 如果用户未登录(
$_SESSION['id']不存在),编辑按钮会自动隐藏,符合未登录用户无法编辑资料的逻辑。
内容的提问来源于stack exchange,提问作者Mario Ramos García
相关产品推荐
相关产品推荐

