Php 仅允许文章的确切用户对其进行编辑
假设我有一个如下的posts表:Php 仅允许文章的确切用户对其进行编辑,php,Php,假设我有一个如下的posts表: 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
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是users表的外键
假设在用户通过EDIT.php页面登录到他的帐户执行编辑操作后,我可以使用$\u session['user\u id']记录用户会话。并假设我可以获得$\u将post\u id放入hyperlink edit.php?id=1进行编辑
如您所见,每个用户id都有一个特定的post\u id和唯一的登录会话。我的问题是,例如,当Eric user_id 12先生浏览他自己的帖子帖子时,post_id 1通过手动将edit.php?id=1更改为edit.php?id=2来进行操作,然后他编辑其用户_id实际上是user_id 70的帖子,这在逻辑上是不允许的
我确实尝试了以下查询,但未能按预期检查正确的用户会话:
$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!';
}
你能帮忙吗?谢谢大家! 它看起来像是&&in if$uid&$uid!=$当前_用户{应为| |
这行代码看起来像是在伪代码中说的,如果$uid不存在,并且$uid不等于$current user,请执行某些操作,否则什么也不做。$uid确实存在于示例中,因此它将返回FALSE并跳过整个if
这意味着$uid不必与$current\u用户匹配,它只需要存在并且可以编辑任何内容。var\u转储$uid和$current\u用户,比较它。检查变量是否在循环中定义。不检查SQL中的变量。最后一个if语句会显示它是否为false,因为它永远不会为false,因为您可以将它分配给u已登录用户的ser id或-1都不是false,除非您的用户id为零-falsy。@crowler:我在while循环中定义了它,但仍然失败。不确定它是否正确?代码是if!定义的'edit'{if!$uid&&$uid!=$current_user{…}定义的'edit',TRUE;}你能帮我找到一个答案吗?我真的被卡住了!@HendraLim:在做了var_转储并比较它们之后,它显示如下string1 1 string2 70 string2 70 string1 1。你能帮我找到正确的条件吗?你能把var_转储放在while循环中吗?我尝试了这个,但失败了!