Nairol Posté 14 Juillet 2007 Posté 14 Juillet 2007 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
Licorne Posté 14 Juillet 2007 Posté 14 Juillet 2007 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 !
binarygirl Posté 14 Juillet 2007 Posté 14 Juillet 2007 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.
Nairol Posté 15 Juillet 2007 Auteur Posté 15 Juillet 2007 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
Findel Posté 16 Juillet 2007 Posté 16 Juillet 2007 (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é 16 Juillet 2007 par Findel
TheRec Posté 16 Juillet 2007 Posté 16 Juillet 2007 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.
Nairol Posté 19 Juillet 2007 Auteur Posté 19 Juillet 2007 (modifié) Bonjour a tous, Je vais retenir cette solution header("Cache-control: private"); Merci pour votre aide. Nairol Modifié 19 Juillet 2007 par Nairol
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant