Histoire de SESSION et POST

Bonjour,

Étant novice en sessions, je souhaite savoir à quel moment après l'envoie d'un formulaire il faut faire
 $_SESSION['abc'] = $_POST['abc']
.

Car je dois toujours envoyer 2 fois mon formulaire pour que $_SESSION=$_POST

C'est à dire qu'à chaque fois ma $_SESSION contient la valeur précédente...

Pénible. Si quelqu'un peu m'aider...

Merci d'avance

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,

    Normalement, tu met $_SESSION['abc'] = $_POST['abc'] dans ta page de traitement de ton form et cela doit fonctionner.
    1. Oui c'est ce que je fais mais ma variable de session ne se met à la valeur du post qu'après rafraichissement ou relance(ce qui est pareil en fait).
      1. Ah ok , peut être qu'avec le code je pourrai t'aider ! ;)
    2. MA LISTE DÉROULANTE :

      <?php
      		
      	//gestion des types de logiciels via un menu déroulant
      
      	$queryTypeLogiciel = "SELECT * FROM typelogiciel ORDER BY TypeLogiciel";
      	$resTypeLogiciel = mysql_query($queryTypeLogiciel);
      
      	echo "<form method='POST' action='index.php?action=GestionLicences' name='menuDeroul'>
      	Selectionnez le type de logiciel : 
      	<select name='typeLogiciel' onchange='document.menuDeroul.submit();'>";
      
      	if($_SESSION['typeLogiciel'] != 'Autre' && $_POST['typeLogiciel'] != 'Autre')
      	{
      		
      	
      		while($dataTypeLogiciel = mysql_fetch_assoc($resTypeLogiciel))
      		{
      			if($dataTypeLogiciel['TypeLogiciel'] == $_POST['typeLogiciel'] && $dataTypeLogiciel['TypeLogiciel'] == $_SESSION['typeLogiciel'])//menu déroulant en adéquation avec la sélection faite
      			{
      				echo " <option value=\"".$dataTypeLogiciel['TypeLogiciel']."\" selected=selected>".$dataTypeLogiciel['TypeLogiciel']."</option>";
      			}
      			else
      			{
      				echo " <option value=\"".$dataTypeLogiciel['TypeLogiciel']."\">".$dataTypeLogiciel['TypeLogiciel']."</option>";
      			}
      		}	
      
      		echo " <option value='Autre'>Autre</option>";
      	}
      	else // Si on a choisi "Autre" dans la liste déroulante
      	{
      		while($dataTypeLogiciel = mysql_fetch_assoc($resTypeLogiciel))
      		{
      			if($dataTypeLogiciel['TypeLogiciel'] == $_SESSION['typeLogiciel'] && $dataTypeLogiciel['TypeLogiciel'] == $_POST['typeLogiciel'])//menu déroulant en adéquation avec la sélection faite
      			{
      				echo " <option value=\"".$dataTypeLogiciel['TypeLogiciel']."\" selected=selected>".$dataTypeLogiciel['TypeLogiciel']."</option>";
      			}
      			else
      			{
      				echo " <option value=\"".$dataTypeLogiciel['TypeLogiciel']."\">".$dataTypeLogiciel['TypeLogiciel']."</option>";
      			}
      		}	
      
      		echo " <option value='Autre' selected='selected'>Autre</option>";
      	}
      	
      	echo "</select>
      	<input type=submit value='OK' />
      	</form>";
      
      	echo stripslashes($_POST['typeLogiciel'])." ".stripslashes($_SESSION['typeLogiciel'])." ".$dataTypeLogiciel['TypeLogiciel'];
      		
      ?>
      
      


      MON TRAITEMENT :

      <?php
      
      
      	$_SESSION['typeLogiciel'] = $_POST['typeLogiciel'];
      	
      	if(isset($_SESSION['typeLogiciel']) || isset($_POST['typeLogiciel'])) //Si le type de logiciel a été choisi dans la liste déroulante on affiche les logiciels correspondants
      	{
      	
      		
      		if(mysql_real_escape_string($_SESSION['typeLogiciel']) == 'Autre') // Si on a choisi Autre
      		{
      			include('AjoutTypeLogiciel.inc.php');
      		}
      		else //selon le type choisi on affiche la liste des logiciels correspondants
      		{
      			$typeLogiciel = $_SESSION['typeLogiciel'];
      			
      			$queryListeLogiciel = "SELECT * FROM logiciel, typelogiciel
      									WHERE logiciel.NumTypeLogiciel = typelogiciel.CodeTypeLogiciel 
      									AND logiciel.NumTypeLogiciel = (SELECT CodeTypeLogiciel FROM typelogiciel
      																		WHERE TypeLogiciel = '".$typeLogiciel."')";
      			$resListeLogiciel = mysql_query($queryListeLogiciel);
      			
      			echo "<table border=1 width=100%><tr>
      			<td><strong>Type de logiciel</strong></td>
      			<td><strong>Nom du logiciel</strong></td>
      			<td><strong>Nombre de licences achetées</strong></td>
      			<td><strong>Nombre de licences installées</strong></td>
      			<td><strong>Action</strong></td></tr>";
      			
      			while($dataListeLogiciel = mysql_fetch_assoc($resListeLogiciel))
      			{
      				echo "<tr><td>".$dataListeLogiciel['TypeLogiciel']."</td>
      				<td><a href='index.php?action=ConsultLogiciel&NumLogiciel=".$dataListeLogiciel['NumLogiciel']."' title='Consultation des caractéristiques du logiciel'>".$dataListeLogiciel['NomLogiciel']."</a></td>
      				<td>".$dataListeLogiciel['NbLicencesAchetees']."</td>
      				<td>".$dataListeLogiciel['NbLicencesInstallees']."</td>
      				<td><a href='index.php?action=ModifierLogiciel&NumLogiciel=".$dataListeLogiciel['NumLogiciel']."' title='Permet de modifier un logiciel'>Modifier</a>
      				&nbsp;/&nbsp;<a href='index.php?action=InstallerLogiciel&NumLogiciel=".$dataListeLogiciel['NumLogiciel']."' title='Permet de signaler sur quelles machines le logiciel est installé'>Installer logiciel</a></td></tr>";		
      			}
      			
      			echo "</table>";
      			
      			
      			echo "<table width=100%><tr>";
      				echo "<td align=left><a href=\"index.php?typeLogiciel=".$typeLogiciel."&action=NouveauLogiciel\" title='Ajoute un nouveau logiciel '>Ajouter nouveau : ".stripslashes($typeLogiciel)."</a></td>"; 
      			echo "</tr></table>";
      			
      		}	
      	}
      	
      ?>
      
      1. Bah tu as oublié de démarrer la session : session_start(); à chaque fois que tu veux utiliser des sessions dans un scipt.

        Exemple:

        <?php
        session_start();

        $_SESSION['abc'] = $_POST['abc']

        .
        .
        .
        ?>
        1. Non en fait je gère toute mon appli via un index.php qui appelle mes diverses pages selon les cas.

          Donc mon session_start(); se trouve en haut de mon index qui est appelé à chaque action du client...
          1. Bah normalement le session_start() se met sur chaque fichier php qui utilise des sessions. Si ce la créé une erreur "session already started" il suffit de l'ignorer avec @session_start();
          2. J'ai jamais eu ce type d'erreur par contre mon post n'est pris en compte qu'après coup...
          3. Arf la je vois pas . Et si tu mettais une variable temporaire ?

            $temp=$_POST['abc'] ;
            $_SESSION['abc'] = $temp;
          4. Non toujours pas. Merci en tout cas pour ton aide.