我正在尝试在帖子旁边创建一个链接,这样我就可以点击该链接并删除帖子。现在,它似乎工作。但是,我似乎无法删除其他用户发布的帖子。现在,通过下面的代码,我可以删除我发布的帖子。
我该如何解决这个问题?
这是我的代码:
<?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();
?>
答案 0 :(得分:0)
首先,mysql_
库已弃用,将在较新版本的php中删除。我们应该使用更新,更受支持的库,例如mysqli
或pdo
。接下来,您对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
的帖子。