j'ai fais suivi un tutorial sur grafikart sur la création d'une page membre et admin
j'ai posé déjà la question sur ce forum
http://www.grafikart.fr/forum/topic/2360
mais n’ayant pas eu de réponse je post donc mon problème.
voilà j'ai tout comme il faut mais la page admin est supposé ne pas étre accessible mais ce n'est pas le cas, je peux y accéder meme si je ne suis pas logguer, et en étant membre simple je peux aussi logguer à cette page. Voici mes codes (tout dans le meme dossier):
la page index.php :
<?php
session_start();
try{
$PDO = new PDO('mysql:host=localhost;dbname=tuto','root','');
$PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
$PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
}catch(PDOException $e){
echo'Connexion impossible';
}
//Class Auth
require_once "class.auth.php";
ob_start();
include((isset($_GET['p'])?$_GET['p']:'home').'.php');
$content_for_layout = ob_get_clean();
?>
<!DOCTYPE html PUBLIC "-/W3C/DTD XHTML 1.0 Strict/EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<div id="conteneur">
<?php if($Auth->user("id")):?>
<h1>Bonjour<?php echo $Auth->user('login');?></h1>
<ul>
<li><a href="index.php?p=compte">Mon compte</a></li>
<?php if($Auth->user("slug")=='admin'):?>
<li><a href="index.php?p=admin">Administration</a></li>
<?php endif; ?>
<li><a href="index.php?p=logout">Déconnecter</a></li>
</ul>
<?php else:?>
<a href="index.php?p=login">Se connecter</a>
<?php endif;?>
<?php echo $content_for_layout;?>
<pre><?php print_r($_SESSION); ?></pre>
</div>
</body>
la page login.php
<?php
if(!empty($_POST)){
if($Auth ->login($_POST)){
}else{
echo "Mauvais identitifants";
}
}
?>
<form method="post" action="index.php?p=login">
<label for="">Login: </label>
<input type="text" name="login"/>
<label for="">Mot de passe: </label>
<input type="text" name="password"/>
<input type="submit" value="se connecter"/>
</form>
la page class.auth.php
<?php class Auth{
var $forbiddenPage = "index.php?p=forbidden";
/**
*Permet d'identifier un utilisateur.
**/
function login($d){
global $PDO;
$req = $PDO->prepare('SELECT users.id,users.login,users.address,roles.name,roles.slug,roles.level FROM users LEFT JOIN roles ON users.role_id=roles.id WHERE login=:login AND password=:password');
$req->execute($d);
$data = $req->fetchAll();
if(count($data)>0){
$_SESSION['Auth'] = $data [0];
return true;
}
return false;
}
/**
*Autorise un rang à accéder à une page, redirige vers forbidden sinon
**/
function allow($rang){
global $PDO;
$req = $PDO->prepare('SELECT slug,level FROM roles');
$req->execute();
$data = $req->fetchAll();
$roles = array();
foreach($data as $d){
$roles[$d->slug] = $d->level;
}
if(!$this->user('slug')){
$this->forbidden();
}else{
if($roles[$rang]> $this->user('level')){
$this->forbidden();
}else{
return true;
}
}
}
/**
*Récupère une info utilisateur
**/
function user($field){
if(isset($_SESSION['Auth']->$field)){
return $_SESSION['Auth']->$field;
}else{
return false;
}
}
/**
*Redirige un utilisateur
**/
function forbidden(){
header('Locaton:'.$this->forbiddenPage);
}
}
$Auth = new Auth();
?>
et la page admin.php<?php $Auth -> allow('admin');?>
<p>ADMIN</p>
la base de donné c'est 2 tableaux roles
id name slug level
1 Administrateur admin 2
2 Membre member 1
users
id login password address role_id
1 admin admin Je suis un admin 1
2 membre membre pti membre 2
voilà j’espère pas avoir était trop long
je pense que c'est au niveau du class.auth.php que c'est pas bien configurer ou bien c'est un problème de configuration de mon server
peut-étre aussi au niveau du pdo ? je ne suis que débutant
merci beaucoup d'avance