仅允许帖子的EXACT用户进行编辑

时间:2014-08-14 03:31:23

标签: php

假设我有一个帖子表,如下所示:

post_id       topic_id       user_id     content         date
 1               7            12         bla bla         7/15/2014
 2               16           70         bla bla         7/16/2014
 3               7            14         bloa bla        7/20/2014

其中user_id是用户表的外键。

假设我在登录其帐户后执行 EDIT 操作(通过edit.php页面)后,可以使用$_SESSION['user_id']记录用户会话。并假设我可以将($_GET) post_id导入超链接edit.php?id = 1进行编辑。

如您所见,每个user_id都有一个post_id个唯一的登录会话。我的问题是,例如,当Mr.Eric (user_id #12)通过手动将(post_id#1)更改为edit.php?id=1来浏览自己的帖子edit.php?id=2 做了一次技巧 ,然后他编辑post_id#2,其user_id实际上是user_id#70,逻辑上 NOT ALLOWED

我确实尝试了以下查询,但我没有按照我的意愿检查正确的用户会话:

$q="SELECT user_id, post_id, content
        FROM posts
        WHERE user_id = {$_SESSION['user_id']}
        ";

$r = mysqli_query ($dbc, $q);

while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
$uid = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : -1;
$current_user = $row['user_id'];
}

if(!$uid && $uid != $current_user){
   echo 'sorry, but this is not your own post for editing!';
}
你能帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:0)

看起来&&中的if(!$uid && $uid != $current_user){应为||

该行看起来像是伪代码if $uid doesn't exist AND $uid does not equal $current user do something, otherwise, do nothing。 $ uid在您的示例中存在,因此它将返回FALSE并跳过整个if

这意味着$ uid不必匹配$ current_user,它必须存在且可以编辑任何内容。