Page 1 sur 1

Session admin ?

Posté : 26 déc. 2008, 15:28
par Tip
Bonjour à tous.

J’ai utilisé le tutoriel d’inscription/connexion présent sur ce site pour l’intégrer à mon site.

Celui-ci fonctionne parfaitement, seulement j’aurais besoin d’une fonctionnalité en plus.

En effet la il n’existe que 2 types de session (inscrit/non inscrit), et j’aurais aimé en rajouté une de type « admin » qui me permette d’accéder à certaine partie du site uniquement à moi en me connectant avec un Login et un Mdp.

Voici donc mon code php d'inscription et de connexion.


Inscription :

<?php

header('Content-type: text/html; charset=UTF-8');


function Verif_magicquotes ($chaine) 
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);

return $chaine;
} 


$message = null;



if (isset($_POST['pseudo'])) 
{


    $pseudo = (isset($_POST['pseudo']) && trim($_POST['pseudo']) != '')? Verif_magicquotes($_POST['pseudo']) : null;
	$nom = (isset($_POST['nom']) && trim($_POST['nom']) != '')? Verif_magicquotes($_POST['nom']) : null;
	$prenom = (isset($_POST['prenom']) && trim($_POST['prenom']) != '')? Verif_magicquotes($_POST['prenom']) : null;
    $pass = (isset($_POST['pass']) && trim($_POST['pass']) != '')? Verif_magicquotes($_POST['pass']) : null;
	
		
    


    if(isset($pseudo,$pass,$nom,$prenom)) 
    {

         $hostname = "localhost";
         $database = "bdd_site_php_cours";
         $username = "root";
         $password = "";
    
         $connection = mysql_connect($hostname, $username, $password) or die(mysql_error());

         
         mysql_select_db($database, $connection);
    
         
         mysql_query("SET NAMES 'utf8'");
    
         
         $nom = mysql_real_escape_string($nom);
         $password = mysql_real_escape_string($pass);
    
    

         $requete = "SELECT count(*) as nb FROM membres WHERE pseudo = '".$pseudo."'";
    
         
         $req_exec = mysql_query($requete) or die(mysql_error());
    
        
         $resultat = mysql_fetch_assoc($req_exec);
    

         
         if ($resultat['nb'] == 0) 
       
         {
            
             $insertion = "INSERT INTO membres(pseudo,nom,prenom,pass,date_enregistrement) VALUES('".$pseudo."','".$nom."','".$prenom."', '".$password."', NOW())";
         
            
             $inser_exec = mysql_query($insertion) or die(mysql_error());
        
           
             if ($inser_exec === true) 
             {

                 session_start();
                 $_SESSION['login'] = $pseudo;
            
                 
                 $message = 'Votre inscription est enregistrée. <a href = "../../index.php">Cliquez ici pour vous connecter</a>';
             }    
         }
         else
         {  
             $message = 'Ce pseudo est déjà utilisé, changez-le.';
         }
    }
    else 
    {    
         $message = 'Tout les champs doivent être remplis.';
    }
}
?>
Connexion :
<?php

header('Content-type: text/html; charset=UTF-8');


function Verif_magicquotes ($chaine) 
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);

return $chaine;
} 


$message = null;



if (isset($_POST['pseudo'])) 
{

    
    $pseudo = (isset($_POST['pseudo']) && trim($_POST['pseudo']) != '')? Verif_magicquotes($_POST['pseudo']) : null;
    $pass = (isset($_POST['pass']) && trim($_POST['pass']) != '')? Verif_magicquotes($_POST['pass']) : null;
    


    if(isset($pseudo,$pass)) 
    {

         $hostname = "localhost";
         $database = "bdd_site_php_cours";
         $username = "root";
         $password = "";
    
         $connection = mysql_connect($hostname, $username, $password) or die(mysql_error());

         
         mysql_select_db($database, $connection);
    
        
         mysql_query("SET NAMES 'utf8'");
    

         $nom = mysql_real_escape_string($pseudo);
         $password = mysql_real_escape_string($pass);
    
    
        
        $requete = "SELECT * FROM membres WHERE pseudo = '".$nom."' AND pass = '".$password."'";  
    
       
         $req_exec = mysql_query($requete) or die(mysql_error());
    
       
         $resultat = mysql_fetch_assoc($req_exec); 

        ; 
         if (isset($resultat['pseudo'],$resultat['pass']))  
               {
          
                 session_start();
                 $_SESSION['login'] = $pseudo;
            
                
                 $message = 'Bonjour '.htmlspecialchars($_SESSION['login']).'! Ready for da Bullshit?';
                }
                else
                {   
                $message = 'Le pseudo ou le mot de passe sont incorrect';
                } 

    }
    else 
    {  
    $message = 'Les champs Pseudo et Mot de passe doivent être remplis.';
    }
}
?>



    <form action = "#" method="post">
    <h4>Connexion</h4>
    <p id='pseudo'><label for = "pseudo">Pseudo : </label><input type="text" name="pseudo" id="pseudo" /></p>
    <p id='mdp'><label for = "pass">Mot de passe : </label><input type="password" name="pass" id="pass" /></p>
    <p><input type="submit" value="Envoyer" id = "valider" /></p>
    </form>
    <p id = "message"><?php if(isset($message)) echo $message ?></p>

  <p style="font-size:11px";>Pas encore inscrit?</p>
  <p style="font-size:11px";>Cliquez <a href="modules/connexion/inscription.php" > ici </a>
Je suis un grand débutant en php...

Merci d'avance pour votre aide!

Posté : 26 déc. 2008, 17:29
par niuxe
Salut,

Je fais un petit passage pour te signaler qu'il y a un petit soucis sur le code html. En effet, sur ta balise form la valeur de l'attribut action est erroné ("#"). À mon avis, tu devrais remplacer par :
<form action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post">
Cela pointe le fichier actuel. Puisque le formulaire est traité sur ce fichier (bonne méthodologie d'ailleur).

Pour ton petit soucis, j'entrevois une petite solution simple à mettre en place suivant ta logique.
Toutefois, il va falloir créer une table annexe pour les admins.
Tu ajoutes au formulaire un select (membre/admin).
Suivant l'option choisie, la requête diffère (connexion admins ou membres ?).

Néanmoins, mélanger les admins avec les membres. Ce n'est pas une bonne solution (On ne mélange pas les torchons avec les serviettes et Divisez pour mieux régner est une maxime très efficace en informatique ;))

Donc, il serait plus judicieux de refaire la même chose mais seulement pour la section admin. Tu auras de ce fait un formulaire connexion membre et un formulaire connexion admin. Également, tu auras une table connexion membre et une table connexion admin.

Si tu as bien saisie le tuto (Je ne le connais pas.), tu devrais être en mesure de réaliser ta partie admin.

Deux solutions s'offrent à toi dont une nettement plus efficace que l'autre.

++

Posté : 26 déc. 2008, 18:02
par alaingpl
La réponse de Nolem est excellente lorsqu'il y a plusieurs administrateurs. Par contre si tu es le seul à gèrer ta partie admin, il me semble que d'installer tout tes fichiers dans un répertoire réservé à l'administration et inclure 2 fichiers 'htaccess' est plus judicieux.
A toiu de voir.

Posté : 26 déc. 2008, 18:30
par AB
Salut,
Je fais un petit passage pour te signaler qu'il y a un petit soucis sur le code html. En effet, sur ta balise form la valeur de l'attribut action est erroné ("#"). À mon avis, tu devrais remplacer par :
<form action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post">
Cela pointe le fichier actuel. Puisque le formulaire est traité sur ce fichier (bonne méthodologie d'ailleur).
Non c'est pas un soucis. '#' pointe également vers la même page. Cela dit le code action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>" est plus conventionnel pour le même résultat.

Pour le reste, d'une manière générale, la solution la plus simple est d'avoir une page de connexion pour les visiteurs et une autre pour les administrateurs.

Cela dit, s'il n'y a qu'un administrateur tu peux faire beaucoup plus simple puisque si tu as respecté la création de la table comme dans le tuto, le champ pseudo est unique et donc il n'y aura qu'un pseudo "Tip" par exemple.

Dans ce cas, tu peux donc garder un seul et unique système d'authentification et simplement modifier la protection des pages.
Pour la protection des pages standard accessibles aux visiteurs authentifiés, tu gardes la syntaxe du tuto :
session_start(); 
if(!isset($_SESSION['login'])) {die('Vous devez être enregistré pour accéder à cette partie du site');} 
Et pour la protection des pages auxquelles tu veux être le seul à avoir accès :
session_start();
if(!isset($_SESSION['login']) || $_SESSION['login'] != 'Tip') {die('Espace réservé administrateur');} 

Posté : 26 déc. 2008, 21:47
par Tip
Merci tout le monde et plus particulèrement AB, c'est exactement ce que je cherchais.

Je serais le seul admin sur ce site je peux donc utiliser ta solution.

Merci encore et à bientôt, je repasserai surement sous peu ,p

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]