为什么my delete.php不删除数据库内容?
我已经在我的网站的管理端工作了一段时间。我已经成功地创建了一个添加页面,在数据库mysql中向数据添加项目。但是当添加delete.php页面时,它工作得不太好。当我选择一个我不再需要的页面并单击“删除”按钮时,这个消息会出现,当我检查我的网站时也不会出现错误删除该条 这是我的delete.php代码为什么my delete.php不删除数据库内容?,php,Php,我已经在我的网站的管理端工作了一段时间。我已经成功地创建了一个添加页面,在数据库mysql中向数据添加项目。但是当添加delete.php页面时,它工作得不太好。当我选择一个我不再需要的页面并单击“删除”按钮时,这个消息会出现,当我检查我的网站时也不会出现错误删除该条 这是我的delete.php代码 <?php include ("dbase.php"); //Use method $_Get to retrieve data from url $id=$_GET['id']; m
<?php
include ("dbase.php");
//Use method $_Get to retrieve data from url
$id=$_GET['id'];
mysql_query("DELETE FROM logbook WHERE id=$id");
echo mysql_error();
header('Location:delete.php');
?>
有人能看出我哪里出了问题吗?如果你需要更多的信息,请告诉我。
谢谢。您当前加载
delete.php
,从数据库中删除,然后重定向到delete.php
。重新加载delete.php
时,从数据库中删除,然后重定向到delete.php
。当您重新加载delete.php
时,您就明白了这一点
这就是错误“重定向循环”的来源;它永远不会结束。尝试注释您的
标题()
调用,或将位置更改为另一个页面,如deleted.php
您需要检查$\u GET['id']
是否存在。只有这样,您才能执行查询,然后重定向
if (!empty($_GET['id'])) {
mysql_query("DELETE FROM logbook WHERE id=$id");
header('Location:delete.php');
}
一旦
delete.php
没有id
的querystring参数,它就不会重新加载并导致无限循环。您的代码存在逻辑和严重的安全问题。
使用至少“mysqli”,PDO,prepared语句。阅读一点并保护您的web应用程序
如果该代码在“delete.php”中,那么您应该重定向到其他地方或使用如下逻辑
<?php
if($_GET['id'])
{
include ("dbase.php");
//Use method $_Get to retrieve data from url
$id=addslashes($_GET['id']);
mysql_query("DELETE FROM logbook WHERE id=".mysql_real_escape_string($id).")" or die(mysql_error());
header('Location: delete.php');
}
?>
FYI,您完全可以看到,我认为这是一个错误。在使用header()
之前,您不能打印到其他页面,因此删除echo
并且您也没有错误处理。您重定向到同一页面,您应该重定向到其他页面,而不是,因此它被卡在无限循环中。实际上,header在这里没有任何意义,无论出于什么原因,他都不需要在delete.php上重定向,最好是重定向到源页面。你怎么知道它不是源页面?你在做一个假设。这个页面可以列出一堆可能被删除的项目,也可以进行删除。很明显,他使用单独的页面进行删除操作,就像初学者教程所显示的那样,我可以理解,因为使用了get var和页面名称。嗯,我看,他使用单独的页面删除行,比如说一个带有row id的链接指向delete.php,因此如果他有一个单独的页面,并且说get是第一次使用row id设置的,它将从db中删除该行,并重定向回同一页面,这就是页面重定向到白色页面的地方,但不会因为空()而导致无限循环,所以我肯定这不是同一个问题page@tyra是否仅使用单独的页面从dbaddslashes()中删除该行?不会让事情变得更好。。。他的代码仍然易受sql攻击injections@Mr.外星人-它很脆弱,但如果有人决定输入单引号或双引号,它至少不会因错误而崩溃。这就是为什么你有“mysql\u real\u escape\u string”。用户还可以使用内置PHP filter()函数进行清理或验证。您应该了解SQL注入以及如何避免它。我现在就可以删除您的整个数据表。@tyra,详细说明一下(因为我以前在手机上),我可以转到delete.php?id=0或id不为NULL
。使用当前代码,SQL语句的计算结果将是从日志中删除,其中id=0或id不为NULL
;删除整个表。