eviter effacement formulaire en page precedente

eviter effacement formulaire en page precedente - PHP - Programmation

Marsh Posté le 04-11-2006 à 18:15:50    

Bonjour,
je cherche a eviter que tout mon formulaire s'efface apres qu'il soit envoyé, puis que l'utilisateur ai appuyé sur le bouton Page Precedente
 
Je pense pouvoir le faire par l'utilisation du php mais en compliquant pas mal le code, y a t-il une solution "propre" ?

Reply

Marsh Posté le 04-11-2006 à 18:15:50   

Reply

Marsh Posté le 05-11-2006 à 04:18:11    

Comme tu dis, php si la page est regénérée, sinon utiliser le cache du navigateur (je vois ça par exemple ici ;) )
 
Solution 1: tu sauvegardes en session les valeurs envoyées et suffit de les ressortir en valeur par défaut en testant si valeur il y a à disposition :)
 
Solution 2: mettre simplement  

Code :
  1. header('Cache-control: private, must-revalidate');


et serrer les fesses pour que tous les caches l'interprêtent comme tu veux :d

Reply

Marsh Posté le 05-11-2006 à 10:08:49    

ok mais je la met a quel endroit cette ligne ? parce que si je la met ds la balise <HEAD> ça ne marche pas


Message édité par Fazer916 le 05-11-2006 à 10:12:19
Reply

Marsh Posté le 05-11-2006 à 10:15:12    

Ah , parceque ça te semble une ligne de xHTML ? [:pingouino]
Étant donné qu'en plus tu as posté dans la cat "php", ca te semblerais logique que ce soit une commande PHP ? [:dawa]


Message édité par esox_ch le 05-11-2006 à 10:15:22

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-11-2006 à 10:17:45    

ah ok lol !
merci
non j'ai pris ça pour du javascript en fait  :whistle:


Message édité par Fazer916 le 05-11-2006 à 10:18:03
Reply

Marsh Posté le 05-11-2006 à 10:25:40    

mais j'ai des petits problemes
quand j'inclus ce header dans la page de mon formulaire, j'obtiens une erreur du type "Warning: Cannot modify header information - headers already sent by (output started at c:\....php:4) in c:\....php on line 27"
 
quand je mets le header dans la page qui provoque l'action page precedente il ne se passe rien
 
NB. (output started at c:\....php:4) -> a cette ligne j'inclus mon fichier javascript de control des formulaires

Code :
  1. <script type="text/javascript" src="fonction_java.js"></script>


 
NB2. "c:\....php on line 27"-> c'est a cette ligne que je fais mon header


Message édité par Fazer916 le 05-11-2006 à 10:26:43
Reply

Marsh Posté le 05-11-2006 à 11:02:50    

en fait ou que je le mette, j'ai une erreur "headers already sent "

Reply

Marsh Posté le 05-11-2006 à 11:16:57    

désolé pour ce que je vais dire, mais y'en a marre de toujours voir des gens qui viennent avec cette erreur de headers :( Y'a 1 000 000 000 000 000 000 de sites qui en parlent, s'agirait d'essayer d'apprendre la base avant de commencer :(

Reply

Marsh Posté le 05-11-2006 à 11:58:44    

la base je l'apprend au fur et a mesure de mon avancée :o
 
j'ai trouvé ça pour les pb de header
http://www.vulgarisation-informati [...] nt-php.php
 
mais ça marche pas...
 
soit j'ai le pb du header si je n'inclus pas la ligne dans le fichier superieur, soit le contenu n'est pas regeneré


Message édité par Fazer916 le 05-11-2006 à 12:08:41
Reply

Marsh Posté le 05-11-2006 à 12:05:44    

Le header se met avant toute chose, avant n'importe quel output vers le browser... Pas compliqué :( Et parfaitement logique si tu sais comment fonctionne le protocole HTTP...

Reply

Marsh Posté le 05-11-2006 à 12:05:44   

Reply

Marsh Posté le 05-11-2006 à 12:09:56    

j'ai un fichier en include qui me fixe la partie superieure pour toutes les pages
et un include pour le contenu
 
si je met le header dans la partie superieure, pas d'erreur, mais formulaire non regeneré
si je met le header dans le fichier du contenu, erreur
 

Reply

Marsh Posté le 05-11-2006 à 12:13:17    

Ben ouais c'est normal, vu que la partie supérieure a été envoyé au navigateur, il n'est évidemment plus possible de changer les headers HTTP...

Reply

Marsh Posté le 05-11-2006 à 12:13:32    

leflos5 a écrit :


Solution 1: tu sauvegardes en session les valeurs envoyées et suffit de les ressortir en valeur par défaut en testant si valeur il y a à disposition :)


 
obligé de passer par les sessions pour recuperer les valeurs ?
je pensais ds la page du formulaire recuperer les valeurs en $_POST si elles existent, sinon valeur nulle
probleme de securité ?

Reply

Marsh Posté le 05-11-2006 à 14:36:03    

bon apparemment obligé de passer par les sessions, en retour de page je n'arrive a rien recuperer dans $_POST


Message édité par Fazer916 le 05-11-2006 à 14:36:29
Reply

Marsh Posté le 05-11-2006 à 15:48:48    

Tu veux pas donner ton code, juste la base parce que là moi jecomprends pas ton problème [:petrus75]

Reply

Marsh Posté le 05-11-2006 à 16:10:46    

ok lol
 

Code :
  1. $nom = ( isset($_POST["nom"]) )? $_POST["nom"] : "";
  2. <FORM method='post' action="enregistrement.php">
  3. Nom : <INPUT type="text" name="nom" value="<? echo $nom; ?>" size=50>
  4. <INPUT type="submit" name="valider" value="Envoyer">
  5. </FORM>


En gros, 1ere ouverture du formulaire, $_POST["nom"] est inconnu, ça provoque un champ vide, on remplis le formulaire, on envoi en submit
Une fois cliqué sur envoyer, ça ouvre le fichier enregistrement.php, de celui-ci je fais un page precedente automatique en cas d'erreur, pour me retrouver a nouveau sur le formulaire a modifier.
Et la je demande la recupération de la valeur depuis le $_POST afin d'eviter de devoir reecrire
 
mais ça ne fonctionne pas :(

Reply

Marsh Posté le 06-11-2006 à 02:23:44    

[:petrus75]
Ah oui là c'est normal :d
 
Avec le header qui active le cache ça doit marcher normalement. Sinon c'est à toi de gérer le truc, évites les vilains js pour renvoyer sur la page d'avant [:itm] Suffit de rediriger proprement avec un header() et récupérer les $_POST :)
 
Cela dit si tu utilisais une organisation plus propre t'aurais pas besoin de rediriger quoi que ce soit [:itm]

Reply

Marsh Posté le 06-11-2006 à 17:22:11    

comment ça ?
en quoi c'est pas propre ?
je debute un peu voyez vous
 
mais j'ai un code qui est complexe, il y a du js qui analyse le formulaire, puis apres envoi il y a verif ds la bdd pour eviter des doublons, en cas de doublon je demande le retour en arriere
y a d'autre solution ?

Reply

Marsh Posté le 06-11-2006 à 20:26:04    

et justement le header permet de rediriger si tout va bien, moi je redirige en page precedente en cas de probleme, du genre le mec s'enregistre 2 fois avec le même nom, dans ce cas je suis obligé d'envoyer le formulaire, d'interroger la base de donnee, et en cas d'erreur je demande le retour
je ne peux pas demander le retour en cas d'erreur, puisque le header est censé etre en 1ere ligne du code
 
si tu as des exemples sous la mains ou des explications pour montrer que je m'y prend mal, je suis tout ouïe ;)
 
(qu'est ce que tu ferais a ma place comme redirection pour inviter l'utilisateur a corriger son formulaire ? (mis a part le js mais qui ne peut se permettre de verifier la bdd))


Message édité par Fazer916 le 06-11-2006 à 20:37:14
Reply

Marsh Posté le 07-11-2006 à 02:45:22    

Si c'est pour ça, oublie le retour crado, tu enregistres et tu resserts :spamafote:
 
Et pour faire plus propre de façon générale, faut pas penser en procédural (je fais ça après ça, si ça alors si...) mais en terme d'actions, évènements, états...
 
Sépares ton traitement de l'affichage déjà ça sera plus simple ;)

Reply

Marsh Posté le 07-11-2006 à 09:19:34    

pluzun...
 
tu vérifie que tous les champs de ton formulaire sont bon, si oui tu continu, sinon tu affiche de nouveau ton formulaire et tu passe les infos provenant du $_post via une variable de session.

Reply

Marsh Posté le 10-11-2006 à 21:50:32    

comment peut-on retrouver une valeur selectionné depuis un menu 'select' ?
par exemple le formulaire est envoyé, avec un element selectionné dans la liste, puis on appuie sur page precedente, on retourne sous le formulaire ; comment faire en sorte que le select retrouve sa valeur ?
 
je ne sais pas faire autrement que tester les valeurs une par une puis affecter un 'selected' au champ qui correspond ; ça va pour une petite liste, mais ça fait long quand la liste en grande !

Reply

Marsh Posté le 11-11-2006 à 08:42:13    

D'une manière générale, tu vois bien que tes histoires de précédent c'est la mouise :spamafote:
C'est parce que c'est pas fait pour fonctionner comme ça :spamafote:
 
Tu peux pas savoir dans quel état était le navigateur client quand il appuit sur précédent, à moins de faire une moulinette avec un truc dans le genre Ajax...
 
Faut pas baser le fonctionnement de ton truc sur de la navigation par le bouton précédent (ou équivalent JS) tu vas avoir de drôles de surprises :d
 
Le précédent c'est un petit truc pour dépanner, si c'est pour faire un truc pour modifier une saisie, gères le toi même, t'as les données du formulaire, tu les resserts :spamafote:
 
Je vois pas le problème de la longue liste, utilises des tableaux et leurs fonctionnalités c'est un peu la facilité de php alors te prive pas!

Reply

Marsh Posté le 11-11-2006 à 09:29:23    

je ne comprend pas le probleme de la page precedente
 
que ça soit page precedente, ou redirection vers la page avec un header, un include ou autres truc de ce genre, le probleme est exactement le même puisque le formulaire doit etre retablis

Reply

Marsh Posté le 11-11-2006 à 09:31:56    

pour la liste, je procede comme cela,

Code :
  1. $el = $_SESSION['elementsaisis'];
  2. <SELECT name="list">
  3.   <option value=1 <? if ( $el == 1) echo 'selected'; ?>>element1</option>
  4.   <option value=2 <? if ( $el == 2) echo 'selected'; ?>>element2</option>
  5.   <option value=3 <? if ( $el == 3) echo 'selected'; ?>>element3</option>
  6.   <option value=4 <? if ( $el == 4) echo 'selected'; ?>>element4</option>
  7.   <option value=5 <? if ( $el == 5) echo 'selected'; ?>>element5</option>
  8.   <option value=6 <? if ( $el == 6) echo 'selected'; ?>>element6</option>
  9.  </SELECT>


 
je ne vois pas comment faire avec les tableaux
un exemple ?

Message cité 1 fois
Message édité par Fazer916 le 11-11-2006 à 09:32:51
Reply

Marsh Posté le 13-11-2006 à 12:37:32    

Fazer916 a écrit :

je ne comprend pas le probleme de la page precedente
 
que ça soit page precedente, ou redirection vers la page avec un header, un include ou autres truc de ce genre, le probleme est exactement le même puisque le formulaire doit etre retablis


Faut pas compter sur l'extérieur, donc à toi de tout gérer si tu veux pas avoir des surprises, ou simplement que pour une raison diverse et avariée certains utilisateurs puissent pas utiliser ton truc :spamafote:
 
Donc joue pas avec l'historique, le déroulement normal d'une application ne doit pas être basé sur une succession d'étapes non controllées :spamafote:
 
Si tu veux proposer de réafficher une page, tu la réaffiches toi même en faisant comme tu veux sachant que si tu utilises header() ça veut dire que t'es pas dans une architecture à un point d'entrée et que très vite ça peut devenir gênant :spamafote:
 

Fazer916 a écrit :

pour la liste, je procede comme cela,

Code :
  1. $el = $_SESSION['elementsaisis'];
  2. <SELECT name="list">
  3.   <option value=1 <? if ( $el == 1) echo 'selected'; ?>>element1</option>
  4.   <option value=2 <? if ( $el == 2) echo 'selected'; ?>>element2</option>
  5.   <option value=3 <? if ( $el == 3) echo 'selected'; ?>>element3</option>
  6.   <option value=4 <? if ( $el == 4) echo 'selected'; ?>>element4</option>
  7.   <option value=5 <? if ( $el == 5) echo 'selected'; ?>>element5</option>
  8.   <option value=6 <? if ( $el == 6) echo 'selected'; ?>>element6</option>
  9.  </SELECT>


 
je ne vois pas comment faire avec les tableaux
un exemple ?


Au lieu de faire un truc spécifique (le nombre d'entrées, le type de balise) le générique (à condition qu'il soit pas trop abstrait) est toujours mieux ;)
 
Exemple à adapter aux besoins:

Code :
  1. <?php
  2. function selectHtml($nom, $donnees){
  3.          $selectedValue=recupererPost($nom);
  4.          $chaineHtml='<select name="'.$nom."\">\n";
  5.          foreach($donnees as $value=>$libelle){
  6.                  $chaineHtml.='<option value="'.$value.'"';
  7.                  if($selectedValue==$value) $chaineHtml.=' selected';
  8.                  $chaineHtml.='>'.$libelle."</option>\n";
  9.          }
  10.          $chaineHtml.="</select>\n";
  11.          return $chaineHtml;
  12. }
  13. function recupererPost($nom){
  14.          if(!empty($_POST[$nom])) return $_POST[$nom];
  15.          return false;
  16. }
  17. $select=array(1=>'élément 1',
  18.               2=>'élément 2',
  19.               3=>'élément 3',
  20.               4=>'élément 4',
  21.               5=>'élément 5',
  22.               6=>'élément 6',
  23.               );
  24. echo '<form name="formulaire" method="post">'.
  25.        selectHtml('test', $select).
  26.      ' <input type="submit" name="valider">
  27.      </form>';
  28. ?>


Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed