【发布时间】:2020-08-07 11:50:16
【问题描述】:
我有一个如下所示的 php 代码,其中 用户名/密码 通过 db 验证,只允许一个用户登录(在下面 php 代码中的第 X 行)强>。
在 php 代码中,表 trace_users(user_name、open、write 是列)保持登录用户的轨迹。当任何用户登录时,open 列设置为 true,write 列的值为 1。如果用户注销,则 open 列设置为 false,write 列的值为 0。
登录用户 => open = true, write = 1
当用户注销时 => open = false, write = 0
php代码:
if ($user_from_db && password_verify($password, $user_from_db->user_pass)) {
$sql = "SELECT * FROM trace_users where open='true'";
if($result1 = mysqli_query($connect, $sql)){
if(mysqli_num_rows($result1) > 0){ // Line X
while($row = mysqli_fetch_array($result1)){
if($row['open'] == "true") {
if(!isset($_SESSION['admin'])) {
$message = "user " . $row['user_name'] . " is currently editing the form. Want to take over ?";
echo "<script type='text/javascript'>if(confirm('$message')) { } else { };</script>"; // Line A
}
break;
}
}
} else{
$_SESSION['admin'] = true;
$_SESSION['user_name'] = $username;
$open="true";
$write="1";
$stmt= $connect->prepare("UPDATE trace_users SET open=?, write=? WHERE user_name=?");
$stmt->bind_param('sss', $open, $write, $_SESSION['user_name']);
$stmt->execute();
}
}
} else {
echo "Invalid Username or Password";
}
在 A 行,如果 userA 已登录并且另一个用户让说 userB 尝试登录,那么它将显示 userA is currently editing the form. Want to take over ?。
我想要实现的是,如果 userB 接管表单在警报框中单击确定,那么 userA 应该进入只读模式(撤销写权限)和 userB 应该
被授予完全访问权限(写入)。
userA => open = true, write = 0
userB => open = true, write = 1
这是我尝试过的:
在 A 行之后,我正在考虑添加这些行,以便尝试接管的用户应该能够登录。
$_SESSION['admin'] = true;
$_SESSION['user_name'] = $username;
$open="true";
$write="1";
$stmt= $connect->prepare("UPDATE trace_users SET open=?, write=? WHERE user_name=?");
$stmt->bind_param('sss', $open, $write, $_SESSION['user_name']);
$stmt->execute();
问题陈述:
我想知道我应该在上面的 php 代码中进行哪些更改,以便如果 userA 已登录并且 userB 也想登录并尝试接管表单 那么 userA 应该没有写入权限,并且 userB 应该被授予完全访问权限,即
用户A(open=true , write=0)
用户B(open=true, write=1)
注意:对于没有写入权限的用户,将不会显示保存按钮。
【问题讨论】:
-
我可能理解错了,但是按照你的说法,应该只是 UserA: open = true, write = false and UserB open = true, write = false?我错过了什么吗?
-
如果用户 A 已登录 (open=true, write=1) 并且用户 B 接管,则用户 B 应该是 open=true, write=1。接管用户 A 将是 (open=true, write=0)
-
我同意,那有什么问题呢?你想要 php 代码来执行更改吗?看来您已经知道该怎么做了,也许我理解错了?
-
我尝试了一些东西,但我不确定它是对还是错。如果用户 B 接管,则应为用户 A 授予只读访问权限。用户 A => open = true,write = 0 和 User B => open = true,write = 1。
-
我的 php 代码在打开的列中只允许一个真值(一次只能登录一个)。