Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 仅允许文章的确切用户对其进行编辑_Php - Fatal编程技术网

Php 仅允许文章的确切用户对其进行编辑

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

假设我有一个如下的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         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循环中吗?我尝试了这个,但失败了!