le sujet a certainement été débatu des millions de fois mais je ne trouve
pas de solution.
je voudrais poster un formulaire vers une page php qui s'occupe de le
valider, faire les traitements, et rediriger vers une autre page PHP en cas
de succes ou vers la page input en cas d'erreur.
donc j'ai un formulaire en POST.
une page php qui récupère les paramètres, et les teste.
si c'est pas ok, je pose un message d'erreur en session et je redirige vers
la page input sans oublier de poser les données du formulaire en parametre,
histoire que ca ne vide pas mon forumaire à chaque retour.
ca donne ca dans checkForm.php:
if(!is_null(erreur)) {
Header("Location: demandeCompte.php?nom=".$nom."&prenom=".$prenom);exit;
}
le formulaire ressemble à ca:
<input type=text name="nom" value="<?=$nom?>">
seul pb, dans mon formulaire, on peut poster des caractères chiants, genre
apostrophe ou &.
et dans ce cas, dans mon input, j'obtiens /// devant mon apostrophe (!!!).
si je rawurlencode($nom) dans mon url et rawurldecode($nom) dans mon form
ca ne change rien pour les apostrophes, mais pour le reste c'est bon.
comment gérer les apostrophes proprement, sans les interdire bien sur ???
rien à voir avec des requetes SQL, donc addslashes() ne m'est d'aucune
utilité.
y a-t-il un autre moyen de faire une redirection en php ou de poser des
paramètres sur une requete http ?
Je vais avoir le meme pb dans bcp de formulaires, et je voudrais éviter de
mettre les données des formulaires en session (ce qui je pense résoudrait
mon pb)
certes, je suis d'accord sur le principe, c'est exactement ce que je voulais faire. j'ai utilisé header car je n'avais pas pensé à un include et ca ressemblait à mon request.forward java cependant ceci apporte bcp de soucis:
- cela ne résout en rien mon pb de paramètre d'url. il faut les nettoyer avant de les réafficher. ($nom=htmlentities(stripslashes($string))) je n'ai pas essayé mais logiquement je devrais économiser le rawurlencode. - ma page formulaire ne se trouve pas dans le meme répertoire que la page qui valide le formulaire. donc lors de l'entrée, le chemin "." n'est pas le meme qu'en retour (apres validation), donc je suis obligé de tout mettre en absolu depuis la racine du serveur (images, action du form....). ca ne me plait pas du tout (pas cool niveau portabilité: je ne déploie actuellement pas à la racine du serveur, et le rép d'install pourrait un jour changer pour un autre client) mais bon, j'ai pas le choix... je sens que pour les includes ca va etre plus compliqué, je vais devoir changer le php.ini pour pointer la racine de mon appli. - il faut revoir tous les includes de fonctions dans toutes les pages: si j'ai besoin d'une meme fonction à la fois dans ma page html et dans ma page de validation, comment faire (si je mets un include dans chacun, il me dit que je redefinis ma fonction, mais sinon il ne peut pas la connaitre...) - mes parametres de session n'ont plus l'air d'etre accessible: je récupère null à chaque fois (mais le param est bien registered). exemple: dans ma page form.php: je récupère $_SESSION['errors'] et je l'affiche. lors du 1er passage, il est null. normal. je valide le form, mon checkform.php fait: $errors[0] = "il y a une erreur"; session_register("errors"); include(form.php) et la NULL s'affiche au lieu de "il y a une erreur". ou est l'erreur ?
j'ai l'impression de passer à coté de choses qui me paraissent simples...
certes, je suis d'accord sur le principe, c'est exactement ce que je voulais
faire. j'ai utilisé header car je n'avais pas pensé à un include et ca
ressemblait à mon request.forward java
cependant ceci apporte bcp de soucis:
- cela ne résout en rien mon pb de paramètre d'url. il faut les nettoyer
avant de les réafficher. ($nom=htmlentities(stripslashes($string))) je n'ai
pas essayé mais logiquement je devrais économiser le rawurlencode.
- ma page formulaire ne se trouve pas dans le meme répertoire que la page
qui valide le formulaire.
donc lors de l'entrée, le chemin "." n'est pas le meme qu'en retour (apres
validation), donc je suis obligé de tout mettre en absolu depuis la racine
du serveur (images, action du form....). ca ne me plait pas du tout (pas
cool niveau portabilité: je ne déploie actuellement pas à la racine du
serveur, et le rép d'install pourrait un jour changer pour un autre client)
mais bon, j'ai pas le choix... je sens que pour les includes ca va etre plus
compliqué, je vais devoir changer le php.ini pour pointer la racine de mon
appli.
- il faut revoir tous les includes de fonctions dans toutes les pages: si
j'ai besoin d'une meme fonction à la fois dans ma page html et dans ma page
de validation, comment faire (si je mets un include dans chacun, il me dit
que je redefinis ma fonction, mais sinon il ne peut pas la connaitre...)
- mes parametres de session n'ont plus l'air d'etre accessible: je récupère
null à chaque fois (mais le param est bien registered).
exemple:
dans ma page form.php: je récupère $_SESSION['errors'] et je l'affiche.
lors du 1er passage, il est null. normal.
je valide le form, mon checkform.php fait:
$errors[0] = "il y a une erreur";
session_register("errors");
include(form.php)
et la NULL s'affiche au lieu de "il y a une erreur".
ou est l'erreur ?
j'ai l'impression de passer à coté de choses qui me paraissent simples...
certes, je suis d'accord sur le principe, c'est exactement ce que je voulais faire. j'ai utilisé header car je n'avais pas pensé à un include et ca ressemblait à mon request.forward java cependant ceci apporte bcp de soucis:
- cela ne résout en rien mon pb de paramètre d'url. il faut les nettoyer avant de les réafficher. ($nom=htmlentities(stripslashes($string))) je n'ai pas essayé mais logiquement je devrais économiser le rawurlencode. - ma page formulaire ne se trouve pas dans le meme répertoire que la page qui valide le formulaire. donc lors de l'entrée, le chemin "." n'est pas le meme qu'en retour (apres validation), donc je suis obligé de tout mettre en absolu depuis la racine du serveur (images, action du form....). ca ne me plait pas du tout (pas cool niveau portabilité: je ne déploie actuellement pas à la racine du serveur, et le rép d'install pourrait un jour changer pour un autre client) mais bon, j'ai pas le choix... je sens que pour les includes ca va etre plus compliqué, je vais devoir changer le php.ini pour pointer la racine de mon appli. - il faut revoir tous les includes de fonctions dans toutes les pages: si j'ai besoin d'une meme fonction à la fois dans ma page html et dans ma page de validation, comment faire (si je mets un include dans chacun, il me dit que je redefinis ma fonction, mais sinon il ne peut pas la connaitre...) - mes parametres de session n'ont plus l'air d'etre accessible: je récupère null à chaque fois (mais le param est bien registered). exemple: dans ma page form.php: je récupère $_SESSION['errors'] et je l'affiche. lors du 1er passage, il est null. normal. je valide le form, mon checkform.php fait: $errors[0] = "il y a une erreur"; session_register("errors"); include(form.php) et la NULL s'affiche au lieu de "il y a une erreur". ou est l'erreur ?
j'ai l'impression de passer à coté de choses qui me paraissent simples...
- cela ne résout en rien mon pb de paramètre d'url. il faut les nettoyer avant de les réafficher. ($nom=htmlentities(stripslashes($string))) je n'ai pas essayé mais logiquement je devrais économiser le rawurlencode.
ceci est vrai. rawurlencode est inutile, et le stripslahes dans mon form également. voilà qui est propre.
- ma page formulaire ne se trouve pas dans le meme répertoire que la page qui valide le formulaire. donc lors de l'entrée, le chemin "." n'est pas le meme qu'en retour (apres validation), donc je suis obligé de tout mettre en absolu depuis la racine du serveur (images, action du form....).
ceci est également vrai. pas encore de solution "propre" et indépendante du répertoire dans lequel mon appli est déployée je suis ouvert à toute suggestion
- il faut revoir tous les includes de fonctions dans toutes les pages: si j'ai besoin d'une meme fonction à la fois dans ma page html et dans ma page de validation, comment faire (si je mets un include dans chacun, il me dit que je redefinis ma fonction, mais sinon il ne peut pas la connaitre...)
je n'avais pas vu include_once(). donc pas de souci
- mes parametres de session n'ont plus
l'air d'etre accessible: je récupère null à chaque fois (mais le param est bien registered).
j'ai un peu revu et nettoyé mon code. j'avais viré un session_start dans la manip. tout marche nickel
- cela ne résout en rien mon pb de paramètre d'url. il faut les
nettoyer avant de les réafficher.
($nom=htmlentities(stripslashes($string))) je n'ai pas essayé mais
logiquement je devrais économiser le rawurlencode.
ceci est vrai. rawurlencode est inutile, et le stripslahes dans mon form
également.
voilà qui est propre.
- ma page
formulaire ne se trouve pas dans le meme répertoire que la page qui
valide le formulaire.
donc lors de l'entrée, le chemin "." n'est pas le meme qu'en retour
(apres validation), donc je suis obligé de tout mettre en absolu
depuis la racine du serveur (images, action du form....).
ceci est également vrai. pas encore de solution "propre" et indépendante du
répertoire dans lequel mon appli est déployée
je suis ouvert à toute suggestion
- il faut revoir tous les includes de fonctions dans toutes les
pages: si j'ai besoin d'une meme fonction à la fois dans ma page html
et dans ma page de validation, comment faire (si je mets un include
dans chacun, il me dit que je redefinis ma fonction, mais sinon il ne
peut pas la connaitre...)
je n'avais pas vu include_once(). donc pas de souci
- mes parametres de session n'ont plus
l'air d'etre accessible: je récupère null à chaque fois (mais le
param est bien registered).
j'ai un peu revu et nettoyé mon code.
j'avais viré un session_start dans la manip.
tout marche nickel
- cela ne résout en rien mon pb de paramètre d'url. il faut les nettoyer avant de les réafficher. ($nom=htmlentities(stripslashes($string))) je n'ai pas essayé mais logiquement je devrais économiser le rawurlencode.
ceci est vrai. rawurlencode est inutile, et le stripslahes dans mon form également. voilà qui est propre.
- ma page formulaire ne se trouve pas dans le meme répertoire que la page qui valide le formulaire. donc lors de l'entrée, le chemin "." n'est pas le meme qu'en retour (apres validation), donc je suis obligé de tout mettre en absolu depuis la racine du serveur (images, action du form....).
ceci est également vrai. pas encore de solution "propre" et indépendante du répertoire dans lequel mon appli est déployée je suis ouvert à toute suggestion
- il faut revoir tous les includes de fonctions dans toutes les pages: si j'ai besoin d'une meme fonction à la fois dans ma page html et dans ma page de validation, comment faire (si je mets un include dans chacun, il me dit que je redefinis ma fonction, mais sinon il ne peut pas la connaitre...)
je n'avais pas vu include_once(). donc pas de souci
- mes parametres de session n'ont plus
l'air d'etre accessible: je récupère null à chaque fois (mais le param est bien registered).
j'ai un peu revu et nettoyé mon code. j'avais viré un session_start dans la manip. tout marche nickel
merci beaucoup du conseil pour les include !
Lionel
Lionel wrote:
merci beaucoup du conseil pour les include !
encore une question, mais je pense qu'elle va rester sans réponse:
je valide un formulaire en POST, qui en cas d'erreur me renvoie sur le meme formulaire via un include. si je click sur précédent, puis sur suivant, j'atterris sur la page indiquant Avertissement : expiration du délai pour cette page ..... avec des header, je n'ai évidemment pas ce pb. Peut on y remédier ? je trouve ca extrèmement désagréable quand on navigue. merci
Lionel wrote:
merci beaucoup du conseil pour les include !
encore une question, mais je pense qu'elle va rester sans réponse:
je valide un formulaire en POST, qui en cas d'erreur me renvoie sur le meme
formulaire via un include.
si je click sur précédent, puis sur suivant, j'atterris sur la page
indiquant Avertissement : expiration du délai pour cette page .....
avec des header, je n'ai évidemment pas ce pb.
Peut on y remédier ? je trouve ca extrèmement désagréable quand on navigue.
merci
encore une question, mais je pense qu'elle va rester sans réponse:
je valide un formulaire en POST, qui en cas d'erreur me renvoie sur le meme formulaire via un include. si je click sur précédent, puis sur suivant, j'atterris sur la page indiquant Avertissement : expiration du délai pour cette page ..... avec des header, je n'ai évidemment pas ce pb. Peut on y remédier ? je trouve ca extrèmement désagréable quand on navigue. merci
John Gallet
Re,
- cela ne résout en rien mon pb de paramètre d'url. Si si, car dans les fichier inclus, les variables SONT LES MEMES...
- ma page formulaire ne se trouve pas dans le meme répertoire que la page qui valide le formulaire. Aucune importance.
j'ai l'impression de passer à coté de choses qui me paraissent simples... C'est pourtant de l'algorithmique de base :
Récupérer les variables obligatoires, faire les tests de cohérence. Si KO : include("generer_formulaire.php"); exit(); (sinon inutile) Traiter normalement les données reçues.
Plus simple, je ne vois pas.
a++ JG
Re,
- cela ne résout en rien mon pb de paramètre d'url.
Si si, car dans les fichier inclus, les variables SONT LES MEMES...
- ma page formulaire ne se trouve pas dans le meme répertoire que la page
qui valide le formulaire.
Aucune importance.
j'ai l'impression de passer à coté de choses qui me paraissent simples...
C'est pourtant de l'algorithmique de base :
Récupérer les variables obligatoires, faire les tests de cohérence.
Si KO : include("generer_formulaire.php"); exit();
(sinon inutile)
Traiter normalement les données reçues.
- cela ne résout en rien mon pb de paramètre d'url. Si si, car dans les fichier inclus, les variables SONT LES MEMES...
- ma page formulaire ne se trouve pas dans le meme répertoire que la page qui valide le formulaire. Aucune importance.
j'ai l'impression de passer à coté de choses qui me paraissent simples... C'est pourtant de l'algorithmique de base :
Récupérer les variables obligatoires, faire les tests de cohérence. Si KO : include("generer_formulaire.php"); exit(); (sinon inutile) Traiter normalement les données reçues.
Plus simple, je ne vois pas.
a++ JG
John Gallet
si je click sur précédent, puis sur suivant, j'atterris sur la page indiquant Avertissement : expiration du délai pour cette page .....
Et si tu cliques sur la croix en haut à droite (sous unix) eou ) gauche (sous windows) tu fermes le navigateur.
Ce qu'il faut prévoir comme comportement crétin de l'internaute, c'est ce qui te pourrit ta base de données. Il est impossible de prévoir *toutes* les conneries qu'il va faire (1).
a++ JG (1) parce que je t'assure que je suis TRES inventif quand je 'joue' avec un site.
si je click sur précédent, puis sur suivant, j'atterris sur la page
indiquant Avertissement : expiration du délai pour cette page .....
Et si tu cliques sur la croix en haut à droite (sous unix) eou ) gauche
(sous windows) tu fermes le navigateur.
Ce qu'il faut prévoir comme comportement crétin de l'internaute, c'est
ce qui te pourrit ta base de données. Il est impossible de prévoir
*toutes* les conneries qu'il va faire (1).
a++
JG
(1) parce que je t'assure que je suis TRES inventif quand je 'joue' avec
un site.
si je click sur précédent, puis sur suivant, j'atterris sur la page indiquant Avertissement : expiration du délai pour cette page .....
Et si tu cliques sur la croix en haut à droite (sous unix) eou ) gauche (sous windows) tu fermes le navigateur.
Ce qu'il faut prévoir comme comportement crétin de l'internaute, c'est ce qui te pourrit ta base de données. Il est impossible de prévoir *toutes* les conneries qu'il va faire (1).
a++ JG (1) parce que je t'assure que je suis TRES inventif quand je 'joue' avec un site.
Lionel
John Gallet wrote:
Re,
- cela ne résout en rien mon pb de paramètre d'url. Si si, car dans les fichier inclus, les variables SONT LES MEMES...
je suis bien d'accord, mais pour pouvoir les réafficher dans le formulaire je suis obligé de les stripslasher( selon magic_quotes) et de le htmlentitiser. ce qui est normal et logique.
- ma page formulaire ne se trouve pas dans le meme répertoire que la page qui valide le formulaire. Aucune importance.
si, ca oblige à mettre tous les chemins en absolu. car le répertoire courant change selon qu'on est en entrée de form ou en retour.
Plus simple, je ne vois pas.
moi non plus.
John Gallet wrote:
Re,
- cela ne résout en rien mon pb de paramètre d'url.
Si si, car dans les fichier inclus, les variables SONT LES MEMES...
je suis bien d'accord, mais pour pouvoir les réafficher dans le formulaire
je suis obligé de les stripslasher( selon magic_quotes) et de le
htmlentitiser. ce qui est normal et logique.
- ma page formulaire ne se trouve pas dans le meme répertoire que la
page qui valide le formulaire.
Aucune importance.
si, ca oblige à mettre tous les chemins en absolu. car le répertoire courant
change selon qu'on est en entrée de form ou en retour.
- cela ne résout en rien mon pb de paramètre d'url. Si si, car dans les fichier inclus, les variables SONT LES MEMES...
je suis bien d'accord, mais pour pouvoir les réafficher dans le formulaire je suis obligé de les stripslasher( selon magic_quotes) et de le htmlentitiser. ce qui est normal et logique.
- ma page formulaire ne se trouve pas dans le meme répertoire que la page qui valide le formulaire. Aucune importance.
si, ca oblige à mettre tous les chemins en absolu. car le répertoire courant change selon qu'on est en entrée de form ou en retour.
Plus simple, je ne vois pas.
moi non plus.
john gallet
Re,
je suis bien d'accord, mais pour pouvoir les réafficher dans le formulaire je suis obligé de les stripslasher( selon magic_quotes) et de le htmlentitiser. ce qui est normal et logique.
Ah, je commence à voir le soucis, ok. Oui, ça dépende de ta config en entrée.
- ma page formulaire ne se trouve pas dans le meme répertoire que la page qui valide le formulaire. si, ca oblige à mettre tous les chemins en absolu. car le répertoire courant
change selon qu'on est en entrée de form ou en retour. Là en revanche je ne comprends toujours pas où est le problème. C'est le
**même** script qui gère tout, l'arrivée initiale sur le formulaire n'étant jamais que le cas particulier où aucun des champs obligatoires n'est renseigné (où la variable $bidule non présente dans le cas extrême où aucun champ ne serait obligatoire).
Donc si on s'adresse à traite_form.php, celui-ci peut bien faire des include/require de tous les script gen_form_html.php du disque dur où qu'ils se trouvent sur le file system local, ça ne changera rien à l'adresse de retour qui est dans tous les cas traite_form.php
a++ JG
Re,
je suis bien d'accord, mais pour pouvoir les réafficher dans le formulaire
je suis obligé de les stripslasher( selon magic_quotes) et de le
htmlentitiser. ce qui est normal et logique.
Ah, je commence à voir le soucis, ok. Oui, ça dépende de ta config en
entrée.
- ma page formulaire ne se trouve pas dans le meme répertoire que la
page qui valide le formulaire.
si, ca oblige à mettre tous les chemins en absolu. car le répertoire courant
change selon qu'on est en entrée de form ou en retour.
Là en revanche je ne comprends toujours pas où est le problème. C'est le
**même** script qui gère tout, l'arrivée initiale sur le formulaire
n'étant jamais que le cas particulier où aucun des champs obligatoires
n'est renseigné (où la variable $bidule non présente dans le cas extrême
où aucun champ ne serait obligatoire).
Donc si on s'adresse à traite_form.php, celui-ci peut bien faire des
include/require de tous les script gen_form_html.php du disque dur où
qu'ils se trouvent sur le file system local, ça ne changera rien à
l'adresse de retour qui est dans tous les cas traite_form.php
je suis bien d'accord, mais pour pouvoir les réafficher dans le formulaire je suis obligé de les stripslasher( selon magic_quotes) et de le htmlentitiser. ce qui est normal et logique.
Ah, je commence à voir le soucis, ok. Oui, ça dépende de ta config en entrée.
- ma page formulaire ne se trouve pas dans le meme répertoire que la page qui valide le formulaire. si, ca oblige à mettre tous les chemins en absolu. car le répertoire courant
change selon qu'on est en entrée de form ou en retour. Là en revanche je ne comprends toujours pas où est le problème. C'est le
**même** script qui gère tout, l'arrivée initiale sur le formulaire n'étant jamais que le cas particulier où aucun des champs obligatoires n'est renseigné (où la variable $bidule non présente dans le cas extrême où aucun champ ne serait obligatoire).
Donc si on s'adresse à traite_form.php, celui-ci peut bien faire des include/require de tous les script gen_form_html.php du disque dur où qu'ils se trouvent sur le file system local, ça ne changera rien à l'adresse de retour qui est dans tous les cas traite_form.php