2012-07-12 4 views
0

회원 데이터베이스에 계급이라고 불리는 부분이 있습니다.특정 계급의 회원 만 볼 수 있습니다

기본적으로 내가하려는 것은 특정 페이지를 12보다 높은 순위의 회원에게 표시 가능하게하고 순위가 12보다 낮 으면 홈페이지로 다시 리디렉션됩니다. (분명히 순위 5+ 회원, 순위 7+ 회원, 순위 20+ 회원 등 다른 페이지가 많이있을 것입니다.)

누구든지 튜토리얼이나 뭔가 도와 주시겠습니까?

이전 코드를 사용하여 도움을 요청했지만 코드가 작동 할 것이라고 생각하지 않습니다. 필자는이 코드를 변경하여 1 주일 동안 사용 해본 경험이 있으며 다른 방법을 사용할 수는 없을 것이라고 생각합니다. to work 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

답변

3

아마도 인증과 결합 된 ACL (액세스 제어 목록)이 필요합니다. ACL을 사용하면 특정 자격 증명이있는 사용자가 액세스 할 수있는 리소스를 지정할 수 있습니다.

자습서를 몇 개 찾았지만 마음이 희미하지 않습니다.


  • http://blog.davidjclarke.co.uk/database-driven-zend-acl-tutorial-part-one.html
    어쩌면 당신이 얻을 수 phpclasses에서 클래스를 사용할 수 있습니다 당신은 시작 :

    PHPClasses ACL search result

    또한 모든 인기있는 프레임 워크에는 ACL 및 인증 리소스가 있습니다. (Zend Framework, Symfony, CakePHP).

    행운을 빈다.

  • +0

    @halfer 꽤 예쁘게 만들어 주셔서 감사합니다. 긴 밤 이었어. – RockyFord

    +0

    probs가 없습니다, 좋은 답변':)'. +1 – halfer

    1

    당신이거야 데이터베이스에서 순위 필드를 가지고 있기 때문에 검색어와 함께 검색해야합니다.

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

    그 후 당신은 그것을 확인하실 수 있습니다 /이 다양한 계급과 그 뒤에 논리 관리로 전환하면 다음 당신은을 만들어야합니다 : 이것은 또한 간단하고 "나쁜"입니다 마음에

    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 Page content css와 html을 계속하겠습니다. – user1348927

    +0

    else() 함수를 방해하는 출력을 피하기 위해 else 브랜치 외부에 컨텐트를 두지 않아야합니다. 모든 include/html이 그 안에 있어야합니다. 예 : if ($ rank <$ limit) { header ("$ baseurl/index.php? error =이 + 페이지를 볼 수 + 없습니다."); exit(); die(); } else {echo HTML} – kawashita86

    관련 문제