我有这个基本查询,显示哪个用户可以访问哪个页面。
$query = mysql_query("SELECT UserName FROM tblUsers WHERE PageOne = 1") or die (mysql_error());
基本上,这是从有权访问PageOne的所有用户进行检查。
我正在尝试比较 $ currentUser = $ _SESSION ['username'] (正确显示已登录的用户)是否为此人。
获得所有用户后,
我创建这个简单的循环来检查他们是否有权访问。
while ($row = mysql_fetch_assoc($query))
{
if (in_array($currentUser,$row["UserName"]))
echo "you have access"; //for testing purposes
else
die("you're not authorized");
}
这将始终进入else语句,而不应该。如果我尝试调试这个,我发现在查询中应该有三个用户,但 $ row [“UserName”] 只返回一个用户(第一个)。
但是,如果我删除if / else语句并只打印$ row [“UserName”],它会打印正确的用户。
那么,我将如何解决这个问题?
谢谢!
修改
在while循环中,如果我运行echo $ row [“UserName”] ,我会得到User1User2User3(其中User3是CurrentUser)
要调试,我运行
if ($currentUser == $row["UserName"])
echo "you have access";
else
echo $row["UserName"];
我得到了
User1User2您有权访问
答案 0 :(得分:2)
您发布的代码仅在返回的第一行恰好与当前用户匹配时才有效。否则循环终止。你可能想要更像这样的东西:
$has_access = false;
while ($row = mysql_fetch_assoc($query))
{
if ($currentUser==$row["UserName"])
{
$has_access = true;
break;
}
}
// check $has_access here ...
但是,如果我这样做,我会将整个检查移动到您的SQL查询中并完全摆脱循环(未经测试):
$query = sprintf("SELECT UserName FROM tblUsers WHERE PageOne = 1 AND UserName = '%s'", mysql_real_escape_string($currentUser));
$result = mysql_query($query) or die (mysql_error());
$has_access = mysql_num_rows($result) > 0;
// check $has_access
答案 1 :(得分:2)
不是解决问题的方法。
首先,看起来您的数据库架构没有规范化 - 用户是一个实体,页面是不同的实体,谁有权访问应在第三个表中定义的页面(分解N:M关系)。 / p>
我正在尝试比较$ currentUser = $ _SESSION ['username']
为什么要获取每一行数据以确定当前用户是否具有访问权限:
$qry=mysql_query("SELECT COUNT(username)
FROM tblUsers
WHERE PageOne = 1 and username='"
. mysql_real_escape_string($_SESSION['username'])
. "'");
请记住,您还应该使用未弃用的API重新实现代码。因此它应该是:
$qry=mysqli_query("SELECT COUNT(username) as allowed_match
FROM users u
INNER JOIN permissions p
ON u.id=p.user_id
WHERE p.page='PageOne'
and p.allowed = 1
and u.username='"
. mysqli_real_escape_string($_SESSION['username'])
. "'");
答案 2 :(得分:1)
在while的每个循环中,它获取查询结果的值。另外,如果你在元素不等于当前用户时死掉,除非$ currentUser是$ row []的第一个元素,否则每次都会死掉。所以if应该是:
public function checkUserInTable($tableNumber){
$query = mysql_query("SELECT UserName FROM tblUsers WHERE PageOne = ".$tableNumber."") or die (mysql_error());
while ($row = mysql_fetch_assoc($query)) {
if($currentUser == $row["UserName"]){
echo "you have access";
return true;
}
}
return false;
}
函数调用:
if(checkUserInTable(1))
echo "User Accepted";
else
die("Error Message");