Comment bien placer une session_destroy ou unset en PHP ?

Résolu/Fermé
fabi00 Messages postés 82 Date d'inscription vendredi 4 février 2022 Statut Membre Dernière intervention 18 mars 2022 - 9 févr. 2022 à 14:25
fabi00 Messages postés 82 Date d'inscription vendredi 4 février 2022 Statut Membre Dernière intervention 18 mars 2022 - 10 févr. 2022 à 13:05
Bonjour à tous ^^,

Je suis amené à créer un formulaire de devis, qui est plutôt fonctionnel pour le moment. Depuis hier je suis acharné sur une chose que je n'arrive pas à faire. Donc voilà le fonctionnement de mon formulaire, c'est un formulaire qui est uniquement sur une page "index .php". Lorsque j'appuie sur le "bouton" (le lien) -> Devis exprès, ça m'ouvre une fenêtre modale avec un formulaire. Si j'appuie sur le bouton "suivant", un autre formulaire s'ouvre et etc. etc.

mon formulaire mémorise à l'aide de sessions, les valeurs que l'utilisateur entre dans le but qu'il puisse revenir en arrière et en avant et de ne pas perdre ce qu'il a écrit.

Cependant, je souhaiterais que lorsque l'utilisateur coupe la page, ou qu'il appuie sur le lien qui permet de fermer la fenêtre modale, la session détruise toutes les données enregistrées.

Je sais que je peux utiliser "session_destroy" ou "session_unset", mais je ne sais pas ou le placer...

Comment pourrais-je m'y prendre ?

Je ne sais pas si c'est compréhensible ce que je dis, autrement n'hésitez pas à me demander plus de précisions.

Un grand merci d'avance.

Voici le code...

<?php
  //On démarre une nouvelle session
  session_start();
  
  //Formulaire 1
  //Si on appuie sur le bouton "suivant"
   if(isset($_POST['suivant'])){
    //On récupère les données dans $_POST

     $modele=$_POST['modele'];
     $taille=$_POST['taille'];
     $couleur=$_POST['couleur'];
     $quantite=$_POST['quantite'];
  
     //On définit des variables de session
     $_SESSION['modele'] = $modele;
     $_SESSION['taille'] = $taille;
     $_SESSION['couleur'] = $couleur;
     $_SESSION['quantite'] = $quantite;
     
    //Si on ne sélectionne pas une quantité
     if($quantite == false){
      $afficheErreur1 = "<h4>Veuillez ajouter une quantité</h4>";
     }
     else{
     // On va sur le formulaire 2
     header ('Location: #demo2');
     die();
     }
   }
   
   //Formulaire 2
   //Si on appuie sur le bouton "suivant"
      if(isset($_POST['suivant1'])){
       //On récupère les données dans $_POST
        $qualite=$_POST['qualite'];
        $zone=$_POST['zone'];
        $impression=$_POST['impression'];
        $fichier=$_POST['fichier'];
        
        // On va sur le formulaire 3
        header('Location: #demo3');
        
        //On définit des variables de session
        $_SESSION['qualite'] = $qualite;
        $_SESSION['zone'] = $zone;
        $_SESSION['impression'] = $impression;
        $_SESSION['fichier'] = $fichier;
      }
      
      //Si on appuie sur le bouton "Précèdent"
      if(isset($_POST['retour1'])){
       // On va sur la formulaire 1
       header('Location: #demo1');
       die();
      }
   
  //Formulaire 3 
  //Si on appuie sur le bouton "suivant"
  if(isset($_POST['suivant2'])){
   //On récupère les données dans $_POST
    $prenom=$_POST['prenom'];
    $nom=$_POST['nom'];
    $email=$_POST['email'];
    $telephone=$_POST['telephone'];
    $client=$_POST['client'];
    $precision=$_POST['precision'];
    
    $_SESSION['prenom'] = $prenom;
    $_SESSION['nom'] = $nom;
    $_SESSION['email'] = $email;
    $_SESSION['telephone'] = $telephone;
    $_SESSION['client'] = $client;
    $_SESSION['precison'] = $precision;
   
   if($prenom == false || $nom == false || $email == false || $telephone == false){
     $afficheErreur2 = "<h4>Veuillez compléter les champs obligatoires *</h4>";
    }
    
    else{
     header('Location: recupDataTest.php');
    }
  }
  //Si on appuie sur le bouton "Précèdent"
  if(isset($_POST['retour2'])){
   // On va sur la page "index.php"
   header('Location: #demo2');
   die();
  }
?>

<!DOCTYPE htlm>
<html lang="fr">
	<head>
		 <meta charset="utf-8"/>
		 <meta http-equiv="X_UA-Compatible" content="IE=edge">
		 <title>Formulaire de devis</title>
		 <style>
			   #quantite{
				width:3.5em;
			   }
			   
			   select option[value="bleu"]{
				background: blue;
			   }
			   select option[value="rouge"]{
				background: red;
			   }
			   select option[value="vert"]{
				background: green;
			   }
			   h4{
				color: red;
			   }
			   a {
				  text-decoration: none;
				  padding: 15px;
				  background-color: white;
				  border-radius: 5px;
				  text-transform: uppercase;
				  color: black;
				  border: solid black;
			   }
			   a:hover{
				background-color: black;
				color: white;
			   }
			   .modal1 {
				 visibility: hidden;
				 opacity: 0;
				 position: absolute;
				 top: 0; right: 0;
				 bottom: 0; left: 0;
				 display: flex;
				 align-items: center;
				 justify-content: center;
				 background: rgba(77, 77, 77, .7);
				 transition: all .4s;
			   }
			   .modal1:target {
				  visibility: visible;
				  opacity: 1;
				}
				.modal_content1 {
				  border-radius: 4px;
				  position: relative;
				  width: 500px;
				  max-width: 90%;
				  background: white;
				  padding: 1.5em 2em;
				}
				.modal_close1 {
				  position: absolute;
				  top: 10px;
				  right: 10px;
				  color: grey;
				  text-decoration: none;
				}
				.modal2 {
				 visibility: hidden;
				 opacity: 0;
				 position: absolute;
				 top: 0; right: 0;
				 bottom: 0; left: 0;
				 display: flex;
				 align-items: center;
				 justify-content: center;
				 background: rgba(77, 77, 77, .7);
				 transition: all .4s;
			   }
			   .modal2:target {
				  visibility: visible;
				  opacity: 1;
				}
				.modal_content2 {
				  border-radius: 4px;
				  position: relative;
				  width: 500px;
				  max-width: 90%;
				  background: white;
				  padding: 1.5em 2em;
				}
				.modal_close2 {
				  position: absolute;
				  top: 10px;
				  right: 10px;
				  color: grey;
				  text-decoration: none;
				}
				.modal3 {
				 visibility: hidden;
				 opacity: 0;
				 position: absolute;
				 top: 0; right: 0;
				 bottom: 0; left: 0;
				 display: flex;
				 align-items: center;
				 justify-content: center;
				 background: rgba(77, 77, 77, .7);
				 transition: all .4s;
			   }
			   .modal3:target {
				  visibility: visible;
				  opacity: 1;
				}
				.modal_content3 {
				  border-radius: 4px;
				  position: relative;
				  width: 500px;
				  max-width: 90%;
				  background: white;
				  padding: 1.5em 2em;
				}
				.modal_close3 {
				  position: absolute;
				  top: 10px;
				  right: 10px;
				  color: grey;
				  text-decoration: none;
				}
    
		</style>
	</head>
	<body>
		<a href="#demo1">Devis Express</a>
 
			<!--Formulaire 1 -->
		<div id="demo1" class="modal1">
			<div class="modal_content1">
			   <h1>Votre demande de devis</h1>
			   <p>Faite votre demande de devis en seulement quelques clics !</br></br></br></p>
			   <h2>Vos besoins (Total de 10 pièces minimum)</h2>
				<form action="" method="post">
				<p>
				 <?php
				  $modele = !empty($_SESSION['modele']) ? $_SESSION['modele']: NULL;
				 ?>
				 <label for="modele">Modèle</label>
				  <select name="modele" id="modele"/>
				   <option value="T-shirts" <?php echo $modele=="T-shirts" ? "selected='selected' " : "" ;?>>T-shirts</option>
				   <option value="Sweat-shirts" <?php echo $modele=="Sweat-shirts" ? "selected='selected' " : "" ;?>>Sweat-shirts</option>
				   <option value="Pulls" <?php echo $modele=="Pulls" ? "selected='selected' " : "" ;?>>Pulls</option>
				  </select>
				 
				 <label for="quantite">Quantité</label> 
				 <input type="number" name="quantite" id="quantite" min="10" value="<?php if (isset($_SESSION['quantite'])){echo $_SESSION['quantite'];} ?>"/>
				 <br></br> 
				</p>

				<p>
				 <?php
				  $taille = !empty($_SESSION['taille']) ? $_SESSION['taille']: NULL;
				 ?>
				 <label for="taille">Taille</label>
				  <select name="taille" id="taille"/>
				   <option value="XS" <?php echo $taille=="XS" ? "selected='selected' " : "" ;?>>XS</option>
				   <option value="S" <?php echo $taille=="S" ? "selected='selected' " : "" ;?>>S</option>
				   <option value="M" <?php echo $taille=="M" ? "selected='selected' " : "" ;?>>M</option>
				   <option value="L" <?php echo $taille=="L" ? "selected='selected' " : "" ;?>>L</option>
				   <option value="XL" <?php echo $taille=="XL" ? "selected='selected' " : "" ;?>>XL</option>
				  </select>
			   
				 <?php
				  $couleur = !empty($_SESSION['couleur']) ? $_SESSION['couleur']: NULL;
				 ?>
				 <label for="couleur">Couleur</label>
				  <select name="couleur" id="couleur">
				   <option value="bleu" <?php echo $couleur=="bleu" ? "selected='selected' " : "" ;?>>bleu</option>
				   <option value="rouge" <?php echo $couleur=="rouge" ? "selected='selected' " : "" ;?>>rouge</option>
				   <option value="vert" <?php echo $couleur=="vert" ? "selected='selected' " : "" ;?>>vert</option>
				  </select>
				</p>
				
				<p>
				 <input type="submit" name="suivant" value="Suivant"/> 
				</p>
				 <?php
				  //Si le formulaire n'est pas rempli, on affiche le message d'erreur
				   if (isset($afficheErreur1)){
					echo $afficheErreur1;
				  }
				 ?> 
			   </form>
				 <div class="fermer">
				 <a href="#" class="modal_close1">×</a>
     </div>
  </div>
 </div>
 
 <!--Formulaire 2 -->
 <div id="demo2" class="modal2">
  <div class="modal_content2">
   <h1>Votre demande de devis</h1>
   <p>Faite votre demande de devis en seulement quelques clics !</br></br></br></p>
   <h2>Infos supplémentaires pour impression</h2>
    <form action="" method="post">
     <p>
      <?php
       $qualite = !empty($_SESSION['qualite']) ? $_SESSION['qualite']: NULL;
      ?>
      <label for="qualite">Qualité</br></label>
      <select name="qualite" id="qualite">
       <option value="Promotionnel/1er prix" <?php echo $qualite=="Promotionnel/1er prix" ? "selected='selected' " : "" ;?>>Promotionnel/1er prix</option>
       <option value="Meilleur rapport qualité / prix" <?php echo $qualite=="Meilleur rapport qualité / prix" ? "selected='selected' " : "" ;?>>Meilleur rapport qualité / prix</option>
       <option value="Haut de gamme" <?php echo $qualite=="Haut de gamme" ? "selected='selected' " : "" ;?>>Haut de gamme</option>
      </select>
     </p>
  
     <p>
      <?php
       $zone = !empty($_SESSION['zone']) ? $_SESSION['zone']: NULL;
      ?>
      <label for="zone">Zone de personnalisation</br></label>
      <select name="zone" id="zone">
       <option value="Coeur" <?php echo $zone=="Coeur" ? "selected='selected' " : "" ;?>>Coeur</option>
       <option value="Dos" <?php echo $zone=="Dos" ? "selected='selected' " : "" ;?>>Dos</option>
       <option value="Manche" <?php echo $zone=="Manche" ? "selected='selected' " : "" ;?>>Manche</option>
      </select>
     </p>
  
     <p>
      <label for="impression">Technique d'impression</br></label>
      <?php
       $impression = !empty($_SESSION['impression']) ? $_SESSION['impression']: NULL;
      ?>
      <select name="impression" id="impression">
       <option value="DTG" <?php echo $impression=="DTG" ? "selected='selected' " : "" ;?>>DTG</option>
       <option value="Transfert quadri" <?php echo $impression=="Transfert quadri" ? "selected='selected' " : "" ;?>>Transfert quadri</option>
       <option value="Sérigraphie" <?php echo $impression=="Sérigraphie" ? "selected='selected' " : "" ;?>>Sérigraphie</option>
       <option value="Flex Flock" <?php echo $impression=="Flex Flock" ? "selected='selected' " : "" ;?>>Flex Flock</option>
       <option value="Broderie" <?php echo $impression=="Broderie" ? "selected='selected' " : "" ;?>>Broderie</option>
       <option value="Sublimation" <?php echo $impression=="Sublimation" ? "selected='selected' " : "" ;?>>Sublimation</option>
      </select>
     </p>
     
     <p>
      <label for="fichier">Importez vos fichiers ici</br></label>
      <input type="file" id="fichier" name="fichier" accept="image/png, image/jpeg, .ai,
      .eps, .pdf, .svg">
     </p>
  
     <p>
      <input type="submit" name="retour1" value="Précèdent"/>
      <input type="submit" name="suivant1" value="Suivant"/>
     </p>
    </form>
  <a href="#" class="modal_close2">×</a>
  </div>
 </div>

 <!--Formulaire 3 -->
 <div id="demo3" class="modal3">
  <div class="modal_content3">
   <h1>Votre demande de devis</h1>
   <p>Faite votre demande de devis en seulement quelques clics !</br></br></br></p>
   <h2>Informations et précisions</h2>
  <form action="" method="post">
   <p>
    <input type="text" name="prenom" id="prenom" placeholder="prénom*" value ="<?php if (isset($_SESSION['prenom'])){echo $_SESSION['prenom'];} ?>"/>
    <input type="text" name="nom" id="nom" placeholder="Nom*" value ="<?php if (isset($_SESSION['nom'])){echo $_SESSION['nom'];} ?>"/>
    <input type="email" name="email" id="email" size="30" placeholder="Adresse mail*" value ="<?php if (isset($_SESSION['email'])){echo $_SESSION['email'];} ?>"/>
   </p>
  
   <p>
    <input type="tel" id="telephone" name="telephone" placeholder="Téléphone*" value ="<?php if (isset($_SESSION['telephone'])){echo $_SESSION['telephone'];} ?>"/>
    <?php
     $client = !empty($_SESSION['client']) ? $_SESSION['client']: NULL;
    ?>
    <select name="client" id="client">
     <option value="Particulier"  <?php echo $client=="Particulier" ? "selected='selected' " : "" ;?>>Particulier</option>
     <option value="Entreprise" <?php echo $client=="Entreprise" ? "selected='selected' " : "" ;?>>Entreprise</option>
     <option value="Autre" <?php echo $client=="Autre" ? "selected='selected' " : "" ;?>>Autre</option>
    </select>

   </p>
  
   <p>
    <textarea id="precision" name="precision" rows="5" cols="40" 
    placeholder="Précision">
    <?php
     if (isset($_SESSION['precision'])){echo $_SESSION['precision'];}
    ?>
    </textarea>
   </p>
  
   <p>
    <input type="submit" name="retour2" value="Précèdent"/>
    <input type="submit" name="suivant2" value="Envoyer"/>
  </p>
  <?php
   //Si le formulaire n'est pas rempli, on affiche le message d'erreur
    if (isset($afficheErreur2)){
     echo $afficheErreur2;
   }
  ?> 
 </form>
  <a href="#" class="modal_close3">×</a>
  </div>
 </div>
</body>
</html>
A voir également:

2 réponses

yg_be Messages postés 22770 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 mai 2024 1 481
9 févr. 2022 à 14:53
bonjour,
comment l'utilisateur coupe-t-il la page?
sur quel lien appuie-t-il pour fermer la fenêtre modale?

Il est souvent préférable de "vider" la session quand l'utilisateur revient sur un site, pas quand il le quitte.
Comment pourrais-tu faire la différence entre un utilisateur qui revient et un qui continue?
Sur base du temps écoulé, ou bien parce que l'utilisateur fait appel à une page spécifique?
0
yg_be Messages postés 22770 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 mai 2024 1 481
9 févr. 2022 à 14:58
Tu pourrais peut-être vider la session quand l'utilisateur arrive sur le site en n'ayant cliqué aucun des boutons.
0
fabi00 Messages postés 82 Date d'inscription vendredi 4 février 2022 Statut Membre Dernière intervention 18 mars 2022
9 févr. 2022 à 15:05
En effet, je pense qu'il est difficile de faire comprendre comment l'utilisateur coupe la page.
Mais pour couper la fenêtre modale c'est ce qui est en ligne 285, 347 et 397 "<a href="#" class="modal_close1">×</a>".

Et comment "vider" la session quand l'utilisateur revient sur le site ?
0
fabi00 Messages postés 82 Date d'inscription vendredi 4 février 2022 Statut Membre Dernière intervention 18 mars 2022 > yg_be Messages postés 22770 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 mai 2024
9 févr. 2022 à 15:10
Et il faudrait le placer ou pour faire ça ?
0
yg_be Messages postés 22770 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 mai 2024 1 481 > fabi00 Messages postés 82 Date d'inscription vendredi 4 février 2022 Statut Membre Dernière intervention 18 mars 2022
9 févr. 2022 à 15:15
Tu pourrais peut-être faire
$_SESSION = array();

quand l'utilisateur arrive sur le site en n'ayant cliqué aucun des boutons, donc après la ligne 89.
0
yg_be Messages postés 22770 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 mai 2024 1 481 > fabi00 Messages postés 82 Date d'inscription vendredi 4 février 2022 Statut Membre Dernière intervention 18 mars 2022
9 févr. 2022 à 17:33
tu peux aussi ajouter des
echo()
pour comprendre ce qui se passe.
1
fabi00 Messages postés 82 Date d'inscription vendredi 4 février 2022 Statut Membre Dernière intervention 18 mars 2022
Modifié le 10 févr. 2022 à 13:05
J'AI TROUVE LA SOLUTION !

Bon j'ai dû changer quelque petites choses, mais ça fonctionne maintenant ^^.
Voilà ce que j'ai fait, j'ai changé le lien pour fermer le formulaire, en input submit. Donc j'ai fait...
if(isset($_POST['fermer1'])){
    header('Location: #');
    $_SESSION = array();
    
   }


"fermer1" qui est le nom du premier submit pour fermer la page.

Merci tout de même, pour l'aide apporté.
0