$_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>
额外建议(提升代码健壮性)
- 验证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"); }
- 修复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
相关产品推荐
相关产品推荐

