Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1351 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  eviter effacement formulaire en page precedente

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

eviter effacement formulaire en page precedente

n°1470615
Fazer916
y en a marre
Posté le 04-11-2006 à 18:15:50  profilanswer
 

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" ?

mood
Publicité
Posté le 04-11-2006 à 18:15:50  profilanswer
 

n°1470696
leflos5
On est ou on est pas :)
Posté le 05-11-2006 à 04:18:11  profilanswer
 

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

n°1470708
Fazer916
y en a marre
Posté le 05-11-2006 à 10:08:49  profilanswer
 

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
n°1470710
esox_ch
Posté le 05-11-2006 à 10:15:12  profilanswer
 

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
n°1470711
Fazer916
y en a marre
Posté le 05-11-2006 à 10:17:45  profilanswer
 

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
n°1470712
Fazer916
y en a marre
Posté le 05-11-2006 à 10:25:40  profilanswer
 

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
n°1470725
Fazer916
y en a marre
Posté le 05-11-2006 à 11:02:50  profilanswer
 

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

n°1470738
FlorentG
Unité de Masse
Posté le 05-11-2006 à 11:16:57  profilanswer
 

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 :(

n°1470745
Fazer916
y en a marre
Posté le 05-11-2006 à 11:58:44  profilanswer
 

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
n°1470748
FlorentG
Unité de Masse
Posté le 05-11-2006 à 12:05:44  profilanswer
 

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...

mood
Publicité
Posté le 05-11-2006 à 12:05:44  profilanswer
 

n°1470749
Fazer916
y en a marre
Posté le 05-11-2006 à 12:09:56  profilanswer
 

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
 

n°1470750
FlorentG
Unité de Masse
Posté le 05-11-2006 à 12:13:17  profilanswer
 

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...

n°1470752
Fazer916
y en a marre
Posté le 05-11-2006 à 12:13:32  profilanswer
 

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é ?

n°1470791
Fazer916
y en a marre
Posté le 05-11-2006 à 14:36:03  profilanswer
 

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
n°1470817
leflos5
On est ou on est pas :)
Posté le 05-11-2006 à 15:48:48  profilanswer
 

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

n°1470832
Fazer916
y en a marre
Posté le 05-11-2006 à 16:10:46  profilanswer
 

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 :(

n°1470975
leflos5
On est ou on est pas :)
Posté le 06-11-2006 à 02:23:44  profilanswer
 

[: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]

n°1471278
Fazer916
y en a marre
Posté le 06-11-2006 à 17:22:11  profilanswer
 

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 ?

n°1471353
Fazer916
y en a marre
Posté le 06-11-2006 à 20:26:04  profilanswer
 

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
n°1471415
leflos5
On est ou on est pas :)
Posté le 07-11-2006 à 02:45:22  profilanswer
 

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 ;)

n°1471452
chani_t
From Dune
Posté le 07-11-2006 à 09:19:34  profilanswer
 

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.

n°1473747
Fazer916
y en a marre
Posté le 10-11-2006 à 21:50:32  profilanswer
 

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 !

n°1473803
leflos5
On est ou on est pas :)
Posté le 11-11-2006 à 08:42:13  profilanswer
 

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!

n°1473810
Fazer916
y en a marre
Posté le 11-11-2006 à 09:29:23  profilanswer
 

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

n°1473811
Fazer916
y en a marre
Posté le 11-11-2006 à 09:31:56  profilanswer
 

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
n°1474495
leflos5
On est ou on est pas :)
Posté le 13-11-2006 à 12:37:32  profilanswer
 

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. ?>


mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  eviter effacement formulaire en page precedente

 

Sujets relatifs
Page Perso Free -- Mysqli_Pb d'accent lors de l'envoi de mon formulaire
[Resolu]Mon formulaire de contact...Propriété d'une page HTML à l'ouverture (pas window.open())
deployer ejb et le tester sous une page JSPRemplir le champ d'un formulaire par une variable
Contrôle formulaire côté serveur / retour sur erreur?[DOM/javascript] Focus sur la page mère (retour arrière)
probleme pour faire defiler un texte entre 2 image 
Plus de sujets relatifs à : eviter effacement formulaire en page precedente


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR