假设我有一个帖子表,如下所示:
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!';
}
你能帮忙吗?谢谢!
答案 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,它必须存在且可以编辑任何内容。