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

$_GET全局变量ID未传递至管理员删除页面问题排查

问题原因与解决方案

核心问题:链接未正确输出管理员ID

你遇到的问题根源在list_admins.php的编辑和删除链接代码中——你没有使用echo输出管理员的ID值,导致生成的URL里id参数是空的,自然delete_admin.php无法通过$_GET['id']获取到有效数据。

看这段代码:

<td><a href="edit_admin.php?id=<?php $admin->id; ?>">Edit</a></td>
<td><a href="delete_admin.php?id=<?php $admin->id; ?>" onclick="return confirm('Are you sure you want to delete <?php echo $admin->id?>?');">Delete</a></td>

这里的<?php $admin->id; ?>只是访问了对象的属性,但没有把值输出到HTML中,所以最终生成的链接是delete_admin.php?id=(后面没有ID数字),$_GET['id']自然不存在。

修复步骤

把两处未输出ID的代码修改为带echo的版本:

<td><a href="edit_admin.php?id=<?php echo $admin->id; ?>">Edit</a></td>
<td><a href="delete_admin.php?id=<?php echo $admin->id; ?>" onclick="return confirm('Are you sure you want to delete <?php echo $admin->id?>?');">Delete</a></td>

如果你的PHP配置允许短标签,也可以用更简洁的写法:

<td><a href="edit_admin.php?id=<?= $admin->id; ?>">Edit</a></td>
<td><a href="delete_admin.php?id=<?= $admin->id; ?>" onclick="return confirm('Are you sure you want to delete <?= $admin->id?>?');">Delete</a></td>

额外建议(提升代码健壮性)

  1. 验证GET参数:在delete_admin.php中先校验参数的有效性,避免直接使用未验证的$_GET['id']导致错误:
<?php
require_once("../../includes/initialize.php");
if (!$session->is_logged_in()) { redirect_to("login.php"); }

// 新增参数校验
if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
    $message = "Invalid admin ID";
    redirect_to("list_admins.php");
}

$admin_id = (int)$_GET['id']; // 强制转为整数,降低SQL注入风险
$admin = User::find_by_id($admin_id);

// 检查是否找到管理员
if (!$admin) {
    $message = "Admin not found";
    redirect_to("list_admins.php");
}
  1. 修复User类的小问题:注意到User类的authenticate方法中,SQL语句使用的是FROM users,但类定义的$table_name是admins,这会导致登录验证失败,建议修改为:
public static function authenticate($username="", $password="") {
    global $database;
    $username = $database->escape_value($username);
    $password = $database->escape_value($password);

    $sql = "SELECT * FROM ".self::$table_name." "; // 改为使用类的表名常量
    $sql .= "WHERE username = '{$username}' ";
    $sql .= "AND password = '{$password}' ";
    $sql .= "LIMIT 1";

    $result_array = self::find_by_sql($sql);
    return !empty($result_array) ? array_shift($result_array) : false;
}

内容的提问来源于stack exchange,提问作者Chris Mazzochi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:46:15