PHP表单中isset()验证$_GET变量失效问题求助
问题分析与解决方案
嘿,我一眼就揪出问题啦!你代码里犯了个超容易忽略的小错误——把超全局变量$_GET写成了$GET,少了前面的下划线!
PHP里的GET请求参数是存在$_GET这个以下划线开头的超全局数组里的,少了下划线之后,$GET就变成了一个未定义的普通变量,isset($GET['delete'])自然永远返回false,所以根本进不了if分支。而你直接echo $GET['delete']能输出?不对,应该是你实际测试时写的是$_GET['delete']吧😉
修正后的核心代码
把判断条件里的$GET改成$_GET就正常了:
// 修正前错误写法:if (isset($GET['delete'])){ if (isset($_GET['delete'])){ $id = $_GET['delete']; $query="DELETE FROM books WHERE isbn=$id"; mysqli_query($con,$query); header("Location: /Login/welcome.php"); exit(0); }
额外重要提醒
你现在直接把$_GET的值拼进SQL语句里,这会导致严重的SQL注入漏洞!恶意用户随便构造个delete参数,就能删掉你整个数据库或者窃取数据。推荐用mysqli预处理语句来修复这个安全问题,示例如下:
if (isset($_GET['delete'])){ $id = $_GET['delete']; // 使用预处理语句避免SQL注入 $query = "DELETE FROM books WHERE isbn = ?"; $stmt = mysqli_prepare($con, $query); mysqli_stmt_bind_param($stmt, "s", $id); // "s"代表字符串类型,根据你的isbn字段类型调整 mysqli_stmt_execute($stmt); header("Location: /Login/welcome.php"); exit(0); }
这样既解决了isset不生效的问题,又把代码的安全性拉满啦!
内容的提问来源于stack exchange,提问作者Rayan9X
相关产品推荐
相关产品推荐

