Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么my delete.php不删除数据库内容?_Php - Fatal编程技术网

为什么my 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

我已经在我的网站的管理端工作了一段时间。我已经成功地创建了一个添加页面,在数据库mysql中向数据添加项目。但是当添加delete.php页面时,它工作得不太好。当我选择一个我不再需要的页面并单击“删除”按钮时,这个消息会出现,当我检查我的网站时也不会出现错误删除该条

这是我的delete.php代码

<?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
;删除整个表。