PHP删除脚本,返回到';viewsubjects.php?课堂id=无值';
正如标题所述。。。我正在从“教室”中删除“主题”。我查看教室,然后可以单击教室查看该教室的主题。因此,我查看主题的链接如下所示:PHP删除脚本,返回到';viewsubjects.php?课堂id=无值';,php,mysql,uri,Php,Mysql,Uri,正如标题所述。。。我正在从“教室”中删除“主题”。我查看教室,然后可以单击教室查看该教室的主题。因此,我查看主题的链接如下所示: viewsubjects.php?classroom=23 当用户选择删除按钮(在一行中)从一个类中删除一个主题时,我只想让用户重定向回教室的主题列表(正好是之前的位置!!) 所以我认为这只是在我的删除脚本中调用教室ID的一个例子。以下是我所拥有的: 编辑:纠正了代码中的拼写错误(这不是问题所在) 主题正在从数据库中删除,但当我重定向回数据库时,URI显示为空教室I
viewsubjects.php?classroom=23
当用户选择删除按钮(在一行中)从一个类中删除一个主题时,我只想让用户重定向回教室的主题列表(正好是之前的位置!!)
所以我认为这只是在我的删除脚本中调用教室ID的一个例子。以下是我所拥有的:
编辑:纠正了代码中的拼写错误(这不是问题所在)
主题正在从数据库中删除,但当我重定向回数据库时,URI显示为空教室ID,如:
viewsubjects.php?教室id=
是否有一种方法可以通过删除脚本成功地传递教室ID,以便在删除后显示,从而允许用户重定向回页面?谢谢你的帮助 为什么不将教室id添加到隐藏字段中的删除表单中?代码中存在拼写错误 将第2行更改为:
$school\u id=$\u GET['school']代码>它应该是$school\u id=$\u GET['school']代码>
不是:$school\u id=$\u GET['classrom\u id']代码>
编辑您已经编辑了代码,但是$\u GET变量中的字符串是否与URL中的字符串匹配?请注意,如果这是一个管理函数:太好了
如果这是在前端,你需要考虑确定主题是干净的,因为它很容易侵入你的站点。
这可能有点冗长……但是让我们看看会发生什么。
if ( !isset($_GET['subject_id']) ) {
echo 'DEBUG: missing GET parameter subject_id';
var_dump($_GET);
die;
}
if ( !isset($_GET['classrom_id']) ) {
echo 'DEBUG: missing GET parameter classroom_id';
var_dump($_GET);
die;
}
else if ( 0===strlen(trim($_GET['subject_id'])) ) {
echo 'DEBUG: empty GET parameter subject_id';
var_dump($_GET);
die;
}
else if ( 0===strlen(trim($_GET['classrom_id'])) ) {
echo 'DEBUG: empty GET parameter classroom_id';
var_dump($_GET);
die;
}
$subject_id = mysql_real_escape_string($_GET['subject_id'], $connection);
$sql = "DELETE FROM subjects WHERE subject_id='$subject_id'";
$result = mysql_query($sql, $connection) or die("MySQL Error: ".mysql_error());
if ( 0===mysql_affected_rows($connection) ) {
echo 'no such subject_id found. no records have been deleted';
die;
}
header("Location: viewsubjects.php?classroom_id=".urlencode($_GET['classrom_id']));
exit();
(它还修复了sql注入漏洞)如果响应上述命令,则更容易执行:
if (!isset($_GET['subject_id']) || empty($_GET['subject_id']) || !is_numeric($_GET['subject_id'])) {
throw new exception('Subject Id is not set');
}
必须仅使用POST方法而不是GETT来执行删除操作为了避免SQL注入(请参阅),您应该转义$subject\u id
,或者确保它是一个整数;使用,例如:“从subject_id=”的主题中删除。intval($subject_id)代码>我在其他脚本上使用GET执行了删除操作,它可以正常工作吗?或者你的意思是另一种意思?@Derek至于你的问题,你只是没有在这里显示删除表单的html代码。我猜,你没能把教室id传给老师,跟你的桌子说再见。。。php?教室=23';下拉+表格+主题;如果在删除表单时可以从数据库中读取表单,为什么还要在表单中添加更多内容?像这样扩展表单是不必要的,而且需要做更多的工作。免费建议:打开或查看您的错误日志,您可能会注意到错误,因为您正在读取一个不存在的变量。这是错误的,因为我没有粘贴代码,我在问题中键入了错误,这是因为您没有粘贴真实的测试代码;-)将代码简化为基本部分没有什么错。但请确保删节的版本显示了相同的行为,并且没有引入新的错误。这是浪费时间,也是我们所有人的负担……你的问题不完整,仍然没有得到纠正,是吗?您使用?课堂=23来调用列表页面,但更重要的是,如何调用删除脚本?教室=23还是?教室id=23?
if (!isset($_GET['subject_id']) || empty($_GET['subject_id']) || !is_numeric($_GET['subject_id'])) {
throw new exception('Subject Id is not set');
}