我发布了一个类似的帖子,这个用不同的代码,但改变了它 现在一点点,并没有得到我希望的答案( 答案对我没有多大帮助)。我希望这是好的,告诉我,如果不是。 :)
我一直在尝试为管理员页面设置页面保护,但我无法让它工作。我相信如果我不是PHP编码的新手,这不会是一个问题,呵呵。
当普通用户的类型为' 0'正在尝试访问管理员页面 index_admin.php ,用户将被重定向到普通用户页面 index.php 。如果用户的类型为' 1',则用户/管理员将留在该页面上。
以下是我一直努力工作的代码。 (此文件在 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 [&#39; mittbrukarnamn&#39; ] = $ _SESSION [&#39; myusername&#39;](英文)
答案 0 :(得分:1)
您的SQL查询正在选择所有行,因为您没有WHERE
子句。因此,当您致电mysql_fetch_row
时,它只会抓取第一行。
您需要检查当前登录用户的类型
$sql1 = "SELECT `type` FROM $tbl_namn WHERE <user_name> = '$_SESSION[mittbrukarnamn]'";
另一个建议是不使用MYSQL,而是使用MYSQLi或PDO进行数据库操作,因为PHP不再维护MYSQL,并且在PHP 5.5.0中将完全弃用。一些MYSQL函数已经被弃用。
编辑:您的代码中存在另一个问题。 mysql_fetch_row
返回一个数组,因此您需要从数组中检索值。
if($type1['type'] == 0)
而不是
if($type1 == 0)
答案 1 :(得分:1)
由于我今天似乎很多回答,我an admin panel on github似乎回答了很多关于php登录的常见问题。在您的情况下,您只需从数据库中获取type
并使用它。请注意,您必须在SQL中提供WHERE
语句,否则您将无法获得该用户的信息。您将在该表中每个部分。
以下内容使用prepared queries。 mysql_*
functions are deprecated(不再支持;请参阅this SO question)
function get_user_array() {
/* Does all of the heavy lifting for getting user stats. */
$db = new db(); // where db() is an abstraction class that implements mysqli and adds login details.
if (isset($_SESSION["id"])) {
$sid = $_SESSION["id"];
if ($query = $db->prepare("SELECT id, name, status FROM `users` WHERE id=?")) {
$query->bind_param("i", $sid); // i = integer
$query->execute();
$query->bind_result($id, $name, $status);
$query->fetch();
$query->close();
$db->close();
return array("name" => $name, "status" => $status, "id" => $id);
} else {
return false;
}
} else {
return false;
}
}
我的建议也是使用用户ID,并从数据库中查找所有内容。这样,如果他们的用户名发生变化,整个网站的页面加载就不会爆炸。
实际比较是:
$user = get_user_array();
if (@$user["type"] != 'admin') { // @ error-handling will make it NULL anyway.
header("Location: index.php"); // note: this must be sent BEFORE any output!
}
快速比较以检查普通用户是否已登录(例如if logged_in()
):
$user = get_user_array();
if (!@$user["id"]) { // continue only if logged in
// not logged in handle
}
注意:db()
是这个类(如果你调用父代,那么覆盖mysqli公共函数以缩短代码是很好的):
class db extends mysqli {
public function __construct($a = DB_HOST,
$b = DB_USER,
$c = DB_PASS,
$d = DB_NAME,
$persistent = true) {
if ($persistent) {
parent::__construct("p:" . $a, $b, $c, $d);
} else {
parent::__construct($a, $b, $c, $d);
}
}
}