从数据库删除帖子

时间:2015-12-09 01:32:26

标签: php html database post

我正在尝试在帖子旁边创建一个链接,这样我就可以点击该链接并删除帖子。现在,它似乎工作。但是,我似乎无法删除其他用户发布的帖子。现在,通过下面的代码,我可以删除我发布的帖子。

我该如何解决这个问题?

这是我的代码:

<?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();

?>

1 个答案:

答案 0 :(得分:0)

首先,mysql_库已弃用,将在较新版本的php中删除。我们应该使用更新,更受支持的库,例如mysqlipdo。接下来,您对SQL注入持开放态度,这可能使您的应用程序完全容易受到恶意用户的攻击。<​​/ p>

我们可以轻松解决这两个问题。

首先,我们需要首先确保已提供id参数,以便我们的脚本不会不必要地产生undefined index错误。

$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的帖子。