2015-12-09 67 views
0

我试图在帖子旁边创建一个链接,以便我可以点击链接并删除帖子。现在,它似乎工作。但是,我似乎无法删除其他用户发布的帖子。现在,使用下面的代码,我可以删除由我制作的帖子。从数据库中删除帖子

我该如何解决这个问题?

这里是我的代码:

<?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

您收到了什么错误?如果ID是一个整数,则可以在$ _GET [id]周围放置单引号。另外,它似乎像$ _GET [id]应该是$ _GET [“id”]; – Josh

+0

此脚本易受SQL注入攻击。查看准备好的陈述。 http://php.net/manual/en/pdo.prepared-statements.php – Josh

+0

尝试var_dump($ _GET ['id'])来查看它是否有任何数据 –

回答

0

首先,mysql_库已过时,在PHP的新版本中删除。我们应该使用更新的更受支持的库,如mysqlipdo。接下来,您将对SQL注入开放,这可能会让您的应用程序完全容易受到恶意用户的攻击。

我们可以很容易地解决它们两个。

首先,我们需要确保提供了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的帖子。

+0

好的,那么我的最后一段代码是什么样的? – Matt