eviter effacement formulaire en page precedente - PHP - Programmation
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 :
|
et serrer les fesses pour que tous les caches l'interprêtent comme tu veux
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
Marsh Posté le 05-11-2006 à 10:15:12
Ah , parceque ça te semble une ligne de xHTML ?
Étant donné qu'en plus tu as posté dans la cat "php", ca te semblerais logique que ce soit une commande PHP ?
Marsh Posté le 05-11-2006 à 10:17:45
ah ok lol !
merci
non j'ai pris ça pour du javascript en fait
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 :
|
NB2. "c:\....php on line 27"-> c'est a cette ligne que je fais mon header
Marsh Posté le 05-11-2006 à 11:02:50
en fait ou que je le mette, j'ai une erreur "headers already sent "
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
Marsh Posté le 05-11-2006 à 11:58:44
la base je l'apprend au fur et a mesure de mon avancée
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é
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...
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
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...
Marsh Posté le 05-11-2006 à 12:13:32
leflos5 a écrit : |
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é ?
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
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
Marsh Posté le 05-11-2006 à 16:10:46
ok lol
Code :
|
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
Marsh Posté le 06-11-2006 à 02:23:44
Ah oui là c'est normal
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 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
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 ?
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))
Marsh Posté le 07-11-2006 à 02:45:22
Si c'est pour ça, oublie le retour crado, tu enregistres et tu resserts
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
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.
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 !
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
C'est parce que c'est pas fait pour fonctionner comme ça
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
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
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!
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
Marsh Posté le 11-11-2006 à 09:31:56
pour la liste, je procede comme cela,
Code :
|
je ne vois pas comment faire avec les tableaux
un exemple ?
Marsh Posté le 13-11-2006 à 12:37:32
Fazer916 a écrit : je ne comprend pas le probleme de la page precedente |
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
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
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
Fazer916 a écrit : pour la liste, je procede comme cela,
|
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 :
|
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" ?