**关闭。**这个问题是not reproducible or was caused by typos。目前不接受答复。
此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
19小时前关闭
Improve this question
我发布了一个类似的帖子,用了一个不同的代码,但现在稍微改变了一下,没有得到我希望的答案(答案对我没有多大帮助)。我希望这是好的,告诉我如果不是。:)
我一直在尝试为管理员页面做页面保护,但我无法让它工作。我相信如果我不是PHP编码的新手,这不会是一个问题,呵呵。
当类型为“0”的普通用户尝试访问管理员页面时,index_admin。php,用户将被重定向到普通用户页面,index。php。如果用户类型为“1”,则user/admin将保留在页面上。
下面是我一直在努力工作的代码。(index_admin中需要该文件。php,它被称为index_admin_check。php)。
index_admin_check。php:
<?php
session_start();
?>
<?php
$vert = "localhost";
$brukarnamn = "root";
$passord = "";
$db_namn = "nettsidebunad";
$tbl_namn = "kunde_register";
// Connection to the MySQL database.
mysql_connect("$vert", "$brukarnamn", "$passord") or die ("Kan dessverre ikkje koble til databasen.");
mysql_select_db("$db_namn") or die ("Kan ikkje finna den ynkjande databasen.");
?>
<?php
if (isset($_SESSION['mittbrukarnamn'])) {
$sql1 = "SELECT `type` FROM $tbl_namn";
$rad1 = mysql_query($sql1);
$type1 = mysql_fetch_row($rad1);
if ($type1 == 0) {
echo "You do not have access to this page.";
//header("location: index.php");
} else {
echo "You have access to this page.";
}
}
?>
本文部分内容为挪威语。
- $vert* = $host(英语)
- $brukarnamn* = $usernamn(英语)
- $passord* = $password(英语)
$db_namn = $db_name(英语)
$tbl_namn = $tbl_name(英语)
$_SESSION['mittbrukarnamn'] = $_SESSION ['myusername'](英语)
2条答案
按热度按时间zfycwa2u1#
您的SQL查询选择了所有行,因为您没有
WHERE
子句。因此,当您调用mysql_fetch_row
时,它只获取第一行。您需要检查当前登录的用户的类型
另一个建议是不要使用MYSQL,而是使用MYSQLi或PDO进行数据库操作,因为MYSQL不再由PHP维护,并且将在PHP 5中完全弃用。5.0.一些MYSQL函数已经被弃用了。
编辑:你的代码中还有另一个问题。
mysql_fetch_row
返回一个数组,因此您需要从数组中检索值。而不是
30byixjq2#
我今天似乎回答了很多问题,我在github上有一个管理面板,似乎可以回答很多关于php登录的常见问题。在本例中,您只需从数据库中获取
type
并使用它。请注意,您必须在SQL中提供WHERE
语句,否则您将无法获得该用户的信息。你会得到那张table上的每一片。下面使用prepared queries。
mysql_*
函数已弃用(不再支持;参见this SO question)我的建议也是使用用户ID,并从数据库中查找所有内容。这样,如果他们的用户名更改,整个网站不会在他们的页面加载时爆炸。
实际比较是:
快速比较检查是否有普通用户登录(例如
if logged_in()
):注意:
db()
是这个类(从长远来看,覆盖mysqli公共函数以缩短代码是很好的,前提是你调用父类):