Aller au contenu

Les sessions en php


Sujets conseillés

Posté

Bonjour,

J'utilise session_start(); en entête de toutes mes pages ph.

J'ai un problème pour les formulaires, lorsque la personne valide le formulaire et qu'il y a une erreur il y a retour à la page du formulaire pour corriger.

Mais au retour le formulaire et vide il faut tout recommencer.

Et sans session_start() il n'y a plus ce problème.

Je voudrais savoir s'il y a une astuce pour contourner le problème tout en gardant session_start ()en début de page :?:

Merci pour votre aide

Nairol

Posté

Bonjour,

Je ne sais pas comment effectivenemt ton code est fait mais si ton formulaire autorise une ouverture de session lorsque les champs de saisies sont justes, c'est logique qu'en revenant sur le formulaire, il n'y a plus rien puique la session est ouverte!

Maintenant que tu te sois trompé dans l'algorithme de tes controles et validations.. c'est autre chose!

Cela expliquerai peut-être qu'avec session_start() ne donne pas le même résultat sur le retour !

Posté

Faites-vous une redirection à un moment donné ? Cela implique un header HTTP (Location: http://....)

Un appel à session_start() va aussi ajouter des headers HTTP.

La fonction session_start() devrait alors être invoquée avant la redirection. Si vous postez le code on peut sans doute être plus précis ;-)

**EDIT Administrateur (TheRec)** Inutile de citer le message précédent en entier lorsqu'il figure juste au-dessus. J'ai édité votre message dans ce sens. Merci de votre compréhension.

Posté

Merci pour vos réponses

Voici un exemple:

un formulaire tout simple

<?
session_start();
?>
<form action="fichier1.php" method="post">

<table width="70%" border="1">
<tr>
<td >Nom</td>
<td><input type="text" name="champ1" id="textfield"></td>
</tr>
<tr>
<td>Prénom</td>
<td><input name="champ3" type="text"></td>
</tr>
<tr>
<td>email</td>
<td><label>
<input type="text" name="champ4" id="textfield2">
</label></td>
</tr>
<tr>
<td> </td>
<td><label>
<input type="submit" name="button" id="button" value="Envoyer">
</label></td>
</tr>
</table>
</form>

Une fois le formulaire validé, s'il y a erreur le script renvoie à la page formulaire, avec window.history.Back ()

Et là le formulaire est vide, donc obligé de tout retaper. Par contre si je supprime session_start ()en entête du formulaire, Il n'y a pas de problème les champs sont toujours remplies.

Le resultat du formulaire:

<?
session_start();
$champ1=$_POST['champ1'];
$champ2=$_POST['champ2'];
$champ3=$_POST['champ3'];

if (empty($champ1) or empty($champ2) or empty($champ3) )
{
?>
<script type="text/javascript" language="javascript">
alert('Tous les champs sont obligatoires !');
window.history.back();
</script>
<?
exit;
}


?>
si tout est bon suite du code...

Merci pour votre aide.

Nairol

Posté (modifié)

En fait, c'est pas exactement ça.

Quand tu met le session_start() au début de ton fichier, tu le rend différent à chaque visite. Quand tu ne le met pas, ta page peut être mise en cache (et pré-remplie par le navigateur avec le history.back)

Donc, c'est au navigateur que tu dois le pré-remplissage, mais il ne faut pas y compter dessus, tout d'abord tu as vu pourquoi, et ensuite car tous les navigateurs ne s'amusent pas à re-remplir un formulaire quand on revient dessus.

Un conseil : Enregistre les variables saisies dans ta session puisque tu en as une, et lorsque tu affiche ton formulaire, met ces valeurs dans les value des champs

Modifié par Findel
Posté

Bonjour,

Essaie de placer cette ligne :

header("Cache-control: private");

Juste après ton session_start();, cela permet d'instaurer un cache "privé" par rapport à la session, et les données des formulaires seront gardées en cache également, pour peu que le navigateur propose cette fonctionnalité évidemment.

Bonne continuation.

Posté (modifié)

Bonjour a tous,

Je vais retenir cette solution

header("Cache-control: private");

Merci pour votre aide.

Nairol

Modifié par Nairol

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...