Redirection php

Fermé
fab1105 Messages postés 114 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 17 juin 2010 - 15 nov. 2009 à 12:43
fab1105 Messages postés 114 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 17 juin 2010 - 16 nov. 2009 à 21:22
Bonjour,


Question toute bête : comment fait on en PHP pour rediriger l'utilisateur vers l'index du site par exemple, s'il est arrivé sur une page sans être obligatoirement passé par une autre page précise?

Exemple : j'ai un code sur une page form.php qui vérifie un formulaire et qui redirige vers une page de remerciement envoi_ok.php si le formulaire a bien été remplie. Quel code dois-je mettre sur ma page envoi_ok.php pour que l'utilisateur soit redirigé vers l'index.php s'il a tapé directement l'adresse dans la barre et qu'il essaye donc d'accéder à cette page sans avoir remplie le formulaire?

Merci pour vos réponses.
A voir également:

5 réponses

dodoecchi Messages postés 454 Date d'inscription samedi 9 septembre 2006 Statut Membre Dernière intervention 26 avril 2012 29
15 nov. 2009 à 13:06
http://www.aidoforum.com/tutoriaux-49-redirection-automatique-vers-une-autre-page.html

la recherche ça existe
merci de cherche un minimum la prochaine fois

Dorian
0
Utilisateur anonyme
15 nov. 2009 à 13:12
Tu peux aussi regarder la fonction header()
0
fab1105 Messages postés 114 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 17 juin 2010 7
15 nov. 2009 à 13:32
Bonjour, oui Dorian la recherche existe et la sympathie aussi... Mais ce que je demande c'est pas le moyen de faire une redirection, ça je sais faire , mais c'est écrire la condition pour la redirection, j'ai essayé avec :
if ($_SERVER['HTTP_REFERER'] != 'http://localhost/code/inscription/envoi_form.php') {

header("Location: index.php");

}

mais cela ne marche pas tout à fait correctement et je ne sais même pas si c'est la méthode que l'on utilise dans ce genre de cas.

Alors si quelqu'un de sympathique pouvait me donner une piste pour répondre à ma question, sans m'envoyer bouler, ce serait bien gentil de sa part.

Merci pour vos réponses cordiales et constructives.
0
dodoecchi Messages postés 454 Date d'inscription samedi 9 septembre 2006 Statut Membre Dernière intervention 26 avril 2012 29
16 nov. 2009 à 20:32
utiliser la variable serveur pour ce genre de chose, c'est (en mon sens) aller un peu loin

si un utilisateur n'a rien à faire sur une page, inutile de prévoir une redirection. Je pense bien que si quelqu'un bidouille les urls et se retrouve sur une page blanche, c'est son problème. Pour obtenir la page blanche, un die(mon_message_d'erreur); après une condition non remplie fera l'affaire. Et je pense pas que ça pose des problèmes de sécurité les die.
Bon, prenons un autre cas : l'utilisateur a mal rempli le formulaire, une condition côté serveur (php) ne passe pas, il tombe sur un die qui rend une page (presque) blanche. une solution est d'implémenter une vérification côté client (avec par exemple des librairies javascript comme jquery, qui n'autorisera pas l'envoi du formulaire avant l'avoir des données valides), mais il ne faut pas exclure le risque des utilisateurs sans javascript.

Dorian
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fab1105 Messages postés 114 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 17 juin 2010 7
16 nov. 2009 à 21:22
Bonjour Dorian,
En fait la vérification est faite en php sur la page du formulaire qui s'appelle elle même, je ne vais pas mettre tout mon code ce serait trop long mais en voici un résumé :

//avant tout code html je commence à vérifier que le formulaire est bien rempli(que les variables ont été postées et qu'elles sont valides)
<?php

if(isset($_POST['pseudo']) && isset($_POST['mail']) && isset($_POST['pass']) && isset($_POST['verif_pass'])) {

if($_POST['pseudo'] != NULL && $_POST['mail'] != NULL && $_POST['pass'] != NULL && $_POST['verif_pass'] != NULL ) {

if(preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail'])) {

if($_POST['pass'] == $_POST['verif_pass']) {

//je vérifie que le formulaire est bien posté depuis ma page par mesure de sécurité
if ($_SERVER['HTTP_REFERER'] == 'http://localhost/code/inscription/envoi_form.php') {

$pseudo=strip_tags(trim($_POST['pseudo']));
$mail=strip_tags(trim($_POST['mail']));
$pass=sha1(strip_tags(trim($_POST['pass'])));
$verif_pass=strip_tags(trim($_POST['verif_pass']));

//ensuite j'envoie un mail pour confirmer l'inscription
//j'insère toutes les données dans la BDD en sécurisant les variables

//puis j'utilise un header("Location: envoi_form_ok.php"); pour envoyer le visiteur sur une page envoi_ok sur laquelle il lui est confirmé que son inscription est terminée et qu'il vas recevoir un mail de confirmation.

Puis bien sur d'autre vérification sont faites en php dans le corps du document pour avertir par exemple : "votre adresse mail n'est pas valide" ou "vous devez remplir ce champ" etc...

Alors c'est vrai tu as raison à la limite on s'en fout qu'il tape l'adresse envoi_ok et qu'il arrive sur une page "Inscription terminée" sans avoir rempli le formulaire, c'est sans aucune conséquence mais ça m'embêtait je trouvais cela pas très pro.

Sinon j'ai modifié mon code sur ma page envoi_ok et ça à l'air de fonctionner correctement maintenant, j'ai fais avant tout code html : if ($_SERVER['HTTP_REFERER'] != 'http://localhost/code/inscription/envoi_form.php') {

header("Location: envoi_form.php");

}
et lorsque l'on tape directement l'adresse envoi_ok ou même si je clic sur le lien dans localhost, on est directement redirigé sur la page du formulaire.

Sinon pour la vérification côté client j'en ai fait une avec jquery mais comme tu dis il faut toujours en faire une côté serveur.

En résumé si l'utilisateur clic sur envoyer et que les données sont incorrect, il reste sur la même page avec au dessus du formulaire écrit "tel champs est mal rempli" et si les données sont correctes une fois le script de vérification effectué il est redirigé vers une page de remerciement "inscription terminée".
Je trouve que cette méthode est pas trop mal parce que tu peux te passer d'une vérification côté client, si un champ est faux c'est la même page qui est rechargée, donc pas de problème impossible de passer la page formulaire sans qu'elle soit bien remplie.

Voilà merci pour ta réponse, si t'as des suggestions je suis à l'écoute.
0