Partage
  • Partager sur Facebook
  • Partager sur Twitter

Bouton de déconnexion PHP

Sujet résolu
    17 juin 2020 à 14:06:20

    Bonjour,

    Je suis débutant en PHP et je fais une page de connexion/inscription toute simple. Voilà le code :

    <?php session_start(); // Démarre la session
    
    	setcookie('pseudo', 'Kolerik', time() + (30 * 24 * 3600));
    	setcookie('id', 18, time() + (30*24*3600));
    
    	echo 'id : ' . $_COOKIE['id']; // Affiche les cookies
    
    ?>
    
    
    
    <!DOCTYPE html>
    <html>
    <head>
    	<title>Titre</title>
    </head>
    <body>
    
    
    	<h1>Bonjour, bienvenue sur votre profil !</h1>
    
    	<?php
    
    		if(isset($_SESSION['email']) && (isset($_SESSION['date'])))
    		{
    		?>
    		<p>Votre email est  <?php echo $_SESSION['email']; ?> </p>
    		<p>Votre compte a été créé le  <?php echo $_SESSION['date']; ?> !</p> <!-- Affiche l'email de l'utilisateur ainsi que la date de création de son compte si l'utilisateur s'est connecté -->
    
    		<?php
    		} else {
    			echo 'Veuillez vous connecter à votre compte :';
    		}
    
    	?>
    
    	<?php
    
    		include 'cours_graven/includes/database.php'; // Connexion à la database 
    		global $db;
    
    	?>
    
    	<h1>Login</h1>
    	<form method="post">
    		<input type="email" name="lemail" id="lemail" placeholder="Votre email" required> <br><br>
    		<input type="password" name="lpassword" id="lpassword" placeholder="Votre mot de passe" required><br> <br>
    		<input type="submit" name="formlogin" id="formlogin" value="Login"> <!-- Formulaire de connexion -->
    
    		</form>
    
    
    <?php
    
    include 'cours_graven/includes/login.php'; // Récupère les informations envoyées sur le formulaire de connexion 
    
    ?>
    
    	
    	<h1>Sign in</h1>
    	<form method="post">
    		<input type="email" name="semail" id="semail" placeholder="Votre email" required> <br><br>
    		<input type="password" name="password" id="password" placeholder="Votre mot de passe" required><br> <br>
    		<input type="password" name="cpassword" id="cpassword" placeholder="Veuillez confirmer votre MDP" required>
    		<input type="submit" name="send" id="send" value="Sign in"> <!-- Formulaire d'inscription -->
    
    	</form>
    
    <?php
    
    include 'cours_graven/includes/signin.php'; // Récupère les informations envoyées sur le formulaire d'inscription
    
    ?>
    
    <form method="post">
    <input type="submit" name="deco" value="Deconnexion" id="deco"> <!-- Bouton de déconnexion -->
    </form>
    <?php 
    
    if (isset($_POST['deco'])) {
    	session_destroy();
    }
    
    ?>
    
    </body>
    </html>

    Le login.php :

    <?php
    
    	if(isset($_POST['formlogin'])) 
    
    	{
    		extract($_POST);
    
    			if(!empty($lemail) && !empty($lpassword)) 
    			{
    
    				$q = $db->prepare('SELECT * FROM users WHERE email = :email');
    				$q->execute(['email' => $lemail]);
    				$result = $q->fetch();
    
    				if($result == true)
    
    				{
    
    					// Le compte existe bien
    					$hashpassword = $result['password'];
    					if(password_verify($lpassword, $hashpassword))
    
    					{
    						echo 'Le mot de passe est bon, connexion. ';
    						$_SESSION['email'] = $result['email'];
    						$_SESSION['date'] = $result['date'];
    
    
    					} else {
    						echo 'Le mot de passe n\'est pas correct !';
    					}
    				}
    
    
    				else 
    
    				{
    					echo 'Le compte portant l\'email ' . $lemail .  ' n\'existe pas !';
    				}
    
    
    
    			}
    
    	} else {
    		echo 'Veuillez compléter tous les champs !';
    	}
    
    ?>

    Le signin.php :

    <?php
    
    
    	if(isset($_POST['send'])) {
    
    		extract($_POST);
    
    
    		if(!empty($password) && !empty($cpassword) && !empty($semail)) {
    
    			if($password == $cpassword) {
    
    				$options = [
    				'cost'=>12,
    				];
    
    				$hashpass = password_hash($password, PASSWORD_BCRYPT, $options);
    
    				
    
    				$q = $db->prepare('INSERT INTO users(email,password) VALUES(:email,:password)');
    				$q->execute([
    					'email' => $semail,
    					'password' => $hashpass
    				]);
    
    
    			} else {
    				echo 'Les mots de passe ne sont pas les mêmes ! ';
    			}
    
    		}
    	}
    
    
    
    ?>

    Je vous expose mon problème :

    Le code marche bien, l'inscription dans la bse de données, la connexion etc fonctionnent, mais seul problème, quand il faut s'inscrire/se connecter/se déconnecter, il faut rafraichir la page pour que l'on soit connecté. Quelqu'un aurait-il une solution pour que ça affiche directement les identifiants etc ?

    Si besoin de précisions, demandez moi !



    • Partager sur Facebook
    • Partager sur Twitter
      17 juin 2020 à 17:36:05

      Hello, 

      Bah suffit de faire les redirections 

      En dessous de 

                              echo 'Le mot de passe est bon, connexion. ';
                              $_SESSION['email'] = $result['email'];
                              $_SESSION['date'] = $result['date'];

      Suffit de mettre 

      header('Location /tapage.php');
      exit();



      • Partager sur Facebook
      • Partager sur Twitter
        17 juin 2020 à 22:29:39

        Kévin Brissez a écrit:

        Hello, 

        Bah suffit de faire les redirections 

        En dessous de 

                                echo 'Le mot de passe est bon, connexion. ';
                                $_SESSION['email'] = $result['email'];
                                $_SESSION['date'] = $result['date'];

        Suffit de mettre 

        header('Location /tapage.php');
        exit();



        Salut,

        Tout d'abord merci pour ta réponse. Mais j'ai essayé, ça enlève le formulaire d'inscription (ce qui est bien !), mais ça ne refresh pas la page automatiquement :/

        Une idée ? :)

        -
        Edité par Kolerik 17 juin 2020 à 22:30:15

        • Partager sur Facebook
        • Partager sur Twitter
          17 juin 2020 à 22:31:20

          Salut, t'as mis quoi à la place de "/tapage.php" ? Car justement, le but de header() et de rediriger :euh:
          • Partager sur Facebook
          • Partager sur Twitter
            18 juin 2020 à 7:44:31

            Koyuki Tanaka a écrit:

            Salut, t'as mis quoi à la place de "/tapage.php" ? Car justement, le but de header() et de rediriger :euh:


            Bonne question... ça se trouve ma faute est là-dedans lol

            J'ai mis "index.php"

            • Partager sur Facebook
            • Partager sur Twitter
              18 juin 2020 à 11:21:47

              On peut voir le code complet ?
              • Partager sur Facebook
              • Partager sur Twitter
                18 juin 2020 à 11:34:02

                Koyuki Tanaka a écrit:

                On peut voir le code complet ?


                Yes :

                index.php :

                <?php session_start(); // Démarre la session
                 
                    setcookie('pseudo', 'Kolerik', time() + (30 * 24 * 3600));
                    setcookie('id', 18, time() + (30*24*3600));
                 
                    echo 'id : ' . $_COOKIE['id']; // Affiche les cookies
                 
                ?>
                 
                 
                 
                <!DOCTYPE html>
                <html>
                <head>
                    <title>Titre</title>
                </head>
                <body>
                 
                 
                    <h1>Bonjour, bienvenue sur votre profil !</h1>
                 
                    <?php
                 
                        if(isset($_SESSION['email']) && (isset($_SESSION['date'])))
                        {
                        ?>
                        <p>Votre email est  <?php echo $_SESSION['email']; ?> </p>
                        <p>Votre compte a été créé le  <?php echo $_SESSION['date']; ?> !</p> <!-- Affiche l'email de l'utilisateur ainsi que la date de création de son compte si l'utilisateur s'est connecté -->
                 
                        <?php
                        } else {
                            echo 'Veuillez vous connecter à votre compte :';
                        }
                 
                    ?>
                 
                    <?php
                 
                        include 'cours_graven/includes/database.php'; // Connexion à la database
                        global $db;
                 
                    ?>
                 
                    <h1>Login</h1>
                    <form method="post">
                        <input type="email" name="lemail" id="lemail" placeholder="Votre email" required> <br><br>
                        <input type="password" name="lpassword" id="lpassword" placeholder="Votre mot de passe" required><br> <br>
                        <input type="submit" name="formlogin" id="formlogin" value="Login"> <!-- Formulaire de connexion -->
                 
                        </form>
                 
                 
                <?php
                 
                include 'cours_graven/includes/login.php'; // Récupère les informations envoyées sur le formulaire de connexion
                 
                ?>
                 
                     
                    <h1>Sign in</h1>
                    <form method="post">
                        <input type="email" name="semail" id="semail" placeholder="Votre email" required> <br><br>
                        <input type="password" name="password" id="password" placeholder="Votre mot de passe" required><br> <br>
                        <input type="password" name="cpassword" id="cpassword" placeholder="Veuillez confirmer votre MDP" required>
                        <input type="submit" name="send" id="send" value="Sign in"> <!-- Formulaire d'inscription -->
                 
                    </form>
                 
                <?php
                 
                include 'cours_graven/includes/signin.php'; // Récupère les informations envoyées sur le formulaire d'inscription
                 
                ?>
                 
                <form method="post">
                <input type="submit" name="deco" value="Deconnexion" id="deco"> <!-- Bouton de déconnexion -->
                </form>
                <?php
                 
                if (isset($_POST['deco'])) {
                    session_destroy();
                    
                }
                 
                ?>
                 
                </body>
                </html>

                Le login.php :

                <?php
                
                	if(isset($_POST['formlogin'])) 
                
                	{
                		extract($_POST);
                
                			if(!empty($lemail) && !empty($lpassword)) 
                			{
                
                				$q = $db->prepare('SELECT * FROM users WHERE email = :email');
                				$q->execute(['email' => $lemail]);
                				$result = $q->fetch();
                
                				if($result == true)
                
                				{
                
                					// Le compte existe bien
                					$hashpassword = $result['password'];
                					if(password_verify($lpassword, $hashpassword))
                
                					{
                						echo 'Le mot de passe est bon, connexion. ';
                						$_SESSION['email'] = $result['email'];
                						$_SESSION['date'] = $result['date'];
                						header('Location /index.php');
                						exit();
                
                
                					} else {
                						echo 'Le mot de passe n\'est pas correct !';
                					}
                				}
                
                
                				else 
                
                				{
                					echo 'Le compte portant l\'email ' . $lemail .  ' n\'existe pas !';
                				}
                
                
                
                			}
                
                	} else {
                		echo 'Veuillez compléter tous les champs !';
                	}
                
                ?>

                Le signin.php :

                <?php
                
                
                	if(isset($_POST['send'])) {
                
                		extract($_POST);
                
                
                		if(!empty($password) && !empty($cpassword) && !empty($semail)) {
                
                			if($password == $cpassword) {
                
                				$options = [
                				'cost'=>12,
                				];
                
                				$hashpass = password_hash($password, PASSWORD_BCRYPT, $options);
                
                				
                
                				$q = $db->prepare('INSERT INTO users(email,password) VALUES(:email,:password)');
                				$q->execute([
                					'email' => $semail,
                					'password' => $hashpass
                				]);
                
                
                			} else {
                				echo 'Les mots de passe ne sont pas les mêmes ! ';
                			}
                
                		}
                	}
                
                
                
                ?>

                Voilà.

                D'ailleurs si vous voyez des risques d'injection, dites moi où je peux placer les htmlspecialchars 😊

                Bonne journée !



                • Partager sur Facebook
                • Partager sur Twitter
                  18 juin 2020 à 12:28:55

                  Bonjour.
                  Il manque un : juste après Location
                  Pour les htmlspecialchar c'est a l'affichage donc avec les écho
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 juin 2020 à 13:10:25

                    Aurélien.C a écrit:

                    Bonjour.
                    Il manque un : juste après Location
                    Pour les htmlspecialchar c'est a l'affichage donc avec les écho


                    Merci, mais quand je mets le : ça m'affiche cette erreur :/

                    Internal Server Error

                    The server encountered an internal error or misconfiguration and was unable to complete your request.

                    Please contact the server administrator at wampserver@wampserver.invalid to inform them of the time this error occurred, and the actions you performed just before this error.

                    More information about this error may be available in the server error log.


                    <address>Apache/2.4.41 (Win64) PHP/7.3.12 Server at localhost Port 80</address>

                    -
                    Edité par Kolerik 18 juin 2020 à 13:11:20

                    • Partager sur Facebook
                    • Partager sur Twitter
                      18 juin 2020 à 18:55:11

                      Active l'affichage des erreurs PHP (cf signature - FAQ PHP)

                      Je rappel qu'il ne faut pas de html avant de faire un header

                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 juin 2020 à 19:37:30

                        Aurélien.C a écrit:

                        Active l'affichage des erreurs PHP (cf signature - FAQ PHP)

                        Je rappel qu'il ne faut pas de html avant de faire un header


                        Merci à tous pour votre aide ! J'ai trouvé sur un autre forum la solution, il fallait que je fasse une page deco.php qui contient cela :

                        <?php
                        session_start();
                        $_SESSION = array();
                        session_destroy();
                        header("Location: index.php");
                        ?>

                        Et ensuite l'include dans le bouton de déconnexion sur le index.php.

                        Merci :D !

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Bouton de déconnexion 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