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

如何通过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 } ?>

关键修改说明

  1. 修复比较逻辑:把$_SESSION['id'] = $id改为$_SESSION['id'] === $id,===是严格相等比较,会同时检查值和数据类型,避免比如字符串ID与数字ID的误匹配问题。
  2. 增加安全边界检查:
    • 先判断Session是否启动,防止$_SESSION未定义报错。
    • 检查$_SESSION['id']和$id是否都存在,避免因变量未定义导致的逻辑混乱。
  3. 优化SQL查询安全性:替换直接拼接SQL的写法,使用mysqli预处理语句,能更彻底地防范SQL注入风险。

额外注意事项

  • 确保你的$conexion数据库连接是正常生效的,否则用户信息查询会失败。
  • 如果用户未登录($_SESSION['id']不存在),编辑按钮会自动隐藏,符合未登录用户无法编辑资料的逻辑。

内容的提问来源于stack exchange,提问作者Mario Ramos García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:00:41