2012-07-12 72 views
0

在我的成员数据库中,我有一个名为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 
+0

告诉我们在哪儿,你已经把{// 管理,只有排名用户可以 页}代码 – Andy 2012-07-12 13:53:00

回答

3

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

我找到了一些教程,但这不适合心灵的隐隐。

,也许你可以使用从phpclasses类,让你开始:

PHPClasses ACL search result

据我所知,所有流行的框架都有ACL和认证资源。 (Zend Framework,Symfony,CakePHP)。

祝你好运!

+0

@halfer,感谢您的加入。这是一个漫长的夜晚。 – RockyFord 2012-07-12 14:26:04

+0

没有probs,很好的答案':)'。 +1 – halfer 2012-07-12 14:53:38

1

既然你有你的数据库,那你的等级场必须通过查询检索它:

$user = mysql_fetch_array(mysql_query("SELECT rank FROM members WHERE username='$username'")); 

后,你可以检查它,然后你必须创建一个IF /切换到管理各个级别和它背后的逻辑:

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'); 
+0

难道我就这么走了吗?然后继续到ECHO <<< END页面内容css,并且html将在这里 – user1348927 2012-07-12 16:31:15

+0

您应该避免将内容放在else分支之外以避免会干扰header()函数的输出。所有的include/html都应该在里面。例如:if($ rank <$ limit)header(“$ baseurl/index.php?error = You + can + not + view + this + page。”); exit(); die(); } else {echo HTML} – kawashita86 2012-07-13 09:53:52

相关问题