只有具有一定等级的成员才能看到页面

时间:2012-07-12 13:21:02

标签: php redirect member

在我的会员数据库中,我有一个名为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\" >&nbsp;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

2 个答案:

答案 0 :(得分:3)

您正在寻找的是ACL(访问控制列表),可能与身份验证相结合。 ACL允许您指定具有特定凭据的用户可以访问的资源。

我找到了一些教程,但这不适合胆小的人。

也许你可以使用phpclasses中的一个类来帮助你入门:

PHPClasses ACL search result

据我所知,所有流行的框架都有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');
相关问题