论坛

时间:2016-07-15 16:02:41

标签: php mysql

我创建了这个php文件,允许用户删除我论坛上的帖子。我想要做的是确保用户只能删除他们自己的帖子,除非他们是管理员。到目前为止,用户可以删除自己的帖子。但是,管理员无法删除他们未创建的帖子,并且代码在DELETE查询中返回false。我做错了什么?

2或更高的user_level是管理员。 0表示普通用户。

注意:我知道此代码中的SQL注入漏洞。一旦逻辑部分完成,我将修复它。

<?php
include 'connect.php';
include 'header.php';

$id = $_GET['post_id'];

if (isset($_SESSION['signed_in'])) {

    $sql= "SELECT * FROM posts WHERE post_id=$id";
    $post_data=$link->query($sql);
    if($post_data->num_rows > 0) {
        if($row=$post_data->fetch_assoc()) {
        }
    }
    if (!$_SESSION['user_level'] === 2  ) {

        echo 'You need to be an admin to delete other peoples posts.';
    }
    else {

        if ($_SESSION['user_id'] === $row['post_by']) {
            $delsql2= 'DELETE FROM posts WHERE post_id='.$id;
            $stmt2= $link->query($delsql2);
            header ('Location:index.php');
        }
        else {
            var_dump($_SESSION);
            echo 'You can only delete your own posts.';
        }
    }
}
else {
    echo 'You must be signed in to delete a post.';
}
?>

3 个答案:

答案 0 :(得分:0)

您的比较存在缺陷

if (!$_SESSION['user_level'] === 2) {

这并不意味着&#34;如果等级不是2&#34;,则表示&#34;如果等级不是2&#34;。你需要把不平等放在正确的地方

if ($_SESSION['user_level'] !== 2) {

或者,如果由于某种原因你真的想在逻辑上否定那么

if (!($_SESSION['user_level'] === 2)) {

答案 1 :(得分:0)

既然您需要查看此人是否是管理员,或者是否是他们自己的帖子,那么在以下情况下执行此操作:

b

这将消除第一个(坏)if语句。

答案 2 :(得分:0)

if ($_SESSION['user_id'] === $row['post_by']) {

如果未设置所有变量,则很难扫描列表。关于引用行,必须让user_id删除post_by发布的帖子。对于您是一名可以删除所有内容的管理员这一事实,是否应该有OR案例?

e.g。

if (($_SESSION['user_id'] === $row['post_by']) || ($_SESSION['user_level'] < 2)) 
{ ..do your stuff..} else { echo("Not allowed to delete."); }

上面的部分

if (!$_SESSION['user_level'] === 2  ) {
echo 'You need to be an admin to delete other peoples posts.';
} else {

没有必要,可以删除。