OVH Cloud OVH Cloud

Changement de page sur formulaire valide

4 réponses
Avatar
jeremie.fouche
Bonjour a tous

Dans un site, j'ai de nombreux formulaires. La technique que j'utilise
actuellement est la suivante: Le formulaire renvoie a la page courante
(le formulaire) lors d'un appuie sur submit. cela permet de rafficher
le formulaire avec les valeurs précedentes, en particulier si le
formulaire n'est pas remplie correctement.

Mais j'aimerai bien que lorsque le formulaire est valide, on aille sur
une autre page. Pour cela, je me suis dis qu'il existait une fonction
header. Et dans la doc, il y a un magnifique exemple :
header( "Location: http://".$_SERVER['HTTP_HOST']
."/".dirname($_SERVER['PHP_SELF'])
."/".$relative_url );

Le probleme de cet exemple, c'est que pour un developpement en local,
j'obtiens un header de la sorte :
"Location: http://localhost//site/rep/mon_url.php"

Et cette url n'est pas valide !

J'ai donc 2 petites questions :
1- Quelle est la méthode généralement utilisée pour les formulaires (
ie: <form action=" ??? "> ) ? PHP_SELF ? ou bien la page ou l'on
desire aller si le formulaire est valide ?

2- L'exemple ne fanctionnant pas en localhost chez moi sur EasyPhp,
dois-je changer de technique de changement d'url ? ou bien cela vient
il du fait que je sois en localost ?

Tout aide sera la bienvenu.

Cordialement

--

Jérémie

4 réponses

Avatar
Olivier Miakinen

[...] dans la doc, il y a un magnifique exemple :
header( "Location: http://".$_SERVER['HTTP_HOST']
."/".dirname($_SERVER['PHP_SELF'])
."/".$relative_url );

Le probleme de cet exemple, c'est que pour un developpement en local,
j'obtiens un header de la sorte :
"Location: http://localhost//site/rep/mon_url.php"

Et cette url n'est pas valide !


Pour quelle raison n'est-elle pas valide ? Parce que ton adresse locale
ne s'appelle pas localhost, ou bien à cause du double / entre localhost
et le reste du chemin d'accès ?

Dans le premier cas, voir la config de ton serveur (quitte à aller poser
la question sur fciw.serveurs) ; dans le second, essayer ceci :

header( "Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])."/".$relative_url );

Une autre idée pour avancer : chercher dans le phpinfo() ce qui
ressemble à un début d'adresse valide : HTTP_HOST, mais peut-être
aussi SERVER_NAME, ou autre chose.

Avatar
Missions courtes
"Olivier Miakinen" <om+ a écrit dans le message news:
cruov5$2pmi$

[...] dans la doc, il y a un magnifique exemple :
header( "Location: http://".$_SERVER['HTTP_HOST']
."/".dirname($_SERVER['PHP_SELF'])
."/".$relative_url );

Le probleme de cet exemple, c'est que pour un developpement en local,
j'obtiens un header de la sorte :
"Location: http://localhost//site/rep/mon_url.php"

Et cette url n'est pas valide !


Pour quelle raison n'est-elle pas valide ? Parce que ton adresse locale
ne s'appelle pas localhost, ou bien à cause du double / entre localhost
et le reste du chemin d'accès ?

Dans le premier cas, voir la config de ton serveur (quitte à aller poser
la question sur fciw.serveurs) ; dans le second, essayer ceci :

header( "Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])."/".$relative_url );

Une autre idée pour avancer : chercher dans le phpinfo() ce qui
ressemble à un début d'adresse valide : HTTP_HOST, mais peut-être
aussi SERVER_NAME, ou autre chose.


Bonjour,
Pourquoi ne travailles pas avec seulement des adresses
de pages relatives (par rapport à la page courrante) ?
Tu éviterais tous ces problèmes.

Cordialement.
Michel
Site : Missions-courtes.


Avatar
Olivier Miakinen

header( "Location: http://".$_SERVER['HTTP_HOST']
."/".dirname($_SERVER['PHP_SELF'])
."/".$relative_url );

[...]


header( "Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])."/".$relative_url );


Pourquoi ne travailles pas avec seulement des adresses
de pages relatives (par rapport à la page courrante) ?


Parce qu'il n'y a plus de page courante quand on fait un
header("Location: ..."), et donc une nouvelle requête HTTP ?
La norme exige avec raison une adresse absolue.

Par ailleurs, il serait sympa de citer un peu plus léger : tu
n'avais pas besoin de citer l'intégralité de mon article pour y
répondre un truc aussi général...



Avatar
John GALLET
Bonjour,

Dans un site, j'ai de nombreux formulaires. La technique que j'utilise
actuellement est la suivante: Le formulaire renvoie a la page courante
(le formulaire) lors d'un appuie sur submit. cela permet de rafficher
le formulaire avec les valeurs précedentes, en particulier si le
formulaire n'est pas remplie correctement.
Bien jusqu'ici.


Mais j'aimerai bien que lorsque le formulaire est valide, on aille sur
une autre page.
Non, tu aimerais que soit affichée une autre information. C'est ça ton

besoin.

Pour cela, je me suis dis qu'il existait une fonction
header.
Lire la FAQ à son sujet : http://faqfclphp.free.fr/



1- Quelle est la méthode généralement utilisée pour les formulaires (
ie: <form action=" ??? "> ) ?
Généralement, j'en sais rien. Celle que j'utilise est la suivante :

- filtrer les variables en entrée.
- vérifier la cohérence (variables obligatoires présentes, etc..)
Si une incohérence détecteé :
require('print_form.php'); exit();
Dans ce print_form, la target est le script courant qui gère la réception
du formulaire. Ce print_form ne fait que séparer l'affichage de la
logique.
Sinon (tout va bien), il suffit d'exécuter el code que je veux. Si je veux
exécuter toto.php, je n'ai pas besoni de faire stupidement un aller retour
pour rien, il suffit de faire require('toto.php'); exit().

a++
JG