在我的会员数据库中,我有一个名为rank的部分。
基本上我试图做的是让某些页面可以查看排名高于12的成员,如果等级低于12,那么它们会被重定向回主页。 (显然他们将为5级以上成员,7级以上成员,20多名成员等提供大量不同的页面)
任何人都可以帮我提一个教程吗?
我之前使用我当前的代码确实请求过帮助,但是我不认为代码能够正常运行,我一直在改变它并使用它一周,并且不可能看到任何其他方法来获取它工作Members Rank only area's
我还在学习php,所以理想情况下,一个很好的简单解释教程会很好。
数据库:
id int(11)
username varchar(200) latin1_swedish_ci
password varchar(216) latin1_swedish_ci
security varchar(200) latin1_swedish_ci
email varchar(216) latin1_swedish_ci
ip varchar(200) latin1_swedish_ci
rank varchar(216) latin1_swedish_ci
name varchar(30) latin1_swedish_ci
age varchar(40) latin1_swedish_ci
gender varchar(40) latin1_swedish_ci
location varchar(40) latin1_swedish_ci
helpfaerie int(11)
profile text latin1_swedish_ci
about text latin1_swedish_ci
tasks text latin1_swedish_ci
joined varchar(216) latin1_swedish_ci
laston int(200)
icedmutereason text latin1_swedish_ci
icedmutedetails text latin1_swedish_ci
icedmuteby varchar(200) latin1_swedish_ci
icedmutedate int(200)
posts int(11)
signature varchar(216) latin1_swedish_ci
avatar varchar(216) latin1_swedish_ci
neohtml text latin1_swedish_ci
siggy text latin1_swedish_ci
verify int(11)
changedpass int(1)
的header.inc.php
<?php
include ($_SERVER['DOCUMENT_ROOT'].'/dblink.php');
include ($_SERVER['DOCUMENT_ROOT'].'/addon.php');
$geterror= $_GET['error'];
$error= stripplus($geterror);
$extra = mysql_fetch_array(mysql_query("SELECT * FROM extra WHERE id='1'"));
$cp = mysql_fetch_array(mysql_query("SELECT * FROM members WHERE username = '$username'"));
$weather = $extra[weather];
$wurl = $extra[wurl];
$games = $extra[games];
$xword = $extra[xword];
$xword2 = $extra[xword2];
$xworddate = date("M j Y",$extra[xworddate]);
$userinfo = mysql_fetch_array(mysql_query("SELECT * FROM members WHERE username='$username'"));
$rank = $userinfo[rank];
if (!$checkrank) { $checkrank = 0; }
if (!$rank) { $rank = 0; }
if (!$rank == ' ') { $rank = 0; }
if ($rank < $checkrank)
{
header("Location: $baseurl/index.php?error=You+can+not+view+this+page.");
}
if ($rank >= 30)
{
$admin = "<a href=\"$baseurl/staff/admin.php\">Admin</a>";
}
if ($username)
{
mysql_query("UPDATE members SET laston = $timestamp+120 WHERE username='$username'");
mysql_query("UPDATE members SET ip = '$ip' WHERE username='$username'");
$login = "Welcome $username :) <a href=\"$baseurl/logout.php\" >Logout</a>";
$helpfaerie = "<a href=\"$baseurl/helpfaerie.php\" >Help Faerie</a>";
}
else
{
$login = "<form name=\"login\" action=\"$baseurl/login.pro.php\" method=\"post\" > <input type=\"hidden\" name=\"act\" value=\"doLogin\" color=\"#000000\" valign=\"middle\" > Username: <input type=\"text\" name=\"username\" color=\"#000000\" style=\"width:100px; height:20px;font-size:10px;\">
Password: <input type=\"password\" name=\"password\" style=\"width:100px; height:20px;font-size:10px;\"> <input type=\"submit\" name=\"submit\" value=\"Login\" style=\"width:42px; height:20px;font-size:10px;\"></form>";
}
ECHO <<<END
然后是font.php
<?php
$pagetitle = "Add Font";
session_start();
// Rank Limit
$limit = 10;
// Using a session
$rank = $_SESSION['rank'];
// Using a cookie
$rank = $_COOKIE['rank'];
if ($rank < $limit) {
header("$baseurl/index.php?error=You+can+not+view+this+page.");
exit();
die();
}
include ($_SERVER['DOCUMENT_ROOT'].'/staff/header.inc.php');
ECHO <<<END
答案 0 :(得分:3)
您正在寻找的是ACL(访问控制列表),可能与身份验证相结合。 ACL允许您指定具有特定凭据的用户可以访问的资源。
我找到了一些教程,但这不适合胆小的人。
也许你可以使用phpclasses中的一个类来帮助你入门:
据我所知,所有流行的框架都有ACL和身份验证资源。 (Zend Framework,Symfony,CakePHP)。
祝你好运!答案 1 :(得分:1)
由于数据库中有排名字段,因此您必须使用查询检索它:
$user = mysql_fetch_array(mysql_query("SELECT rank FROM members WHERE username='$username'"));
之后你可以检查它然后你必须创建一个if / switch来管理各种等级及其背后的逻辑:
if(!is_array($user) || $user['rank'] < 12){
header('Location: homepage');
} else {
//manage page that only ranked user can have
}
请记住,这是一个简单而且“糟糕”的解决方案,因为它将对您将访问的每个页面进行查询,并且对于每个用户,但它会给您提供想法,您可以通过使用更复杂的版本工作一个登录页面,它将在会话中存储排名,并在每个页面中检索它以确定用户是否可以查看它:
if(!isset($_SESSION['user_rank'] || $_SESSION['user_rank']<12)
header('Location : defaultpage.php');