Page 1 sur 1

Redirection et formulaire

Posté : 11 janv. 2008, 19:43
par Ced
Bonsoir à toute la communauté (et meilleurs voeux au passage :))
J’ai, sur un site, un formulaire de connexion (loggin + password) avec un bouton de validation.
Lorsque le visiteur a saisi ces 2 valeurs et valide sa saisie, je souhaiterais que s’ouvre une nouvelle fenêtre car le visiteur doit à ce moment basculer vers un autre site.
J’arrive à ouvrir cette nouvelle fenêtre lors de la validation des données grâce à la ligne suivante :

Code : Tout sélectionner

<form name="form1" method="post" action=”ma_nouvelle_page.php" target="_blank">


Seulement, les données saisies dans le formulaire restent affichées (normal, la page n’a pas été rappelée).
Ma question est donc la suivante : Comment permettre à la fois l’ouverture de cette nouvelle fenêtre et en parallèle « l’effacement » des données saisies ??

En vous remerciant par avance pour le coup de main
Cedric

Posté : 11 janv. 2008, 20:22
par Aureusms
Après la validation utilise la fonction header("location...")

Posté : 11 janv. 2008, 22:38
par Ced
je vois pas en quoi la fonction header peut m'aider... :cry:

Posté : 12 janv. 2008, 01:14
par Hywan
La fonction header envoie une en-tête au navigateur (d'où son nom en fait ;-)).
Ce que Aureusms a précisé (plus ou moins bien je te l'accorde), c'est que tu peux envoyé l'en-tête location, qui en fait redirige le visiteur vers une autre page.
Donc si tu fais quelque chose du genre :
header('Location: http://example.net');
, ton script redirigera les visiteurs vers http://example.net.

Tu peux lire sur la documentation l'exemple 3 : « Redirection HTTP avec header() ». Toujours lire la docum ... euh non.

Posté : 12 janv. 2008, 10:10
par Aureusms
La fonction header envoie une en-tête au navigateur (d'où son nom en fait ;-)).
Ce que Aureusms a précisé (plus ou moins bien je te l'accorde), c'est que tu peux envoyé l'en-tête location, qui en fait redirige le visiteur vers une autre page.
Donc si tu fais quelque chose du genre :
header('Location: http://example.net');
, ton script redirigera les visiteurs vers http://example.net.

Tu peux lire sur la documentation l'exemple 3 : « Redirection HTTP avec header() ». Toujours lire la docum ... euh non.
Je ne suis pas d'accord !! J'ai pas bien expliqué du tout !!! :wink:

Posté : 12 janv. 2008, 10:58
par Ryle
Euh.... la fonction header ne peut pas être utilisée dans son cas.... les données du formulaire sont envoyées dans une nouvelle fenêtre et le header() ou tout autre traitement php serait exécuté dans cette nouvelle fenêtre et ne modifiera pas la fenêtre du formulaire....

Pour vider les champs de ton formulaire initiale il faudra donc utiliser du javascript (dans la fenêtre courante ou dans la nouvelle en te référant à window.opener) ou bien modifier un peu le principe de ton formulaire pour que les données soient envoyées dans la même fenêtre pour validation (virer le target donc) et ajouter au script de validation un peu de javascript pour que ce soit lui qui ouvre la nouvelle fenêtre en fin de traitement (avec le soucis d'éventuellement avoir à repasser des variables en get ou via la session si nécessaire)

Posté : 12 janv. 2008, 12:49
par Aureusms
Hmmm :-k D'accord avec toi mais s'il fait un header avec des variables GET dans l'URL il peut ou non affiché le formulaire vide ou complet en fonction des varible $_GET ? (c'est là dessus que je suis resté un peu light en explication)

Posté : 12 janv. 2008, 13:03
par Hywan
Mais attention, il faut toujours faire au plus simple. En effet, si j'ai des fenêtres qui s'ouvre dans tous les sens, ça a tendance à très vite m'agacer. D'autant plus que ce n'est que très faiblement accessible. Ça ne facilite pas la navigation. Et il me semble que la valeur _blank disparaît pour @target en HTML 5. Il faut vérifier, je n'ai lu quand diagonal.

Pour ton problème donc. Je te conseille de faire de cette façon : tu valides ton formulaire vers ta_page.php (page qui contient le formulaire). Si le formulaire n'est pas valide, on affiche les erreurs et il recommence. Si le formulaire est valide, tu fais une redirection (tu auras besoin de la fonction header) vers une page out.php par exemple avec un ID (out.php?siteId=42) si il y en a besoin. Si c'est toujours le même site, pas besoin. Ensuite, la page out.php affiche un message du genre : vous allez être redirigé dans 10 secs. avec un compteur en Javascript ou un truc du genre. Je te propose de faire une redirection avec un <meta /> et non avec Javascript (oui, si Javascript est désactivé, la navigation est impossible). Cette solution te permettra de ridiriger tes visiteurs où bout de n secondes (oui Javascript n'a pas tout inventé quand même ;-)).

Les avantages : la personne sait qu'elle sera redirigée, donc pas besoin de _blank ou autre truc farfelue ; tu peux gérer les flux de sorties de ton site (x% vers tel site, y% vers tel autre site etc.) ; ça résout ton problème de base ;-) ; et c'est autrement plus propre que d'avoir une popup, nettoyer une autre etc.

Posté : 14 janv. 2008, 11:20
par Ced
Merci à tous pour vos réponses.

D'après mes recherches, header ne permet pas de rediriger dans une nouvelle fenêtre (d'ou ma réponse à la 1ère suggestion).

je vais m'inspirer de vos dernières suggestions. Je ne voulais pas utiliser de js mais là, j'ai l'impression que je n'ai pas trop le choix... :cry:

Posté : 14 janv. 2008, 11:33
par Ryle
Bah malheureusement tu n'as pas trop le choix, "nouvelle fenêtre", c'est forcément côté client que ça se passe, donc php peut pas grand chose... du coup c'est soit html (et là j'ai pas trop de solution à ton problème) soit javascript :)