(php/mysql) session administrateur

Résolu
Gwendo69 Messages postés 157 Statut Membre -  
HabibSalhi Messages postés 1 Statut Membre -
Bonjour,

Je démarre tout juste en php. J'ai commencé à faire un site avec une base de données.

En fait, je voudrais pouvoir faire un formulaire (ça je sais faire) pour permettre à un administrateur d'ouvrir sa propre session avec son pseudo et mot de passe (je ne sais pas faire) afin qu'il puisse mettre à jour les données via une page du site lui-même (genre zones de texte qu'on remplit avant de cliquer sur un bouton "mettre à jour"). Il faut que l'administrateur puisse donc accéder à des pages en plus que les visiteurs classiques. Si ça peut aider, j'ai déjà fait une table 'utilisateur' avec pour champs: id_utilisateur, pseudo, mot-passe, email.

J'ai cherché de la documentation là-dessus, mais je n'ai rien trouvé qui puisse m'aider à faire ça. l'important est de pouvoir mettre à jour les données juste en passant par le site.
Est-ce que j'ai vraiment besoin de me préoccuper des sessions pour faire ça?
Comment savoir si c'est le bon utilisateur?
Je dois inscrire ses données dans la table? Elle était pour autre chose, mais si ça marche pourquoi pas.
Si vous n'avez pas la réponse tant pis, mais j'aimerais au moins savoir où chercher la doc qu'il me faut et qu'elles sont les erreurs fréquentes à éviter.

J'espère que ce que j'écris est assez clair (pas sûr).
Merci d'avance, Gwendo.

Outils utilisés: wamp serveur 2 (pour la base de données) et notepad++ (pour écrire le code en html, php, css).
Configuration: Windows Vista
Firefox 3.0.7

6 réponses

  1. bissdebrazza Messages postés 2886 Statut Contributeur 712
     
    salut!
    voici un exemple simple:
    <?php
    session_start(); // début de session
    
    // Paramètres de connexion
    $hostname= "localhost"; // nom ou ip de votre serveur
    $database = ""; // nom de votre base de données
    $username= "root"; // nom d'utilisateur (root par défaut) 
    $password= ""; // mot de passe
    $db = mysql_pconnect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR); 
    
    
    if (isset($_POST['login'])){ // execution uniquement apres envoi du formulaire (test si la variable POST existe)
    	$login = addslashes($_POST['login']); // mise en variable du nom d'utilisateur
    	$pass = addslashes(($_POST['pass'])); // mise en variable du mot de passe
    	
    // requete sur la table administrateurs (on récupère les infos de la personne)
    mysql_select_db($database, $db);
    $verif_query=sprintf("SELECT * FROM ta_table WHERE login='$login' AND password='$pass'"); 
    $verif = mysql_query($verif_query, $db) or die(mysql_error());
    $row_verif = mysql_fetch_assoc($verif);
    $admin = mysql_num_rows($verif);
    
    	if ($admin) {	// On test s'il y a un utilisateur correspondant
    		    session_register("authentification"); // enregistrement de la session
    		
    		// déclaration des variables de session
    		
    		$_SESSION['nom'] = $row_verif['nom']; // Son nom
    		$_SESSION['login'] = $row_verif['login']; // Son Login
    		
    		
    		header("Location:espaceadmin.php"); // redirection si OK
    		
    		
    	}
    	else {
    		header("Location:connectadmin.php?erreur=login"); // redirection si utilisateur non reconnu
    		
    		
    	}
    }
    
    
    // Gestion de la  déconnexion
    if(isset($_GET['erreur']) && $_GET['erreur'] == 'logout'){ // Test sur les paramètres d'URL qui permettront d'identifier un contexte de déconnexion
    	$nom = $_SESSION['nom']; // On garde le prénom en variable pour dire au revoir 
    	session_unset("authentification");
    	header("Location:connectadmin.php?erreur=delog&nom=$nom");
    	
    	
    }
    ?>
    
    
    
    <html>
    <!-- DW6 -->
    <head>
    <!-- Copyright 2005 Macromedia, Inc. All rights reserved. -->
    <title>::Espace Administrateur::</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    
    </head>
    <body bgcolor="#64748B">
    <form action="" method="post" name="connect">
      <p align="center" class="titre"><strong>- : : : CONNEXION CLIENT : : : -</strong></p>
      <p align="center" class="title">
        <?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "login")) { // Affiche l'erreur  ?>
        <strong class="erreur"><font color="#FF0000">Echec d'authentification !!! > login ou mot de passe incorrect</font></strong>
        <?php } ?>
        <?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "delog")) { // Affiche l'erreur ?>
        <strong class="reussite"><font color="#00FF00">D&eacute;connexion r&eacute;ussie... A bient&ocirc;t </font><?php echo $_GET['nom'];?> !</strong>
        <?php } ?>
        <?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "intru")) { // Affiche l'erreur ?>
        <strong class="erreur"><font color="#FF0000">Echec d'authentification !!! > Aucune session n'est ouverte ou vous n'avez pas les droits pour afficher cette page</font></strong>
        <?php } ?>
      </p>
      
      <table width="300"  border="0" align="center" cellpadding="10" cellspacing="0" bgcolor="#eeeeee" class="tableaux">
        <tr>
          <td width="50%""><div align="right">login</div></td>
          <td width="50%"><input name="login" type="text" id="login"></td>
        </tr>
        <tr>
          <td width="50%""><div align="right">mot de passe</div></td>
          <td width="50%"><input name="pass" type="password" id="pass"></td>
        </tr>
        <tr>
          <td height="34" colspan="2"><div align="center">
              <input type="submit" name="Submit" value="Se connecter">
          </div></td>
        </tr>
      </table>
      
    </form>
    
    
    
    </body>
    </html>
    
    

    Bon voila,tu adaptes et ça devrai marché!
    12
    1. HabibSalhi Messages postés 1 Statut Membre
       
      merci
      0
  2. bissdebrazza Messages postés 2886 Statut Contributeur 712
     
    Salut!
    Voici un tuto pour faire la connexion avec login et mot de passe.
    N'hésite pas si tu rencontres des difficultés!
    2
  3. Gwendo69 Messages postés 157 Statut Membre 13
     
    Merci beaucoup!

    Ça marche impec! En plus au passage j'ai appris des choses en essayant de comprendre le code, vive les mémento!
    J'ai encore un peu de mal à comprendre certains trucs avec les requêtes sur la table pour récupérer les infos de l'utilisateur et la gestion des erreurs au niveau du code php (pas dans le formulaire, ça j'ai compris) mais je vais essayer de trouver.

    Merci encore, Gwendo.
    1
  4. Gwendo69 Messages postés 157 Statut Membre 13
     
    Bonjour,

    D'abord merci pour la réponse. Mais je suis désolée, j'ai du faire une erreur quelque part. J'ai adapté le code pour mon site et parce que le nom de ma table et de mes champs sont différents, mais ça pose encore problème.

    J'ai fait une première page connexion.php. Voici le code:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html lang="fr" xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>Creer un compte</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>

    <body>
    <p>
    <a href="compte.php">Creer le nouveau compte utilisateur</a>
    </p>
    </body>
    </html>

    Ensuite, j'ai créé la page compte.php:

    <?php
    // Redirige l'utilisateur s'il est déjà identifié
    if(isset($_COOKIE["ID_UTILISATEUR"]))
    {
    header("Location: index.php");
    //index.php est la page d'accueil du site
    }
    else
    {
    // Formulaire visible par défaut
    $masquer_formulaire = false;
    // Une fois le formulaire envoyé
    if(isset($_POST["BT_Envoyer"]))
    {
    // Vérification de la validité des champs
    if(!ereg("^[A-Za-z0-9_]{4,20}$", $_POST["TB_Nom_Utilisateur"]))
    {
    $message = "Votre nom d'utilisateur doit comporter entre 4 et 20 caractères<br />\n";
    $message .= "L'utilisation de l'underscore est autorisée";
    }
    elseif(!ereg("^[A-Za-z0-9]{4,}$", $_POST["TB_Mot_de_Passe"]))
    {
    $message = "Votre mot de passe doit comporter au moins 4 caractères";
    }
    elseif($_POST["TB_Mot_de_Passe"] != $_POST["TB_Confirmation_Mot_de_Passe"])
    {
    $message = "Votre mot de passe n'a pas été correctement confirmé";
    }
    elseif(!ereg("^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-zA-Z]{2,4}$",
    $_POST["TB_Adresse_Email"]))
    {
    $message = "Votre adresse e-mail n'est pas valide";
    }
    else
    {
    // Connexion à la base de données
    // Valeurs à modifier selon vos paramètres configuration
    mysql_connect("localhost", "root", "");
    mysql_select_db("musique");
    // Vérification de l'unicité du nom d'utilisateur et de l'adresse e-mail
    $result = mysql_query("
    SELECT nom_tilisateur, adresse_email
    FROM utilisateur
    WHERE nom_utilisateur = '" . $_POST["TB_Nom_Utilisateur"] . "'
    OR adresse_email = '" . $_POST["TB_Adresse_Email"] . "'
    ");
    // Si une erreur survient
    if(!$result)
    {
    $message = "Une erreur est survenue lors de la création de votre compte utilisateur";
    }
    else
    {
    // Si un enregistrement est trouvé
    if(mysql_num_rows($result) > 0)
    {
    while($row = mysql_fetch_array($result))
    {
    if($_POST["TB_Nom_Utilisateur"] == $row["nom_utilisateur"])
    {
    $message = "Le nom d'utilisateur " . $_POST["TB_Nom_Utilisateur"];
    $message .= "est déjà utilisé";
    }
    elseif($_POST["TB_Adresse_Email"] == $row["adresse_email"])
    {
    $message = "L'adresse e-mail " . $_POST["TB_Adresse_Email"];
    $message .= "est déjà utilisée";
    }
    }
    }
    else
    {
    // Génération de la clef d'activation
    $caracteres = array("a", "b", "c", "d", "e", "f", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
    $caracteres_aleatoires = array_rand($caracteres, 8);
    $clef_activation = "";
    foreach($caracteres_aleatoires as $i)
    {
    $clef_activation .= $caracteres[$i];
    }
    // Création du compte utilisateur
    $result = mysql_query("
    INSERT INTO utilisateur
    (nom_utilisateur, mot_de_passe, adresse_email, date_inscription, clef_activation)
    VALUES(
    '" . $_POST["TB_Nom_Utilisateur"] . "'
    , '" . md5($_POST["TB_Mot_de_Passe"]) . "'
    , '" . $_POST["TB_Adresse_Email"] . "'
    , '" . time() . "'
    , '" . $clef_activation . "'
    )
    ");
    // Si une erreur survient
    if(!$result)
    {
    $message = "Une erreur est survenue lors de la création de votre compte utilisateur";
    }
    else
    {
    // Envoi du mail d'activation
    $sujet = "Activation de votre compte utilisateur";
    $message = "Pour valider votre inscription, merci de cliquer sur le lien suivant :\n";
    $message .= "[http://]" . $_SERVER["SERVER_NAME"];
    $message .= "/activer-compte-utilisateur.php?id=" . mysql_insert_id();
    $message .= "&clef=" . $clef_activation;
    // Si une erreur survient
    if(!@mail($_POST["TB_Adresse_Email"], $sujet, $message))
    {
    $message = "Une erreur est survenue lors de l'envoi du mail d'activation<br />\n";
    $message .= "Veuillez contacter l'administrateur afin d'activer votre compte";
    }
    else
    {
    // Message de confirmation
    $message = "Votre compte utilisateur a correctement été créer<br />\n";
    $message .= "Un email vient de vous être envoyer afin de l'activer";
    // On masque le formulaire
    $masquer_formulaire = true;
    }
    }
    }
    }
    }
    // Fermeture de la connexion à la base de données
    mysql_close();
    }
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html lang="fr" xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>Creer un espace membre</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>

    <body>
    <?php if(isset($message)) { ?>
    <p><?php= $message; ?></p>
    <?php } if($masquer_formulaire != true) { ?>
    <form action="http://<?php= $_SERVER["SERVER_NAME"] . $_SERVER["SCRIPT_NAME"]; ?>" method="post">
    <p>
    Nom d'utilisateur : <input type="text" name="TB_Nom_Utilisateur" />
    </p>
    <p>
    Mot de passe : <input type="password" name="TB_Mot_de_Passe" />
    </p>
    <p>
    Confirmation du mot de passe : <input type="password" name="TB_Confirmation_Mot_de_Passe" />
    </p>
    <p>
    Adresse e-mail : <input type="text" name="TB_Adresse_Email" />
    </p>
    <p>
    <input type="submit" name="BT_Envoyer" value="Envoyer" />
    </p>
    </form>
    <?php } ?>
    </body>
    </html>

    Au final, sur la page du formulaire il y a bien le formulaire mais aussi marqué " method="post"> au dessus. Les données ne s'enregistrent pas non plus dans la table, puisqu'il n'y a pas d'envoi de message.
    Je continue à chercher, mais si quelqu'un a une autre idée. Merci.

    Gwendo.
    0
    1. salma
       
      ca marche pas avec le mysql
      il affiche erreur utiliser mysqli ou pdp
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831 > salma
         
        Bonjour
        Et oui.... c'est obsolète....
        Va faire un tour ici : https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
        Puis converti le code en Mysqli ou PDO .
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. bissdebrazza Messages postés 2886 Statut Contributeur 712
     
    Salut Gwendo(même prénom que ma sœur ainée)
    Dis tu utilises l'envoi de mail sur ton projet?je vois que c'est assez complexe pour toi.je te monte rapidement un script pour te connecter ok?
    0
  7. Gwendo69 Messages postés 157 Statut Membre 13
     
    Salut,

    En fait j'ai essayé d'adapter ce qui est marqué dans le tuto, mais plus c'est simple mieux c'est (pour l'instant ça a pas l'air d'être le cas, j'essaie de trouver le problème mais bon c'est pas encore ça).
    L'envoie de mail n'est pas obligatoire si il y a une autre solution.
    Le principal est que l'administrateur puisse accéder à des pages (pour les mises à jours) en plus, contrairement aux autres utilisateurs.
    Enfin, si tu peux et que tu as le temps pour m'aider, c'est impec.

    A+.
    0