2016-05-30 5 views
1

私はここにログイン用のコードを持っていますが、私はここでもセッションを使用していますが、私の問題は今どのように私はユーザーのアクセスレベルを作ることができますか?私のログインデータベース私はユーザー名、パスワード、 = 1、ゲスト= 0。 私は何が起こりたいのですか?adminとしてログインすると、signup.phpにリダイレクトされます。ゲストとしてログインすると、index.phpにリダイレクトされます。私は、ほぼ2週間これをやっています。 ここに私のコードは..ですpdoを使ってユーザーのアクセスレベルを設定する方法は?

をdb.php

<?php 

session_start(); 

$DB_host = "localhost"; 
$DB_user = "root"; 
$DB_pass = ""; 
$DB_name = "survey"; 
$charset = "utf8"; 


try 
{ 
    $DB_con = new PDO("mysql:host={$DB_host};dbname={$DB_name};charset={$charset}",$DB_user,$DB_pass); 
    $DB_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $DB_con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
} 
    catch(PDOException $e) 
{ 
    echo $e->getMessage(); 
} 

?> 

class.user.login.php

<?php 

class crud 
{ 
private $db; 

function __construct($DB_con) 
{ 
    $this->db = $DB_con; 
} 

public function login($uname,$upass) 
{ 
try 
{ 
    $stmt = $this->db->prepare("SELECT * FROM users WHERE user_name=:uname AND level=:level LIMIT 1"); 
    $stmt->execute(array(':uname'=>$uname)); 
    $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 

    if($stmt->rowCount() > 0) 
    { 
    if(password_verify($upass, $userRow['user_pass'])) 
    { 
     $_SESSION['user_session'] = $userRow['user_id']; 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
    } 
} 
    catch(PDOException $e) 
    { 
    echo $e->getMessage(); 
    } 
} 

public function is_loggedin() 
{ 
if(isset($_SESSION['user_session'])) 
{ 
    return true; 
    } 
} 

public function redirect($url) 
{ 
header("Location: $url"); 
} 
?> 

**** **** login.php

<?php 
include_once 'dbconfig.php'; 

    if($crud->is_loggedin()!="") 
    { 
    $crud->redirect('insert.php'); 
    } 

    if ($_SERVER["REQUEST_METHOD"] == "POST") 
    { 
    $uname = $_POST['user']; 
    $upass = $_POST['pass']; 

    if($crud->login($uname,$upass)) 
    { 
    $crud->redirect('index.php'); 
    } 
    else 
    { 
    echo "<script type='text/javascript'>alert('Invalid Username or Password');</script>"; 
    } 
} 
?> 

home.php

<?php 
include_once 'dbconfig.php'; 

    if(!$crud->is_loggedin()) 
    { 
    $crud->redirect('home.php'); 
    } 
    $ID = $_SESSION['user_session']; 
    $stmt = $DB_con->prepare("SELECT * FROM survey_section WHERE ID=:ID"); 
    $stmt->execute(array(":ID"=>$ID)); 
    $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 
?> 

答えて

0

お探しの用語には、ACL(アクセス制御リスト)

Thisあなたは :-)理解を得るのを助けるべきです


現在の実装では、ログインしたユーザーがlevelであることを確認していない場合は、ログインが成功した場合は$crud->redirect('index.php');と表示されます。

しかし、そのセクションに入る前に、

$stmt = $this->db->prepare("SELECT * FROM users WHERE user_name=:uname AND level=:level LIMIT 1"); 
$stmt->execute(array(':uname'=>$uname)); 

あなたが何であるか:level指定していないと失敗しようとしている:あなたが持っているあなたのlogin()方法で... :levelはまだそれを指定していないか、またはどこでもそれを実装しバインドする

をしようとしていますしたがって、無効なパラメータカウントエラーが発生します - >は、この関数は常にfalseを返すことを意味します。

あなたは(:levelがあなたの​​にあるものを指定AND level = :levelまたはの除去のいずれか。)そのクエリを変更する必要が

そこから、あなたが適切にあなたの機能を変更する必要があります - にこの場合、セッション変数にレベルを設定する方がより適切です:

//.....code above... 
if(password_verify($upass, $userRow['user_pass'])) 
{ 
    $_SESSION['user_session'] = $userRow['user_id']; 
    $_SESSION['user_level'] = $userRow['level']; 
    return true; 
} 
//.....cove below... 

。あなたのlogin.phpの中から、それに応じてリダイレクトすることができます:

if($crud->login($uname,$upass)) 
{ 
    switch($_SESSION['user_level']) { 
     case "0": // regular user 
     $crud->redirect('index.php'); 
     break; 
     case "1": // admin 
     $crud->redirect('signup.php'); 
     break; 
    } 
} 
+0

私はそのセッションで何かを変更する必要がありますか? – Trojan

+0

@Trojanあなたが 'home.php'でやりたいことに依存します。誰がそれにアクセスできますか? – Darren

+0

ええ、私はそれを知っています..例えばあなたのコードで、ゲストとしてログインすると、index.phpにリダイレクトされます。上のコードのように私のhome.phpに何かを置く必要がありますか? – Trojan

関連する問題