Rediriger en emportant variables.

voblivion
Invité n'ayant pas de compte PHPfrance

03 sept. 2010, 20:07

Bonjours,

J'ai créé une première page contenant un formulaire (POST) à remplir par le client (/=serveur).
un script php vérifie que ces données sont bien remplies, puis les met en forme afin de les envoyer sur une boite mail.

Voici le code à partir de l'envoi du message:

Code : Tout sélectionner

//Envoi du message mail($Destinataire, 'Partition', $Message, $Headers); echo "<meta http-equiv='refresh' content='0; URL=Test_New.php?Email=$Email' />";
Une fois envoyé, on peut constater que je fais rediriger via http-equiv=refresh vers une nouvelle page.
Cette nouvelle page contient ceci:

Code : Tout sélectionner

<?php echo "Merci d'avoir envoyé le formulaire, votre adresse étant " .$Email. "."; ?>
Mais ça ne marche pas, je n'arrive pas à faire passer la variable $Email d'une page à l'autre ..

Qui peux m'aider ?

ViPHP
ViPHP | 5462 Messages

03 sept. 2010, 20:13

on récupère avec $_GET

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 sept. 2010, 09:34

Le code sera effectivement plus propre avec $_GET, puisqu'il pourra être utilisé quelque soit la configuration du serveur (register global)

Ceci étant, lorsque la redirection est faite, as-tu bien la valeur de l'email qui apparait dans la barre d'adresse du navigateur ?
Si ce n'est pas le cas, vérifie le contenu de ta variable $Email avant la redirection (peut être une faute de frappe ou autre ?)

Enfin, pourquoi utiliser un meta html pour la redirection plutôt qu'un header php ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

voblivion
Invité n'ayant pas de compte PHPfrance

04 sept. 2010, 12:20

La valeur de $Email est bien définie.
Ceci dit, j'ai appris php il y a trois jours (et suis comme beaucoup avec ce language, très satisfait des progrès rapidement réalisé), je ne sais donc pas ce que je dois faire de $_GET ?

Si on me donnait que ça comme aide, je dirais que je ne change rien à la première page et que dans ma deuxième page je doit inscrire

Code : Tout sélectionner

<?php //Je récupère $Email $Email=$_GET('Email'); //La parenthèse est un crochet, mais je suis sur mac aujourd'hui et ne trouve pas le crochet //Je l'utilise Echo 'Votre demande a bien été envoyé, votre adresse étant '.$Email.'.'; ?>
Est-ce cela ?

(Merci déjà pour ces réponses)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 sept. 2010, 15:15

C'est bien cela :) (enfin avec les crochets ;))

Le paramètre register global de php (qui je crois devrait disparaitre avec php 6) permet d'accéder simplement mais pas proprement a une variable. Par exemple en écrivant "echo $toto;" je peux afficher une valeur présente en session, dans un cookie, dans l'url ou transmise en post via un formulaire. C'est facile et rapide, mais pas propre (et peu sécurisé) dans la mesure ou l'on ne sait pas auquel mon $toto doit faire référence.

Afin de ne pas dépendre de la configuration du serveur et pour être sur que ton code reste compatible (et potentiellement corriger le problème que tu rencontres ;)), il faut spécifier d'où provient la valeur que tu veux afficher en utilisant pour cela les variables super globales : $_GET si ta variable se trouve dans l'url, $_POST si ta variable a été transmise par la méthode post d'un formulaire, $_SESSION si elle est en session, etc.

Ces variables sont des tableaux indexés (clé => valeur) et il te suffit donc de demandé l'index souhaité pour en récupérer la valeur associée : $_GET['toto'] fait ainsi référence à la variable toto passée dans l'url (et pas à celle en session ou a une autre variable toto qui aurait pu être définie par ailleurs)

En espérant que ce soit plus clair :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

voblivion
Invité n'ayant pas de compte PHPfrance

04 sept. 2010, 15:37

Donc si je comprend bien,

Avec POST je récupère une variable entrée sur la MEME page.
Avec GET je récupère une variable de la page précédente à condition de l'avoir faite passer dans l'URL.
Avec SESSION (plus hasardeux), je récupère n'importe quelle donnée de la session du client.
Suis-je bon à ce stade là, déjà ?

J'ai un petit problème qui, peut-être, peut être réparer de la même façon,
Lorsque l'utilisateur ne rempli pas les champs du formulaire, grâce à une suite de vérification (!empty ... etc), je fais indiquer grace au php la zone non remplie. Le problème c'est que de ce fait, je perd les donnée précédemment inscrites par le client, et celui)ci doit tout réécrire. Est-ce une histoire de GET et de POST là encore ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 sept. 2010, 17:41

Pour être précis :

- Avec POST tu récupères une variable envoyée par un formulaire avec la méthode post (method="post"). Il n'y a pas de contrainte quant à la page, le formulaire peut très bien envoyer les données vers la même page ou vers une autre. Tout ce qui compte, c'est de l'utiliser sur la page qui récupère les données :)
- Avec GET tu récupères une variable qui apparait dans l'URL, soit parce que l'utilisateur a suivi un lien, soit parce qu'il a soumit un formulaire avec la methode get (method="get").
- Avec SESSION tu récupères en effet n'importe quelle donnée que tu as préalablement stocké dans la session. Cela te permet de conserver des information en mémoire tant que l'utilisateur est connecté au site.

En fait, $_GET, $_POST, $_SESSION ou $_COOKIE ne servent qu'à préciser à php d'où provient la donnée à laquelle tu tentes d'accéder :)

Du coup pour répondre à ta question, tu as plusieurs options.

La plus simple est sans doute de traiter les données du formulaire sur la page qui contient le formulaire. En gros :

Code : Tout sélectionner

Si des données ont été envoyées via le formulaire contrôle et traitement des données, redirection de l'utilisateur en cas de succès Sinon y a pas de sinon en fait :) Affichage du formulaire Si des données ont été envoyées via le formulaire et que l'utilisateur n'a pas été redirigé, c'est qu'il y a eu des erreurs et il te suffit de pré-renseigner le formulaire avec les données envoyées.
Une autre solution pourrait consister à utiliser deux pages, une pour le traitement, l'autre pour le formulaire. Dans ce cas, dans la page de traitement, tu fais tes contrôles et en cas d'erreur tu stockes les données en session et tu rediriges l'utilisateur vers le formulaire. Sur le formulaire, si des données sont présentes en session, tu les utilises pour pré-renseigner le formulaire
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

voblivion
Invité n'ayant pas de compte PHPfrance

04 sept. 2010, 19:33

J'ai donc le droit de prérenseigner le formulaire avec les données précédemment remplies ? seulement, je les indique dans value donc ? mais mettre une variable entre les guillemets de value ..

Je crois que je vais terminer du mieux que je peux, et puis je repasserais demander quelques modifications (avec explications, bien évidemment ;) )

Merci encore, maintenant je comprend mieux POST GET et SESSIon