Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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
Php 从数据库中删除帖子_Php_Html_Database_Post - Fatal编程技术网

Php 从数据库中删除帖子

Php 从数据库中删除帖子,php,html,database,post,Php,Html,Database,Post,我试图在帖子旁边创建一个链接,这样我就可以点击链接并删除帖子。现在,它似乎起作用了。然而,我似乎无法删除其他用户的帖子。现在,有了下面的代码,我就可以删除我写的帖子了 我怎样才能解决这个问题 这是我的密码: <?php session_start(); //echo $_GET[ID]; if ($_SESSION['Access'] <> "D"){ header("location:example.com"); exit(); } $con = my

我试图在帖子旁边创建一个链接,这样我就可以点击链接并删除帖子。现在,它似乎起作用了。然而,我似乎无法删除其他用户的帖子。现在,有了下面的代码,我就可以删除我写的帖子了

我怎样才能解决这个问题

这是我的密码:

<?php

session_start();

//echo $_GET[ID];

if ($_SESSION['Access'] <> "D"){
    header("location:example.com");
    exit();
}

$con = mysql_connect("---","---","---");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("---", $con);


$sql ="DELETE FROM Posts WHERE ID = '$_GET[id]'";

//$sql = 'INSERT INTO `Entries` (`ID`, `Date`, `Content`, `Username`) VALUES (NULL, CURDATE(), \'blah\', \'Ryan\');';

if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}

mysql_close($con);

header("location:example.com");

exit();

?>

首先,
mysql\uuz
库已弃用,将在较新版本的php中删除。相反,我们应该使用更新的、更受支持的库,如
mysqli
pdo
。接下来,您对SQL注入非常开放,这可能使您的应用程序完全容易受到恶意用户的攻击

我们可以很容易地解决这两个问题

首先,我们需要确保提供了
id
参数,这样我们的脚本就不会不必要地产生
未定义的索引
错误

$id = isset($_GET['id']) ? $_GET['id'] : false;

if($id){
    //now we do everything else in here
}
接下来,我们将使用
MySQLI
库创建一个面向对象的连接。这将在
if($id)
条件中继续

$con = new mysqli('host', 'user', 'pass', 'database');
现在,我们将继续使用
prepared
语句安全地删除它,并将我们的值绑定到查询,而不是直接传递它们

$stmt = $con->prepare('delete from Posts where ID = ?');
$stmt->bind_param('i', $id);

$result = $stmt->execute();
$stmt->store_result();

if($result){
    echo 'Safely deleted '. $stmt->num_rows .' rows from the database.';
} else {
    echo 'Failed to delete from the database.';
}

这是执行删除操作的安全方法。但是,您还应该检查用户是否有删除权限等。否则,任何用户都可以通过
example.com/delete.php?id=18
并删除id为
18
的帖子。

您收到了什么错误?如果ID是整数,则可以在$\u GET[ID]周围删除单引号。而且,看起来$_GET[id]应该是$_GET[“id”];此脚本易受SQL注入攻击。研究准备好的陈述。尝试var_dump($_GET['id'])查看它是否有任何数据。我没有收到任何错误。这可以删除我写的帖子,但当我试图删除别人写的帖子时,这不起作用。好吧,那么我的最后一段代码是什么样子的呢?