Page 1 sur 2

Espace admin, modo et membre (enum)

Posté : 15 févr. 2008, 18:47
par Angerfist
Bonjour,
Je voudrais faire en sorte que j'ai des administrateur sur mon site et des modérateurs.
J'ai fait un enum a 3 valeurs. 0, 1 et 2.

Le 0 c'est pour les membres
Le 1 c'est pour l'administrateur
Le 2 c'est pour les modérateurs

Je voudrais savoir comment je pourrais faire pour que les administrateurs voit en même temps l'espace des modérateurs ?

Code : Tout sélectionner

CREATE TABLE IF NOT EXISTS `phpl_membres` ( `id` smallint(5) unsigned NOT NULL auto_increment, `id_prono` varchar(19) collate latin1_general_ci NOT NULL default '', `pseudo` varchar(20) collate latin1_general_ci NOT NULL default '', `mot_de_passe` varchar(250) collate latin1_general_ci NOT NULL default '', `mail` varchar(40) collate latin1_general_ci NOT NULL default '', `nom_site` varchar(50) collate latin1_general_ci NOT NULL default '', `url_site` varchar(100) collate latin1_general_ci NOT NULL default '', `nom` varchar(50) collate latin1_general_ci NOT NULL default '', `prenom` varchar(50) collate latin1_general_ci NOT NULL default '', `adresse` varchar(100) collate latin1_general_ci NOT NULL default '', `code_postal` mediumint(5) NOT NULL default '0', `ville` varchar(200) collate latin1_general_ci NOT NULL default '', `pays` varchar(200) collate latin1_general_ci NOT NULL default '', `date_naissance` date NOT NULL default '0000-00-00', `profession` varchar(200) collate latin1_general_ci NOT NULL default '', `mobile` varchar(14) collate latin1_general_ci NOT NULL default '', `ip` varchar(15) collate latin1_general_ci NOT NULL default '', `last_connect` varchar(10) collate latin1_general_ci NOT NULL default '', `admin` enum('0','1','2') collate latin1_general_ci NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=14 ;
function VerifSession ($user_pseudo,$user_mdp)
{

if ($user_pseudo and $user_mdp)
	{
        $requete= "SELECT mot_de_passe, id_prono FROM phpl_membres WHERE pseudo='$user_pseudo' and admin='1'";
        $result = mysql_query($requete);
        $row = mysql_fetch_array($result);
        
        if ($row["mot_de_passe"] == $user_mdp){;$a=1;}
        else {$a=0;}
                                            
	//session_start();
	}
else {$a=0;}
return ("$a");
}
if (VerifSession ($user_pseudo,$user_mdp)=="1")
                {
       if ($page=="championnat") {include ("championnat.php");}
       elseif ($page=="groupes_championnats") {include ("groupes_championnats.php");}
       elseif ($page=="mini_classement") {include ("mini_classement.php");}
       elseif ($page=="fiches_clubs") {include ("fiches_clubs.php");}
       elseif ($page=="membres") {include ("membres.php");}
       elseif ($page=="credits") {include ("credits.htm");}
       elseif ($page=="accueil") {include ("accueil.htm");}
       else {include ("accueil.htm");}
                }
Ce code c'est pour l'administration du site, qui marche impeccable et je voudrais essayer de mettre l'option modérateur dans ce code. Si c'est possible bien sur.

Si je devais pas le poster ici je suis désolé

Posté : 15 févr. 2008, 19:00
par Truc
Dans l'état actuel des choses tu forces la fonction VerifSession à ne reconnaitre que les "admin".

Tu travailles peut être avec des sessions ?
Si non tu devrait le faire :wink:

Ensuite il te serait facile d'effectuer des tests sur une variable de session qui comporterait le statut du membre identifié.
if ($_SESSION["admin"] == 1 || $_SESSION["admin"] == 2)
{
    // visible par modérateurs Niveau 2 et par admin Niveau 1
}

Posté : 15 févr. 2008, 20:03
par Angerfist
Je dois modifier sa pour les sessions mais comment :roll: ?
function VerifSession ($user_pseudo,$user_mdp)
{

if ($user_pseudo and $user_mdp)
    {
        $requete= "SELECT mot_de_passe, id_prono FROM phpl_membres WHERE pseudo='$user_pseudo' and admin='1'";
        $result = mysql_query($requete);
        $row = mysql_fetch_array($result);
        
        if ($row["mot_de_passe"] == $user_mdp){;$a=1;}
        else {$a=0;}
                                            
    //session_start();
    }
else {$a=0;}
return ("$a");
}

Posté : 15 févr. 2008, 20:11
par Truc
Petit tuto sur les sessions

Tu dois retirer de la requête la clause portant sur le champ admin.
A la place de $a=1 tu initialises les variables de session avec le contenu renvoyé par la requête.

N'oublie pas le "session_start()" en début de fichier

Posté : 16 févr. 2008, 00:53
par Angerfist
Bon j'ai retiré ce que tu m'as dit de la requête c'est a dire sa " and admin='1'".

Par contre je comprends pas très bien ou tu veut en venir avec l'initialisation, tu peut m'éclaircir un peu ?

Posté : 16 févr. 2008, 01:43
par Truc
initialisation variables :
$_SESSION['admin'] = $row['admin']; // en récupérant par SELECT admin, ... FROM ....
$_SESSION['nom'] = $row['nom']; // ou autre champ que tu souhaites garder en session
...
Si tu avances poste le code qui va avec :wink:

Posté : 16 févr. 2008, 02:00
par Angerfist
J'ai mit cette page en ligne.
function VerifSession ($user_pseudo,$user_mdp)
{

if ($user_pseudo and $user_mdp)
	{
        $requete= "SELECT mot_de_passe, id_prono FROM phpl_membres WHERE pseudo='$user_pseudo'";
        $result = mysql_query($requete);
        $row = mysql_fetch_array($result);
        
        if ($row["mot_de_passe"] == $user_mdp);
        $_SESSION['admin'] = $row['admin'];
                                            
	//session_start();
	}
else {$a=0;}
return ("$a");
}
Et je remarque qu'il y a une erreur a la 1ere ligne. Je dois supprimer quelque chose ?
J'ai aussi mit la page ou il y aura l'accès admin et modo.
if (VerifSession ($_SESSION["admin"] == 1 || $_SESSION["admin"] == 2))
                {
       if ($page=="championnat") {include ("championnat.php");}
       elseif ($page=="groupes_championnats") {include ("groupes_championnats.php");}
       elseif ($page=="mini_classement") {include ("mini_classement.php");}
       elseif ($page=="fiches_clubs") {include ("fiches_clubs.php");}
       elseif ($page=="membres") {include ("membres.php");}
       elseif ($page=="credits") {include ("credits.htm");}
       elseif ($page=="accueil") {include ("accueil.htm");}
       else {include ("accueil.htm");}
                }

Posté : 16 févr. 2008, 02:17
par Truc
Je vais commencer par déplacer dans "Débuter en PHP"

Ensuite regarde bien ce que tu as fait.
La fonction doit rechercher les données qui correspondent au membre qui a rempli le formulaire.
Elle doit donc comporter les mêmes paramètres que précédemment c'est à dire "$user_pseudo,$user_mdp" (qui doivent être récupérées de $_POST).

Ensuite la vérification s'effectue si les mots de passe sont identiques alors tu initialise la variable de session ça c'est OK MAIS attention à inclure la récupération du champ "admin" dans la requête !

Donc tu dois avoir un code qui ressemble un peu à :
<?php
session_start();
...
...
VerifSession ($user_pseudo,$user_mdp); // appel de la fonction avec les bon paramètres
...
if(isset($_SESSION['admin']) // si la variable de session à été crée donc identifié correctement
{
    if($_SESSION["admin"] == 1 || $_SESSION["admin"] == 2)
    {
        //partie visible admin, modo
     }
}
else
{
echo "Pas identifié"; // formulaire ou autre... pas obligatoire d'avoir un else
}



Posté : 16 févr. 2008, 03:22
par Angerfist
Pour le problème a la première ligne j'avais remarquer que c'était pas le même :?
Je te met un extrait de ma page index.php entre <? ... ?>
<?
     session_start();
     if (isset($_COOKIE['user'])) {$user_pseudo=$_COOKIE['user'];} else {$user_pseudo='';}
     if (isset($_COOKIE['mot_de_passe'])) {$user_mdp=$_COOKIE['mot_de_passe'];} else {$user_mdp='';}
     if (isset($_GET['identification'])) {$identification=$_GET['identification'];} else {$identification='';}
     if (isset($_POST['action'])) {$action=$_POST['action'];} else {$action='';}
     if (isset($_GET['action'])) {$action=$_GET['action'];} else {$action='';}
     if (isset($_REQUEST['actionc'])) {$actionc=$_REQUEST['actionc'];} else {$actionc='';}
     if (isset($_REQUEST['go'])) {$go=$_REQUEST['go'];} else {$go='';}
     if (isset($_REQUEST['ga'])) {$ga=$_REQUEST['ga'];} else {$ga='';}
     if (isset($_REQUEST['id'])) {$id=$_REQUEST['id'];} else {$id='';}
     if (isset($_GET['page'])) {$page=$_GET['page'];} else {$page='';}


     if (isset($_GET['page'])){$page=$_GET['page'];}
     else {$page="accueil";}


     VerifSession ($user_pseudo,$user_mdp); // appel de la fonction avec les bon paramètres

if(isset($_SESSION['admin'])) // si la variable de session à été crée donc identifié correctement
 {
	if($_SESSION["admin"] == 1 || $_SESSION["admin"] == 2)
                {
       if ($page=="championnat") {include ("championnat.php");}
       elseif ($page=="groupes_championnats") {include ("groupes_championnats.php");}
       elseif ($page=="mini_classement") {include ("mini_classement.php");}
       elseif ($page=="fiches_clubs") {include ("fiches_clubs.php");}
       elseif ($page=="membres") {include ("membres.php");}
       elseif ($page=="credits") {include ("credits.htm");}
       elseif ($page=="accueil") {include ("accueil.htm");}
       else {include ("accueil.htm");}
                }}
       elseif ($identification == "non") {echo "Veuillez renseigner tous les champs !";}
       elseif ($identification == "non2") {echo "Identifiants erronés !";}
    
       else {echo "<br /><br /><br /><br />";include ("menu.non-identifie.htm");}
 
     ?>
Voila il me trouve une erreur sur la session_start.
Sinon si je l'enlève, le modérateur se voit toujours ses identifiants erronés tandis que l'administrateur sa revient toujours sur le formulaire quand on entre nos identifiants.

Posté : 16 févr. 2008, 13:54
par Truc
session_start() doit être placé avant tout autre élément du fichier !!
as tu modifié la requête ?

Posté : 16 févr. 2008, 14:53
par Angerfist
Pour la requête tu veut que je les récupère avec le $_POST ?
Si c'est le cas il le récupère sur login.php qui le transforme en $pseudo et $pass

Et la session_start(); s'est pas grave si elle est pas dans la même accolade que les autres ?
Parce que je l'ai tout au début avant le <html>, et sa me fait toujours pareil :?

index.php
<? 
session_start();

?>
<html>
<head>
<meta http-equiv="Content-Language" content="fr">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Mon site</title>
<link rel="stylesheet" type="text/css" href="style.css">

</head>

<body topmargin="0" leftmargin="0" class="phpl">

<?
require ("../config.php") ;
require ("fonctions.php");
ouverture ();
?>

<div align="center">
  <center>
  <table cellspacing="0" width="100%" height="100%" cellpadding="0">
    <tr>
      <td colspan="1" align="center" height="100"  bgcolor="#C0C0C0"></td>
      <td colspan="1" background="haut.gif" valign="middle" align="center" style="border-bottom-style: dashed;border-bottom-width : 1px; border-color:#3b487f"><font class="phpl">PhpLeague - Administration</font></td>
      <td bgcolor="#C0C0C0" style="border-bottom-style: dashed;border-bottom-width : 1px; border-color:#3b487f"></td>
    </tr>
    <tr>
      <td class="phpl3" width="12%" valign="top" style="border-right-style: dashed;border-right-width : 1px; border-color:#3b487f">
      <a href="?page=championnat"><? echo LEAGUE; ?></a><br /><br />
      <a href="?page=groupes_championnats"><? echo "Groupes championnats"; ?></a><br /><br />
      <a href="?page=fiches_clubs"><? echo MENU_FICHES_CLUBS; ?></a><br /><br />
      <a href="?page=mini_classement"><? echo ADMIN_MINI_1; ?></a><br /><br />
      <a href="?page=membres"><? echo MENU_MEMBRES; ?></a><br /><br />
      <a href="?page=credits"><? echo MENU_CREDITS; ?></a><br /><br />
      <a href="logout.php"><? echo "Logout"; ?></a><br />
      </td>
      <td valign="top" colspan="2"><div align="center">

     <?
     if (isset($_COOKIE['user'])) {$user_pseudo=$_COOKIE['user'];} else {$user_pseudo='';}
     if (isset($_COOKIE['mot_de_passe'])) {$user_mdp=$_COOKIE['mot_de_passe'];} else {$user_mdp='';}
     if (isset($_GET['identification'])) {$identification=$_GET['identification'];} else {$identification='';}
     if (isset($_POST['action'])) {$action=$_POST['action'];} else {$action='';}
     if (isset($_GET['action'])) {$action=$_GET['action'];} else {$action='';}
     if (isset($_REQUEST['actionc'])) {$actionc=$_REQUEST['actionc'];} else {$actionc='';}
     if (isset($_REQUEST['go'])) {$go=$_REQUEST['go'];} else {$go='';}
     if (isset($_REQUEST['ga'])) {$ga=$_REQUEST['ga'];} else {$ga='';}
     if (isset($_REQUEST['id'])) {$id=$_REQUEST['id'];} else {$id='';}
     if (isset($_GET['page'])) {$page=$_GET['page'];} else {$page='';}


     if (isset($_GET['page'])){$page=$_GET['page'];}
     else {$page="accueil";}


     VerifSession ($user_pseudo,$user_mdp); // appel de la fonction avec les bon paramètres

if(isset($_SESSION['admin'])) // si la variable de session à été crée donc identifié correctement
 {
    if($_SESSION["admin"] == 1 || $_SESSION["admin"] == 2)
                { 
       if ($page=="championnat") {include ("championnat.php");}
       elseif ($page=="groupes_championnats") {include ("groupes_championnats.php");}
       elseif ($page=="mini_classement") {include ("mini_classement.php");}
       elseif ($page=="fiches_clubs") {include ("fiches_clubs.php");}
       elseif ($page=="membres") {include ("membres.php");}
       elseif ($page=="credits") {include ("credits.htm");}
       elseif ($page=="accueil") {include ("accueil.htm");}
       else {include ("accueil.htm");}
                }}
       elseif ($identification == "non") {echo "Veuillez renseigner tous les champs !";}
       elseif ($identification == "non2") {echo "Identifiants erronés !";}
    
       else {echo "<br /><br /><br /><br />";include ("menu.non-identifie.htm");}
     
     ?>
      </div></td>
      <td  width="1%" style="border-left-style: dashed;border-left-width : 1px; border-color:#3b487f">&nbsp;</td>
    </tr>
    <tr>
    <td bgcolor="C0C0C0"></td>
      <td width="100%" colspan="2" height="10" style="border-top-style: dashed;border-top-width : 1px; border-color:#3b487f">&nbsp;</td>
      <td></td>
    </tr>
    <tr>
      <td class="phpl" height="10" colspan="1"><img border="0" src="bouton.gif" width="111" height="25">
        </td>
      <td class="phpl" colspan="3" width="70%" height="10" colspan="2" align="right"><br />
        </td>
    </tr>
  </table>
  </center>
</div>

</body>

</html>

menu.non-identifie.htm

<table border="1" cellpadding="0" cellspacing="0" width="50%" bordercolor="#3b487f" align="center">
       <tr>
      

        <td  height="23"  bgcolor="#3b487f">

            <table bgcolor="#3b487f" width="100%">

              <tr>

                <td width="15" cellpadding="0" cellspacing="0"><img border="0" src="../prono/trait-jaune.gif"></td>

                <td> <b><font face="Verdana" size="1" color="#FFFFFF">IDENTIFICATION</font></b> </td>

              
              </tr>
              </table>

          </td>

      </tr>

      <tr>

       <TD height="20">
       
<FORM action="login.php" method="post">

            <TABLE cellSpacing="0" width="100%" border="0" align="center">
              <TBODY>
              <TR><TD><FONT face="Verdana" size="1"><B>&nbsp;LOGIN</B></FONT></TD>
                <TD><FONT face="Verdana" size="1"><INPUT class="log" size="10"  name="pseudo"> </FONT></TD></TR>
              <TR>
                <TD><FONT face="Verdana" size="1"><B>&nbsp;MOT DE
                PASSE</B></FONT></TD>
                <TD><FONT face="Verdana" size="1"><INPUT class="log" size="10" type="password"
                  name="pass">
</FONT></TD>
<TD><input type="hidden" name="autoidentification" value="1"><input type="submit" value="Ok"></TD>

</TR></form>
              <TR>
                <TD colspan="3">
                <FONT face="Verdana" size="1">
                <a href="../prono/index.php?page=perdu_mdp">
                MOT DE PASSE OUBLIÉ ?</a></FONT></TD>
</TR></TBODY></TABLE></TABLE>
login.php
<?php
require("../config.php");
ouverture();
if (isset($_POST['pseudo'])){$pseudo=$_POST['pseudo'];}
if (isset($_POST['pass'])){$pass=$_POST['pass'];}
if (isset($_POST['autoidentification'])) {$autoidentification=$_POST['autoidentification'];} else {$autoidentification='';}

	if($pseudo=='' || $pass=='')
	{
   	header("Location:index.php?identification=non");
	}
	else
	{
        $query = "SELECT mot_de_passe FROM phpl_membres WHERE pseudo='$pseudo' and admin='1'";
	$result = mysql_query($query);
	$row = mysql_fetch_array($result);
        $password_crypt = md5($pass);

	if($row['mot_de_passe'] != $password_crypt or mysql_num_rows($result)=="0")
	{
        header("Location:index.php?identification=non2");
	}
	else

	{
	$pseudo = addslashes($pseudo);

        $ip = $_SERVER["REMOTE_ADDR"];
	$time = time();
	$query = "SELECT * FROM phpl_membres WHERE pseudo='$pseudo' and admin='1'";
	$result = mysql_query($query) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
	$row = mysql_fetch_array($result);
	$mot_de_passe = $row['mot_de_passe'];

	mysql_query("UPDATE phpl_membres SET ip='$ip', last_connect='$time' WHERE pseudo='$pseudo'");
        if ($autoidentification) {$expire=365*24*3600;}
        else {$expire=3600;}
	setcookie("user","$pseudo",time()+$expire,"/","");
	setcookie("mot_de_passe","$mot_de_passe",time()+$expire,"/","");
	session_start();
	session_register('user');
	session_register('mot_de_passe');
	$_SESSION['user'] = $pseudo;
	$_SESSION['mot_de_passe'] = $mot_de_passe;
	header("Location: index.php?page=championnat");
}
}
?>
fonctions.php
function VerifSession ($pseudo,$user_mdp)
{

if ($user_pseudo and $user_mdp)
    {
        $requete= "SELECT mot_de_passe, id_prono FROM phpl_membres WHERE pseudo='$user_pseudo'";
        $result = mysql_query($requete);
        $row = mysql_fetch_array($result);
        
        if ($row["mot_de_passe"] == $user_mdp);
        $_SESSION['admin'] = $row['admin'];
                                            
    //session_start();
    }
else {$a=0;}
return ("$a");
}
Voila j'ai mit les pages concerné pour que tu vois un peu plus clair sur le script ;)
Par contre j'ai pas tous mit la page fonctions.php parce que le reste ne sert a rien a ce que je veut faire ;)

Posté : 16 févr. 2008, 15:52
par Truc
i
$_SESSION['admin'] = $row['admin']; // en récupérant par SELECT admin, ... FROM ....

...
tu ne récupères pas le champ "admin" de la base donc cqfd ...

Posté : 16 févr. 2008, 16:02
par Angerfist
function VerifSession ($pseudo,$user_mdp)
{

if ($user_pseudo and $user_mdp)
    {
        $requete= "SELECT mot_de_passe, id_prono FROM phpl_membres WHERE pseudo='$user_pseudo'";
        $result = mysql_query($requete);
        $row = mysql_fetch_array($result);
        
        if ($row["mot_de_passe"] == $user_mdp);
        $_SESSION['admin'] = $row['id_prono'];
                                            
    //session_start();
    }
else {$a=0;}
return ("$a");
}
Je dois donc récupérer "id_prono" ?

Posté : 16 févr. 2008, 16:05
par Truc
Je ne sais pas moi....
Dans la structure de la table je vois

Code : Tout sélectionner

`admin` enum('0','1','2') collate latin1_general_ci NOT NULL default '0',
Tu parles au début d'un champ énum pour les droit... donc je me dis qu'il s'agit du champ "admin" pourquoi tu veux récupérer "id_prono" (aucune idée à quoi correspond ce champ :? )

Posté : 16 févr. 2008, 16:13
par Angerfist
la base qui contient c'est phpl_membres, donc je met phpl_membres ?