Partage
  • Partager sur Facebook
  • Partager sur Twitter

Gestiond'un session PHP

Sujet résolu
    17 janvier 2017 à 20:04:28

    Bonjour tout le monde! :D

    J'ai une question qui va paraître complétement stupide pour certains mais qui me pose quelques problèmes... je crée un site web qui gère (entre autres) un principe de session. Tout marche bien, je peux m'inscrire, me connecter, me déconnecter, ... La base de données réagit bien :D

    Le problème est celui-ci : J'aimerais changer le header du site qui contient les options de connexion, déconnexion et inscription avec un truc comme profil et déconnexion.

    Je sais pas si c'est clair mais voici u bout du code :

    <header>
            <div id="titre_principal">
                <div id="logo">
                    <a href="accueil.php"><img src="images/asbl_fond_transparent.png" alt="Logo ASBL" /></a> 
                </div>
             </div>
             	
             <div id="header">
                <ul>
                    <li><a href="inscription.php">Inscription</a></li>
            		<li><a href="connexion.php">Connexion</a></li>
            		<li><a href="deconnexion.php">Deconnexion</a></li>
        		</ul>
            </div>            
    </header>

    C'est le header avec l'image du site et les 3 options...

    Encore une fois, j'aimerais que ces 3 options ne deviennent plus que "profil" et "déconnexion" (logique, on a plus besoin de se connecter ou de s'inscrire si on est déjà connecté...).

    Est-ce du JavaScript qui modifie le code? du PHP qui gère les variables $_SESSION?

    Merci d'avance :D

    • Partager sur Facebook
    • Partager sur Twitter
      17 janvier 2017 à 20:18:32

      Tu construis ton menu en fonction de l'existence de la session un petit if/else suffit !

      -
      Edité par wxcqsd 17 janvier 2017 à 20:19:22

      • Partager sur Facebook
      • Partager sur Twitter
        21 janvier 2017 à 14:39:56

        Ahahah mais oui! simplement :D

        Pourquoi j'y ai pas pensé plus tôt...? x)

        Merci! :D

        • Partager sur Facebook
        • Partager sur Twitter
          22 janvier 2017 à 17:33:30

          j'ai peut être crié victoire trop vite :/

          j'ai ajouté un if/else dans mon header, ce qui donne ceci :

          <header>
                  <div id="titre_principal">
                      <div id="logo">
                          <a href="accueil.php"><img src="images/asbl_fond_transparent.png" alt="Logo ASBL" /></a> 
                      </div>
                   </div>
                   	
                   <div id="header">
                   <?php 
                   	if(!isset($_SESSION['connecte']))
                   	{
                  ?>
                   		<ul>
          	                <li><a href="inscription.php">Inscription</a></li>
          	        		<li><a href="connexion.php">Connexion</a></li>
          	        		<li><a href="deconnexion.php">Deconnexion</a></li>
          	    		</ul>
                  <?php 
                   	}  
              		else
              		{
                  ?>
              			<ul>
              				<li><a href="profil.php">Profil</a></li>
              				<li><a href="deconnexion.php">Deconnexion</a></li>
              			</ul>
                  <?php 
              		}
                  ?>
          
              	
                  </div>            
          </header>

          ainsi qu'une variable de session (qui est dans le if) pour voir si la session était ouverte sauf que ca pose problème, cette variable $_SESSION indique tout le temps le warning "Undefined index : connecte in C:\ ... on line 3" qui est donc ma variable :

          <?php 
          session_start();
          $_SESSION['connecte'];
          ?>

          De plus, ca ne marche toujours pas... il ne distingue pas la session ouverte ou non, la connexion et déconnexion se font toujours correctement mais le header ne change pas :/ 


          • Partager sur Facebook
          • Partager sur Twitter
            22 janvier 2017 à 18:07:37

            Re, montres nous tout le code de la page du menu et celui de la connexion pour qu'on voient plus clair !
            • Partager sur Facebook
            • Partager sur Twitter
              22 janvier 2017 à 18:34:42

              $_SESSION['connecte'];

              Ne sert à rien.

              Tu affectes une valeur à $_SESSION['connecte'] au moins quelque part ?

              • Partager sur Facebook
              • Partager sur Twitter
                23 janvier 2017 à 17:49:03

                Pour le menu :

                C'est dans le header ici plus haut

                Pour la connexion :

                <?php 
                session_start();
                $_SESSION['connecte'];
                ?>
                
                <?php  
                    $arError = array(
                       'existEmail'=>"L'email entré existe déjà"
                       );
                 
                    if (isset($_GET['error'], $arError[$_GET['error']])) 
                    {
                        echo '<p>' . $arError[$_GET['error']] . '</p>';
                    }
                ?>
                
                
                <?php include("menu.php"); ?>
                <form method="post" action="connexionTraitement.php">
                    <p>
                        email :
                        <input type="text" name="mail" />
                        </br>
                        Mot de passe :
                        <input type="password" name="pass" />
                        </br>
                        <input type="submit" name="Valider">
                    </p>>
                </form>
                
                <?php include("footer.php"); ?>

                et la connexionTraitement :

                <?php 
                try
                {
                	$bdd = new PDO('mysql:host=localhost;dbname=asbl;charset=utf8', 'root', '');
                }
                catch(Exception $e)
                {
                	// En cas d'erreur, on affiche un message et on arrête tout
                	die('Erreur : '.$e->getMessage());
                }
                
                if (isset($_POST['mail']) AND isset($_POST['pass'])) 
                {
                	$mail = $_POST['mail'];
                 
                	// Récupération de la valeur du champ actif pour le login $login
                	$stmt = $bdd->prepare("SELECT actif FROM membres WHERE email like :email");
                
                	if($stmt->execute(array(':email' => $mail))  && $row = $stmt->fetch())
                	{
                	   	$actif = $row['actif']; // $actif contiendra alors 0 ou 1
                	}
                 
                	// Il ne nous reste plus qu'à tester la valeur du champ 'actif' pour
                	// autoriser ou non le membre à se connecter
                	 
                	if($actif != '1') // Si $actif est égal à 1, on autorise la connexion
                	{
                		header('Location: accueil.php?error=NoActiv');
                	}
                	else
                	{
                		// Hachage du mot de passe
                		$pass_hache = sha1($_POST['pass']);
                
                		// Vérification des identifiants
                		$req = $bdd->prepare('SELECT id FROM membres WHERE email = :email AND pass = :pass');
                		$req->execute(array(
                	    	'email' => $mail,
                	    	'pass' => $pass_hache));
                
                		$resultat = $req->fetch();
                
                		if (!$resultat)
                		{
                	   		//Mauvais email ou mot de passe
                	   		header('Location: accueil.php?error=badIDPass');
                		}
                		else
                		{
                	    	session_start();
                	    	$_SESSION['id'] = $resultat['id'];
                
                	    	//Connexion réussie
                	    	header('Location: accueil.php?error=suceedCo');
                		}
                	}
                }
                
                
                

                Voila :)

                Pour la variable $_SESSION, j'avoue ne pas trop m'y connaître, j'ai essayé en l'initialisant à 1,... mais ca ne changeait rien :/ désolé je ne m'y connais pas en php, j'ai juste lu le cours du site :/

                Encore une fois, la connexion, déconnexion,... marche bien, c'est juste le changement de menu en fonction de l'état de la session (connecté ou inscrit et déconnecté) qui pose problème ;D

                S'il faut quelque chose d'autre, n'hésitez pas :D


                -
                Edité par djesty 23 janvier 2017 à 17:51:50

                • Partager sur Facebook
                • Partager sur Twitter
                  23 janvier 2017 à 17:52:59

                  Remplaces tes $_SESSION['connecte'] par $_SESSION['id'] (et supprimes l'instruction $_SESSION['connecte']; qui ne sert toujours à rien). Pas la peine d'avoir 50 variables de session : la simple présence/absence de $_SESSION['id'] que tu crées (contrairement à $_SESSION['connecte'] donc ça ne pouvait pas fonctionner) permet de savoir si on est connecté ou pas.

                  email like :email

                  Sans validation (et encore) le mec qui te met un % pour email t'active tout le monde ... Pourquoi LIKE au lieu d'un simple = ?

                  -
                  Edité par julp 23 janvier 2017 à 18:03:31

                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 janvier 2017 à 18:54:34

                    Donc je dois juste faire quelque chose comme ceci :

                    <?php 
                    session_start();
                    $_SESSION['id'];
                    ?>

                    et c'est suffisant? Désolé, je débute vraiment c'est encore assez compliqué pour moi même si ça doit être ridiculement simple pour vous :s

                    Et pour le like au lieu du =, je corrige ca tout de suite merci :D

                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 janvier 2017 à 19:37:24

                      Non, c'est sur if(!isset($_SESSION['connecte'])) qu'il fallait faire le remplacement. La ligne $_SESSION['id']; tu la vires, tout simplement : elle est inutile, l'instruction ne va rien faire à part te lever une notice pour les non connectés (bien que tu n'es pas censé les voir en production).

                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 janvier 2017 à 21:59:07

                        Salut.

                        Tu peux faire:

                        If (isset ($_SESSION ['ID']))

                        {

                             /// code pour les connectés

                        }

                        Else

                        {

                            /// code pour les non connectés

                        }

                        Et aussi pour info ca sert a rien de multiplier les balises <?php ... ?>

                        Des fois tu ferme une balise pour en ouvrir une tout de suite après.

                        Bon courage

                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 janvier 2017 à 14:23:02

                          Il me semblait bien que c'était inutile dans la session_start() :p

                          Je remplace ca direct merci :D

                          Le problème avec les balises <?php ...?> c'est qu'avec les <ul> si je ne ferme pas les balises avant et après, le code me met un warning et refuse d'ouvrir correctement la page... :/ 

                          EDIT : Merci! :D ca marche enfin! :D merci beaucoup pour votre aide :D

                          -
                          Edité par djesty 31 janvier 2017 à 16:33:42

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Gestiond'un session PHP

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown