2013-10-03 42 views
0

如何設置PHP訪問,查看完整的頁面 想,如果你是管理員,所以你打開任何網頁和查看權限,如果你不是管理員用戶的,則是顯示錯誤你是不是管理員,但用戶允許訪問一些有限的頁面如何設置PHP訪問,查看

輸入代碼herehow我可以做到這一點

請幫我解決這個問題 感謝

看到屏幕簡短的例子 管理面板 admin panel http://www.koolfree.com/ImageUpload/uploads/1380834608.jpg

用戶面板

user panel http://www.koolfree.com/ImageUpload/uploads/1380804093.jpg

這是MySQL表

CREATE TABLE IF NOT EXISTS `member` (
    `mem_id` int(11) NOT NULL AUTO_INCREMENT, 
    `username` varchar(30) NOT NULL, 
    `password` varchar(30) NOT NULL, 
    `fname` varchar(30) NOT NULL, 
    `lname` varchar(30) NOT NULL, 
    `address` varchar(100) NOT NULL, 
    `contact` varchar(30) NOT NULL, 
    `picture` varchar(100) NOT NULL, 
    `gender` varchar(10) NOT NULL, 
    PRIMARY KEY (`mem_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; 

這index.php文件

<?php 
    //Start session 
    session_start();  
    //Unset the variables stored in session 
    unset($_SESSION['SESS_MEMBER_ID']); 
    unset($_SESSION['SESS_FIRST_NAME']); 
    unset($_SESSION['SESS_LAST_NAME']); 
?> 
<form name="loginform" action="login_exec.php" method="post"> 
<table width="309" border="0" align="center" cellpadding="2" cellspacing="5"> 
    <tr> 
    <td colspan="2"> 
     <!--the code bellow is used to display the message of the input validation--> 
     <?php 
      if(isset($_SESSION['ERRMSG_ARR']) && is_array($_SESSION['ERRMSG_ARR']) && count($_SESSION['ERRMSG_ARR']) >0) { 
      echo '<ul class="err">'; 
      foreach($_SESSION['ERRMSG_ARR'] as $msg) { 
       echo '<li>',$msg,'</li>'; 
       } 
      echo '</ul>'; 
      unset($_SESSION['ERRMSG_ARR']); 
      } 
     ?> 
    </td> 
    </tr> 
    <tr> 
    <td width="116"><div align="right">Username</div></td> 
    <td width="177"><input name="username" type="text" /></td> 
    </tr> 
    <tr> 
    <td><div align="right">Password</div></td> 
    <td><input name="password" type="text" /></td> 
    </tr> 
    <tr> 
    <td><div align="right"></div></td> 
    <td><input name="" type="submit" value="login" /></td> 
    </tr> 
</table> 
</form> 

connection.php文件

<?php 
$mysql_hostname = "localhost"; 
$mysql_user = "root"; 
$mysql_password = ""; 
$mysql_database = "simple_login"; 
$prefix = ""; 
$bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Could not connect database"); 
mysql_select_db($mysql_database, $bd) or die("Could not select database"); 
?> 

這是login_exec.php文件

<?php 
    //Start session 
    session_start(); 

    //Include database connection details 
    require_once('connection.php'); 

    //Array to store validation errors 
    $errmsg_arr = array(); 

    //Validation error flag 
    $errflag = false; 

    //Function to sanitize values received from the form. Prevents SQL injection 
    function clean($str) { 
     $str = @trim($str); 
     if(get_magic_quotes_gpc()) { 
      $str = stripslashes($str); 
     } 
     return mysql_real_escape_string($str); 
    } 

    //Sanitize the POST values 
    $username = clean($_POST['username']); 
    $password = clean($_POST['password']); 

    //Input Validations 
    if($username == '') { 
     $errmsg_arr[] = 'Username missing'; 
     $errflag = true; 
    } 
    if($password == '') { 
     $errmsg_arr[] = 'Password missing'; 
     $errflag = true; 
    } 

    //If there are input validations, redirect back to the login form 
    if($errflag) { 
     $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
     session_write_close(); 
     header("location: index.php"); 
     exit(); 
    } 

    //Create query 
    $qry="SELECT * FROM member WHERE username='$username' AND password='$password'"; 
    $result=mysql_query($qry); 

    //Check whether the query was successful or not 
    if($result) { 
     if(mysql_num_rows($result) > 0) { 
      //Login Successful 
      session_regenerate_id(); 
      $member = mysql_fetch_assoc($result); 
      $_SESSION['SESS_MEMBER_ID'] = $member['mem_id']; 
      $_SESSION['SESS_FIRST_NAME'] = $member['username']; 
      $_SESSION['SESS_LAST_NAME'] = $member['password']; 
      session_write_close(); 
      header("location: home.php"); 
      exit(); 
     }else { 
      //Login failed 
      $errmsg_arr[] = 'user name and password not found'; 
      $errflag = true; 
      if($errflag) { 
       $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
       session_write_close(); 
       header("location: index.php"); 
       exit(); 
      } 
     } 
    }else { 
     die("Query failed"); 
    } 
?> 

這是auth.php文件

<?php 
    //Start session 
    session_start(); 
    //Check whether the session variable SESS_MEMBER_ID is present or not 
    if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) { 
     header("location: index.php"); 
     exit(); 
    } 
?> 

,這是home.php文件

<?php 
    require_once('auth.php'); 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Untitled Document</title> 
<style type="text/css"> 
<!-- 
.style1 { 
    font-size: 36px; 
    font-weight: bold; 
} 
--> 
</style> 
</head> 

<body> 
<p align="center" class="style1">Login successfully </p> 
<p align="center">This page is the home, you can put some stuff here......</p> 
<p align="center"><a href="index.php">logout</a></p> 
</body> 
</html> 
+0

你似乎在你的問題身上有很多。你面臨的具體問題是什麼? –

+0

我想在某些頁面鎖定用戶帳戶 – user2468472

+0

這是一個相當大的任務,並不真正屬於Stack Overflow的Q&A領域。我建議你閱讀使用PHP進行身份驗證的教程。 –

回答

0

創建管理用戶的表。並檢查如果成員是管理員然後ahow這個,如果不顯示這一點。

+0

好吧我創建了管理員表,然後我可以做什麼我不明白 – user2468472

0

首先,如果您不使用準備好的語句與MySQLiPDO,您的表格肯定會被黑客入侵。通過準備好的陳述,這可以避免。檢查this了。

無論如何,您所描述的問題可以通過創建一個包含管理員ID的單獨表來解決,然後在登錄系統中首先獲取用戶的行,從中獲取ID,然後檢查管理員中是否存在該ID -表。

+0

所以如何在代碼中做到這一點我已經創建了管理員表 – user2468472

+0

您正在編碼PHP,但你不能不知道如何編寫PHP代碼? –

+0

你甚至沒有對密碼進行哈希處理......只要黑客訪問這個密碼,你就會被綁定。 –

0

所有你必須在這種情況下,這樣做將是對你所謂的用戶_角色或類似的用戶數據庫中添加一個新行。由於您只有兩個級別(admin/non-admin)設置爲tinyint,默認值爲0.

0現在表示用戶只是一個用戶,但您可以將其角色設置爲1,表示他們是管理員。

然後你要做的就是檢查用戶在任何你想要的頁面電流的作用。我建議將它保存到$ _SESSION中,這樣就不必在每個頁面上查詢數據庫。

<?php if (isset($_SESSION['user_role']) && $_SESSION['user_role'] == 1) : ?> 
    admin panel html 
<?php else : ?> 
    redirect to login or display user panel html 
<?php endif; ?> 

這是一個超級簡單的基於角色的控制器。 Google RBAC可以瞭解更多複雜的概念,隨着程序規模和複雜性的增長,您可以稍後使用它們。

+0

我可以把它放在auth.php頁面中嗎?<?php \t //開始會話 \t session_start(); \t //檢查session變量SESS_MEMBER_ID是否存在或不 如果(isset($ _ SESSION [ 'USER_ROLE'])&& $ _SESSION [ 'USER_ROLE'] == 1): \t如果(isset($ _ SESSION [ 'SESS_MEMBER_ID'])||(trim($ _ SESSION ['SESS_MEMBER_ID'])=='')){ \t \t header(「location:index.php」); \t \t exit(); \t} ?> – user2468472

0

我不會改變你的腳本的整個邏輯,但建議設爲管理員的另一個表可以設置另一個會話變量聯繫到您的登錄腳本:

$member = mysql_fetch_assoc($result); 
      $_SESSION['SESS_MEMBER_ID'] = $member['mem_id']; 
      $_SESSION['SESS_FIRST_NAME'] = $member['username']; 
      $_SESSION['SESS_LAST_NAME'] = $member['password']; 
      $_SESSION['Admin'] = "Admin"; 

現在這個會話變量將呈現在這裏你有會議併爲限制頁面,如果你想隱藏用戶一個簡單的表格,那麼你可以做到這一點,你可以綁定來自用戶的內容..

<?php 
session_start(); 
$value=$_SESSION['Admin']; 
if(!empty($value)) 
{ 

//your website content 
} 
?> 

讓例如: 頁面名稱是: form.php

<?php 
    session_start(); 
    $value=$_SESSION['Admin']; 
    if(!empty($value)) 
    { ?> 
<form> 
--- 
---- 
---- 
--- 
</form> 
<?php } 
else { ?> 
<h1> You dont have permission to see this!</h1> 
<?php } 
?> 
+0

我創建了一個admin表,然後我把這個$ member = mysql_fetch_assoc($ result); $ _SESSION ['SESS_MEMBER_ID'] = $ member ['mem_id']; $ _SESSION ['SESS_FIRST_NAME'] = $ member ['username']; $ _SESSION ['SESS_LAST_NAME'] = $ member ['password']; $ _SESSION ['Admin'] =「Admin」;碼? – user2468472

+0

註冊...你有單獨的用戶和管理員表嗎? – Dinesh

+0

是的,我創建一個表 – user2468472