PHP+SQL gestion de membres

Bonjour,
dans le cadre de mes études j'ai un projet à réaliser, dont l'élaboration d'un site web.
Je me bats avec le PHP+MYSQL pour créer une partie membres !

J'ai déjà créer le formulaire d'inscription avec accès à la base de données, après il faut donc une page de login pour s'identifier, mais comment faire pour que une fois identifié le membre ai des "avantages".

Par exemple avoir des pages masquées pour les visiteurs, mais visible pour les membres.

Je suis encore débutante donc merci d'être le plus précis possible :$

Merci.
Configuration: Windows XP
Firefox 2.0.0.12

31 réponses

Résumé de la discussion

La discussion porte sur l’implémentation d’un espace réservé pour les membres via PHP et MySQL, avec une page de login et le passage d’un état d’authentification après connexion. Plusieurs réponses proposent des approches pratiques : récupérer les valeurs POST avant la requête, tester le résultat avec mysql_num_rows et utiliser des sessions pour mémoriser la connexion. Des tutos montrent des méthodes robustes, incluant la gestion des erreurs (try/catch), l’usage de constantes pour les paramètres et une présentation claire du code, avec des conseils de débogage. En parallèle, des échanges abordent des difficultés comme les erreurs SQL et l’importance d’un débogage ligne par ligne pour faire aboutir l’inscription et le login.

Bobot (l’IA à votre service)
  1. Nickel c'est exactement ce que je cherchais il est un peu tard mais bon je vais essayé de faire ça correctement.

    Merci a vous deux.
    1. bonsoir et merci dalida je viens de jeter un oeil rapide..interressant
      1. Contributeur
        salut,

        je me permets une deuxième couche avec un autre tuto, parce que les sessions sont aussi compliquées que nécessaires pour un(e) débutant(e).
        1. bonsoir marion je suis la mais pas longtemps

          regarde ici pour les sessions

          https://phpsources.net/tutoriel-sessions.htm

          en ce qui concerne les session je peut dire rapidement que quand tu est loggé ,a partir du moment ou tu a session start la session continue,si entre temps tu passe par une page ou tu n'a pas ça (session start) tu sera deconnecté.

          Un exemple concret sur mon site j'ai une partie avec session(partie privé) et l'autre sans(que j'appelle public)

          si tu te logge dans l'espace privé et que tu va dans l'espace public,pour revenir dans l'espace privé il faudra te reloggé,car ta session aura disparue.(fait l'expérience si tu veut)

          c'est pas un bug ,mais c'est simplement que j'ai pas encore eu le temps d'adapter toutes mes pages.. ;-)

          donc a chaque fois que tu veiut conserver une session il te faut mettre ce code en debut de page
          et pour se deconnecter tu met
          <?php session_destroy(); ?>

          @+
          1. Salut Lewis, j'espère que tu es la :D lol

            J'ai recopié ton code mais je me pose toujours la même question, ne faut-il pas récupérer des valeurs comme avec le POST précédemment ? Ou est stocké l'information que nous somme logger durant notre changement de page?

            J'aurais besoin de résoudre ce problème ce soir donc merciiiii :$
            1. Bonsoir marion tu peut mettre en debut de chaque page le principe des sessions

              <?
              //// On appelle la session
              session_start();
              
              //////je verifie que la ssession est remplie
              if (empty($_SESSION['visiteur'] ))// la session est vide donc le type est pas loggé
              {
              header ("Location:/login.php");//tu le redirige vers la page de connexion
              exit();
              }
              $visiteur=$_SESSION['visiteur'];//nom de la session pour le nom de profil
              


              ilfaut mettre ca en tout debut
              1. Salut, merci pour ce code, j'ai retrouvé la trace sur le siteduzero et ça à était !

                Par contre je me posé une question peut être toute bête, mais une fois "logué" ou est stockée cette "information" pour ne pas avoir à se reconnecter à chaque page privé, quelle valeur faut-il récupérée sur une page protégée..

                Comment faire quoi :o

                Thanks so much
                1. Peux-tu m'aider à incorporer une vérification pour la forme de l'email stp

                  Vérifier par exemple qu'il y a bien un @

                  Merci beaucoup
                  1. on peut voir ca demain je vaisau dodo

                    je te colle un code a moi quifonctionne je t'expliquerais ca demain si tu veut

                     //verification quel 'adresse mail est valide
                    									$test_mail=eregi ('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)+$', $_POST['email']); 
                    									if(!$test_mail)
                    									//L'adresse est inavlide
                    									{
                    									 ?>
                    <p><strong>Attention votre adresse mail est invalide</strong></p>
                    										<td align="center"><a href="/index.php">retourner au formulaire d'inscription</a></td>
                    											<?
                    											exit();
                    									 }
                    


                    bonne nuit
                    @+
                2. bonsoir marion je pense que c'est tout simplement parce que tu n'a pas recuipere tes valeurs POST
                  en effet ta requete c'est :
                  $sql = "SELECT * FROM adherent WHERE login='$login' AND pw='$pw'";

                  mais je vois pas la trace de $login et $pw
                  donc rajoute ca avant de lancer ta connexion
                  (je passe les verif si les valeurs sont presentes avec isset)
                  $login=$_POST['login'];
                  $pw=$_POST['pw'];

                  @+
                  1. Bonsoir, j'ai bien essayé de suivre ton conseil en affichant les variables même si je n'ai pas très bien compris en quoi cela pouvait m'aider :s

                    Néanmoins voici le code peut-être trouverez vous l'erreur :

                    PAGE LOGIN.php :

                    <div id="contenu">
                    
                    <?php
                    	// utilisation de constantes, plus pratiques pour modifier les valeurs quand tu passes chez ton hébergeur
                    	define( 'DB_HOST' , 'localhost' );
                    	define( 'DB_USER' , 'root' );
                    	define( 'DB_PASSWORD' , '' );
                    	define( 'DB_NAME' , 'php' );
                    	// sandwich Try/Catch, toutes les erreurs sont gérées au même endroit
                    	// chaque fois que tu lèves une erreur avec 'throw new Exception()' le code saute au 'Catch()'
                    
                    // CONNEXION A LA BASE DE DONNEE
                    $db_link = @mysql_connect( DB_HOST , DB_USER , DB_PASSWORD );
                    mysql_select_db( DB_NAME );
                    if(!$db_link) {echo "Connexion impossible à la base de données"; exit;}
                    
                    // ON SELECTIONNE L'ENREGISTREMENT CONTENANT LE LOGIN ET MOT DE PASSE
                    $sql = "SELECT *  FROM adherent WHERE login='$login' AND pw='$pw'";
                    echo( "<p>$sql</p>" );
                    $requete = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
                    
                    // SI AUCUN ENREGISTREMENT NE CORRESPOND
                    echo( "<p>{mysql_num_rows($requete)}</p>"  );
                    if(mysql_num_rows($requete)===0)
                    {
                    echo "erreuuuuuuuuuuuuuuuuuuuuuuuur";
                    }
                    // SI LE LOGIN ET MOT DE PASSE SONT EXACTES
                    else
                    {
                    echo "vous ete connecte";
                    }
                    // DECONNEXION MYSQL
                    mysql_close($db_link);
                    ?> 
                    
                    
                    </div>
                    


                    et voici mon formulaire de login

                    PAGE MEMBRES.PHP
                    <form method="post" action="index.php?page=login">
                      <b><font face="Verdana" size="1">Login<br>
                        <input type="text" name="login">
                        <br>
                        <br>
                        Mot de passe</font></b><br>
                        <input type="password" name="pw">
                        <br>
                        <br>
                        <input type="submit" name="Submit" value="Entrer">
                    </form>
                    1. Contributeur
                      re,

                      travaille étape par étape.
                      à chaque fois que tu utilises une variable, imprime la. par exemple pour ta requête SQL :
                      $sql = "blablabla";
                      echo( "<p>$sql</p>" );

                      et pareil pour les valeur à tester.
                      echo( "<p>{mysql_num_rows($requete)}</p>"  );
                      if(mysql_num_rows($requete)==0) 
                      { 
                      ...

                      en fait c'est du débogage ligne par ligne !

                      à mon avis c'est ton test d'égalité, si c'est toujours celui là que tu utilises. sinon C/C ton code entier stp.
                      1. J'ai donc mis ça en début de code

                        mysql_select_db( DB_NAME );


                        en suivant l'example de Dalida pour les Define, mais j'ai comme hier toujours "erreuuuuuur"
                        1. Ah oui, c'est vrai que j'avais vu l'erreur avec le pw-login mais j'avais pas fait attention au ; à la fin !

                          Par contre il y a encore un problème c'est que la base de donnée "php" n'est pas selectionner !
                          1. Et bien j'ai la dernière version de wampserver donc je pense quand même qu'il gère le PHP5, je vais essayer de trouver ce qui ne va pas un peu plus tard cette après-midi...

                            Merci de votre aide encore!
                            1. Décidément je dois vraiment être nulle...C'est vrai que votre code Dalida à l'air plus propre et plus professionnel, je l'ai plutôt bien compris, mais la page ne s'exécute pas, il semblerait qu'il y a une erreur avec le catch, j'ai essayé de le changer mais toujours pareil...

                              Quand à ton code lewis, il semblerait que j'ai encore un problème avec "mysql_query" avec cette ligne :

                              $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

                              PS: vous mettez quelles balises pour écrire votre code dans le forum?
                              1. Contributeur
                                salut,

                                mon code est en PHP5, ce n'est peut être pas la version de ton serveur.

                                le bouton pour le code ou entre balises "code" (comme celle de HTML).
                              2. bonjour ,logique qu'il y est une erreur c'est de ma faute..
                                je t'ai marqué ca :
                                $sql = "SELECT * FROM adherent WHERE login='$pw' AND pw='$pw'"

                                alors qu'il faut marquer
                                $sql = "SELECT * FROM adherent WHERE login='$login' AND pw='$pw'";

                                j'avais oublié le ; à la fin et le champp login je l'avais appelé pw...dsl
                            2. bonjour essaye comme ca

                              
                              //evidemment avant tu verifi que $_pot['login'] et post_['pw'] sont pas vide.
                              //ensuite tu reprends une partie du code plus haut
                               
                              // On utilise les fonctions PHP mysql_real_escape_string et htmlspecialchars pour la sécurité
                              $login = ($_POST['login']);
                              $pw = ($_POST['pw']); 
                              
                                $db_link = @mysql_connect("localhost","root","");
                              
                               if(!$db_link) {echo "Connexion impossible à la base de données"; exit;}
                              
                                    //on va regarder si le couple mp et login existe
                              
                                     $sql = "SELECT *  FROM adherent WHERE login='$pw' AND pw='$pw'"
                              
                                     $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
                              
                              //on retourne le resultat sous forme d'un tableau associatif avec mysql_fetch_array
                                    $data = mysql_fetch_array($req); 
                                     
                                    mysql_free_result($req); //on libere la memoire allouée à la requete
                                mysql_close(); 
                                    
                                    // on recupere les valeurs contenue dans le champ login et pw de ta table
                                    $membre=$data['login'];
                                    $pass=$data['pw'];
                              
                              if (($membre==$login) AND ($pass==$pw))
                                  {
                              //le mot de passe et le login corresponde
                                       echo 'je suis connectée';
                                   } 
                                   // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe 
                              else
                                    {
                                      echo 'impossible de se connecter
                              //ensuite tu peut detailler l'erreur si c'est le psw ou le login qui est pas bon
                                     }
                              
                              

                              voila Marion avec tout ca le code de Dalida le mien tu devrais y arriver ,bon courage
                              @+
                              1. Contributeur
                                salut,

                                je pense que c'est un problème de test, il faudrait tester le type.
                                if( mysql_num_rows($requete) === 0 ) 


                                et tant qu'à apprendre&helip;
                                je te soumets ma façon de traiter une connexion/requête.
                                si cette façon de coder de déstabilise, oublie, sinon on pourra t'expliquer ligne par ligne.
                                <?php
                                	// utilisation de constantes, plus pratiques pour modifier les valeurs quand tu passes chez ton hébergeur
                                	define( 'DB_HOST' , 'localhost' );
                                	define( 'DB_USER' , 'root' );
                                	define( 'DB_PASSWORD' , '' );
                                	define( 'DB_NAME' , 'php' );
                                	// sandwich Try/Catch, toutes les erreurs sont gérées au même endroit
                                	// chaque fois que tu lèves une erreur avec 'throw new Exception()' le code saute au 'Catch()'
                                	try
                                	{
                                		$db_link = @mysql_connect( DB_HOST , DB_USER , DB_PASSWORD );
                                		if( !$db_link )
                                		{
                                			throw new Exception('Connexion impossible au serveur de donn&eacute;es');
                                		}
                                		if( !@mysql_select_db( DB_NAME ) )
                                		{
                                			throw new Exception( 'Impossible de s&eacute;lectionner la base de donn&eacute;es' );
                                		}
                                		$sql = "SELECT `login` , `pw` FROM `adherent` WHERE login='$login' AND pw='$pw' LIMIT 1;";
                                		$result = mysql_query( $sql , $db_link ); // soigne la rédaction, ça facilite le débogage
                                		if( $result === false ) // test de type, important !
                                		{
                                			throw new Exception( 'Erreur lors de l\'ex&eacute;cution de la requ&ecirc;te;' );
                                		}
                                		if( mysql_num_rows($requete) !== 1 )
                                		{
                                			throw new Exception( 'Connexion &eacute;chou&eacute;e' );
                                		}
                                		echo '<p>Connexion r&eacute;ussie</p>';
                                	}
                                	catch( Exception $e )
                                	{
                                		echo "<p>{$e->getMessage()}</p>"
                                	}
                                ?>

                                dans tous les cas :

                                • présente bien ton code (aération, indentation, majuscules pour les mots clé SQL…) c'est juste une bonne habitude à prendre

                                • pense à aller voir dans le manuel PHP quels sont les types retournés par les fonctions et si besoin est de tester le type avec un triple égale dans tes tests.

                                PS : le bouton pour mettre en forme le code.
                                1. Bon j'arrête pour ce soir !
                                  Petit récapitulatif...
                                  L'inscription ça fonctionne...

                                  Voici mon formulaire pour le login :
                                  [quote]
                                  <form method="post" action="index.php?page=login">
                                  <b><font face="Verdana" size="1">Login<br>
                                  <input type="text" name="login">
                                  <br>
                                  <br>
                                  Mot de passe</font></b><br>
                                  <input type="password" name="pw">
                                  <br>
                                  <br>
                                  <input type="submit" name="Submit" value="Entrer">
                                  </form>
                                  [/quote]
                                  et voici ma page login :
                                  [quote]
                                  <?php

                                  // CONNEXION A LA BASE DE DONNEE
                                  $db_link = @mysql_connect("localhost","root","");
                                  if(!$db_link) {echo "Connexion impossible à la base de données"; exit;}

                                  // ON SELECTIONNE L'ENREGISTREMENT CONTENANT LE LOGIN ET MOT DE PASSE
                                  $requete=mysql_db_query("php","select login,pw from adherent where login=\"$login\" and pw=\"$pw\"",$db_link) or die(mysql_error());

                                  // SI AUCUN ENREGISTREMENT NE CORRESPOND
                                  if(mysql_num_rows($requete)==0)
                                  {
                                  echo "erreuuuuuuuuuuuuuuuuuuuuuuuur";
                                  }
                                  // SI LE LOGIN ET MOT DE PASSE SONT EXACTES
                                  else
                                  {
                                  echo "vous ete connecte";
                                  }
                                  // DECONNEXION MYSQL
                                  mysql_close($db_link);
                                  ?>
                                  [/quote]

                                  Et....ça ne marche pas, j'ai toujours le msg "erreur" je pense donc qu'il y a un probleme avec mysql_db_query qui retourne toujours false !

                                  Si vous avez une solutions, des idées...

                                  Merci, a demain.
                                  1. yessss :D
                                    j'ai enfin réussi mon formulaire d'inscription, si ça marche redirection vers le login sinon retour au formulaire...

                                    Par contre pour le login je ne sais pas du tout j'essaye de trouver un ancien post pour m'en inspirer !

                                    Biz & merci :D
                                    • 1
                                    • 2