<< Retour au sommaire

 

 

Method, envoi et récupération de données

 

 

 

Le sommaire :

  1. Introduction.
  2. Action Mailto, Rappel du HTML.
  3. Envoi et récupération d’un champ de formulaire passée en paramètre lors de l’ouverture d’une page.
  4. Envoi et récupération de variables passés en paramètres lors de l’ouverture d’une page.
  5. Un exemple avec le jeu PHP 3 questions.

 

 

Introduction

 

Lorsqu’un utilisateur vient de réaliser des opérations sur des formulaires, il existe une multitude de façon pour traiter les différentes données.

En PHP, nous pouvons passer en paramètre des variables et des champs de formulaires lors de l’ouverture d’une page.

 

 


Action Mailto, Rappel du HTML

 

Le HTML permet d’envoyer le contenu de champs de formulaires par l’intermédiaire d’un E-Mail.

Cette opération doit être déterminée dans l’attribut « Action » de la balise « Form ».

 

Voici un exemple de code HTML qui permet d’envoyer un champ unique de formulaire par E-Mail.

 

<html>

<head>

<title>Me contacter</title>

</head>

<body>

<h1>Envoi d'un champ de formulaire par E-Mail</h1>

<form action="mailto:p.boulanger@unadev.com" method="post">

Saisissez votre message ici : <input type="sans" name="message" size="12">

<input type="submit" value="Valider">

</form>

<p>Pressez la touche entrée sur le bouton Valider pour que votre message me soit envoyé.</p>

</body>

</html>

 

 


Envoi et récupération d’un champ de formulaire passée en paramètre lors de l’ouverture d’une page.

 

Lorsque vous exécuter une page à partir d’une page, dans la seconde page, vous pouvez récupérer les champs de formulaires qui ont été saisis dans la première page.

 

Dans le code HTML de la première page, l’attribut « action » de la balise ‘form » permet de préciser le nom de la page à ouvrir lorsque le bouton contenu dans la balise « form » sera validé.

D’ailleurs, la balise « form » contient également l’attribut method pour laquelle lvous devez assigner l’une des valeurs suivantes, « get » ou « post ».

Dans les deux cas, ces deux valeurs de méthode envoient des valeurs, seulement, la méthode « get », utilise l’adresse URL pour transférer les valeurs, tandis que la méthode « post » utilise la barre de titre de la page.

 

Alors, comment déterminer la méthode à utiliser ?

En fait, lorsque vous transférez des valeurs en provenance de champs de formulaires, vous devez utiliser la méthode « post ».

Par conséquent, lorsque vous utiliser un lien, vous devez impérativement récupérer les valeurs transférée par la méthode « get ».

D’ailleurs, en PHP, l’instruction qui permet d’exécuter une page est header.

La syntaxe :

header("location:NomDuFichier");

Mais aussi :

header("location:NomDuFichier?Variable");

Dans la première syntaxe, nous n’avons pas passé de paramètre pour l’exécution du fichier NomDuFichier.php. Dans la deuxième syntaxe, nous avons passé la variable NomVariable en paramètre. Le nom du fichier à exécuter et le nom de la variable doivent être séparés par un point d’interrogation.

 

Voici un exemple qui exécute le fichier suite.php en lui passant le paramètre NombreDEClients :

header("location:suite.php?NombreDeClients");

 

Voici maintenant un exemple concret.

Nous avons un premier fichier index.php qui demande à l’utilisateur de saisir son prénom.

Le prénom saisi est ensuite envoyé au script traitement.php en utilisant la méthode « post ».

Le fichier traitement.php affecte la valeur « oui » dans la variable $intitulée CommeMoi si le prénom et Philippe, sinon, il affecte la valeur « non ». Ensuite, il exécute le fichier affiche.php en lui passant en paramètre le contenu du résultat et par l’intermédiaire de la méthode « get ».

Le fichier affiche.php affiche le résultat.

 

Voici le code du fichier index.php :

 

<html>

<head>

<title> bonjour </title>

</head>

<body>

<h1>Saisie de votre prénom</h1>

<p>Pour que nous fassion davantage connaissance, </p>

<form action="traitement.php" method="post">

Saisissez votre prénom ici :<br>

<input type="text" name="Prenom">

<br>

<input type="submit" value="Envoyer">

<p>Merci de votre visite !</p>

</body>

</html>

 

Voici le code du fichier traitement.php :

 

<?php

// récupération du champ de formulaire Prenom par l'intermédiaire

// de la méthode post

extract($_POST,EXTR_OVERWRITE);

// maintenant la variable locale =Prenom contient le champ de formulaire Prenom

if ($Prenom == "Philippe")

{ $CommeMoi = "oui"; }

else

{ $CommeMoi = "non"; }

 

// Désormais, si l'utilisateur avait saisie Philippe dans le champ de formulaire Prenom, 

// la variable $CommeMoi contient la chaîne de caractères oui,

// sinon, elle contient la chaîne de caractères non.

// exécution du fichier affiche.php

// en passant en paramètre le contenu de la variable $CommeMoi dans Resultat

header("location:affiche.php?Resultat=$CommeMoi"); ?>

 

Voici le code du fichier affiche.php :

 

<html>

<head>

<title> rebonjour </title>

</head>

<body>

<h1>Résultat de la saisie</h1>

<?php

// récupération de la variable Resultat

extract($_GET,EXTR_OVERWRITE);

// maintenant, la variable Resultat passé en paramètre est devenue

// la variable locale $Resultat

// Affichage du résultat

if ($Resultat=="oui")

{ // Le prénom saisi est donc Philippe

  echo "Oh $Resultat, c'est bien, vous vous appelez Philippe !"; }

else

{ // Le prénom saisi n'est pas Philippe

  echo "zut de zut, $Resultat $Resultat $Resultat, vous ne vous appelez pas Philippe..."; } ?>

</body>

</html>

 

En conclusion, pour transférer le contenu de champs de formulaire saisis par un utilisateur, vous devez d’abord créer une première page contenant un bloc « form «  en HTML.

Le bloc « form » doit contenir le nom de la page à ouvrir par l’intermédiaire de l’attribut action.

La méthode de transfert doit être précisée dans l’attribut method, et bien sûr, nous prendrons « post ».

Dans le bloc form, donc, entre les balises <form> et </form>, vous devez saisir le nom des champs, leur type, la taille etc, et ce, par l’intermédiaire des différents attributs de la balise <input>.

Vous devez également prévoir un bouton afin de déclancher la validation de la saisie, par conséquent, l’exécution de l’attribut action.

 

Dans le fichier ouvert, celui qui est précisé justement dans l’attribut action de la balise form, vous devez récupérer les valeurs des champs en saisissant la fonction PHP suivante :

<?php extract($_POST,EXTR_OVERWRITE); ?>

Remarque : la fonction extract est écrite en minuscule, tandis que ses deux paramètres sont en majuscule.

 

Dès lors que cette ligne est écrite, vous pouvez utiliser les valeurs saisies dans les champs de formulaires de la page qui vient d’être refermée.

Il suffit tout simplement de récupérer le nom des différents champs que vous aviez définis dans les attributs « name ».

Toutefois, avec une particularité logique, c’est que, comme vous récupérez ces valeurs en PHP, vous devez impérativement placer le signe dollar devant le nom de chaque champ de formulaire, devenu maintenant variable.

 

Voici un exemple :

Le premier fichier, index.php, demande à l’utilisateur de saisir un mot de passe et de valider le bouton intitulé « Valider ».

Une deuxième page est ouverte, elle se nomme verification.php, elle affiche le résultat de la saisie du mot de passe.

Si le mot de passe est « php », cette fenêtre affiche un message de succès, sinon, elle affiche un message d’erreur…

 

Voici le code du fichier index.php :

 

<html>

<head>

<title> Mot de passe</title>

</head>

<body>

<h1>Bienvenue</h1>

<p>Vous devez saisir le mot de passe pour accéder à la page d'accueil</p>

<br>

<form method="post" action="verification.php">

Mot de passe :<input type="text" name="MotDePasse" size="12">

<br>

<input type="submit" value="Valider">

</form>

</body>

</html>

 

Voici maintenant le code du fichier verification.php :

 

<html>

<head>

<title> Résultat de la saisie du mot de passe</title>

</head>

<body>

<h1>D'après vous ?</h1>

<?php

extract($_POST,EXTR_OVERWRITE);

// vérification de la validité du mot de passe

if ($MotDePasse == "php")

{ echo "Félicitation"; }

else

{ echo "dommage, mais $MotDePasse n'est pas le bon mot de passe"; } ?>

</body>

</html>

 

 


Envoi et récupération d’une variable passée en paramètre lors de l’ouverture d’une page.

 

A partir du code PHP, vous pouvez activer une page et, optionnellement, passer une variable en paramètre.

Nous allons tout d’abord étudier l’ouverture d’une page sans paramètres.

 

La syntaxe :

header(«location:NomDeLaPage»);

 

header est le nom de l’instruction.

NomDeLaPage est le nom du fichier à ouvrir…

 

En reprenant l’exemple du chapitre précédent, nous allons modifier le fichier verification.php qui ne jouera plus tout à fait le même rôle…

Dans l’exemple précédent, on devait saisir un mot de passe dans un formulaire puis valider le bouton intitulé « Valider ».

Le fichier verification.php était exécuté, il affichait le résultat de la validité du mot de passe saisi.  

Maintenant, ce fichier est modifié, il n’affiche plus rien à l’écran, il doit jouer le rôle de traitement de situation.

Le fichier index.php quant à lui, ne change pas !

Désormais, lorsque le fichier verification sera exécuté, il testera la validité du mot de passe, si ce dernier est valide, il ouvrira la page site.php, dans le cas contraire, il ouvrira à nouveau la page index.php pour que l’utilisateur retente sa chance.

 

Voici donc le contenu des 3 fichiers, index, verification et site.

 

Le code du fichier index.php :

 

<html>

<head>

<title> Mot de passe</title>

</head>

<body>

<h1>Bienvenue</h1>

<p>Vous devez saisir le mot de passe pour accéder à la page d'accueil</p>

<br>

<form method="post" action="verification.php">

Mot de passe :<input type="text" name="MotDePasse" size="12">

<br>

<input type="submit" value="Valider">

</form>

</body>

</html>

 

Le code du fichier verification.php :

 

<?php

extract($_POST,EXTR_OVERWRITE);

// vérification de la validité du mot de passe

if ($MotDePasse == "php")

{ // ouverture de la page site.php

  header("location:site.php"); }

else

{ // le mot de passe est incorrect, retour à la page d'accueil

  header("location:index.php"); } ?>

 

Le code du fichier site.php :

 

<html>

<head>

<title> bonjour et bienvenue sur le site</title>

</head>

<body>

<h1>Succès !</h1>

<p>vous venez de saisir le bon mot de passe, bravo ! </p>

</body>

</html>

 

 

Maintenant nous allons utiliser l’instruction header en passant en paramètre une variable.

La syntaxe :

header("location:PageAOuvrir?Variable=Valeur");

 

description :

FichierAOuvrir est le nom du fichier à ouvrir.

Variable est le nom de la variable à passer en paramètre et valeur son contenu.

 

Dans le fichier cible spécifié dans l’instruction header, vous devez impérativement écrire la fonction suivante :

<?php extract($_GET,EXTR_OVERWRITE); ?>

Sinon, vous ne pourrez pas récupérer la variable passée en paramètre.

Ici, nous avons utilisé la méthode Get et non pas la méthode POST.

Dans la syntaxe du header, le nom de la variable n’était pas précédé du signe dollar, par contre, dans le fichier cible, vous devez précéder le nom de la variable par ce signe.

 

 

Voici un exemple :

Un premier fichier index.php est exécuté.

Ce fichier n’affiche rien, il ouvre aussitôt le fichier suite.php en lui passant en paramètre la variable Message qui contient la chaîne de caractères coucou.

Le fichier suite.php affiche un message ainsi que le contenu de la variable Message.

 

Voici le code du fichier index.php :

 

<?php

// exécute le fichier suite.php

// en passant en paramètre la variable Message qui contient la valeur coucou

header("location:suite.php?Message=coucou"); ?>

 

Voici le code du fichier suite.php :

 

<?php extract($_GET,EXTR_OVERWRITE); ?>

<html>

<head>

<title> bonjour </title>

</head>

<body>

<?php // affichage du contenu de la variable Message passée en paramètre

echo $Message." !"; ?>

<br>

<p>bonjour et bonne visite !</p>

</body>

</html>

 

 


Un exemple avec le jeu PHP 3 questions

 

Je vous propose maintenant un exemple en réalisant un petit jeu.

Voici l’organisation de l’exécution du jeu :

  1. Exécution de la page index.php, demande à l’utilisateur de saisir son prénom.
  2. Exécution du script treitement.php, si le prénom est omis, exécution de la page erreur.php et redirection vers index.php, c’est une boucle. Si le prénom est correct, exécution de la page qquestion01.php.
  3. Vous êtes dans la page question01.php, l’utilisateur répond, puis exécution du script traitement.php. Si la réponse est incorrecte, arrêt du jeu et exécution de la page perdu.php. Si la réponse est correcte, exécution de la page question02.php.
  4. Vous êtes dans la page question02.php. L’utilisateur répond, exécution du script traitement.php. Si la réponse est incorrecte, arrêt du jeu et exécution de la page perdu.php. si la réponse est correcte, exécution de la page question03.php.
  5. Vous êtes dans la page question03.php. L’utilisateur répond, exécution du script traitement.php. Si la réponse est incorrecte, arrêt du jeu, exécution de la page perdu.php. Si la réponse est correcte, victoire, le jeu est fini, exécution de la page victoire.php.

 

Le prénom de l'utilisateur est mémorisé dans la variable globale $Reponse et sera affiché dans toute les pages…

 

Pour tester le jeu en ligne, c’est ici :

Essayer la page >>

 

Si vous souhaitez télécharger directement les pages, voici l’adresse URL du téléchargement :

Télécharger l'exemple

 

Voici le code du fichier index.php :

 

<?php

SESSION_START();

$_SESSION["NumReponse"] = 0; ?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN"

"http://www.w3.org/TR/REC-html40/frameset.dtd">

<html>

<head>

<LINK rel=STYLESHEET href="styles.css" type="text/css">

<title> bonjour </title>

</head>

<body>

<table border="1">

<tr>

<td>

<h1>Bienvenue sur les pages du jeu</h1></td>

</tr>

<tr>

<td>

<p>Le but est de répondre à 3 question.</p>

<p>Mais pour débuter le jeu, veuillez tout d'abord saisir votre prénom puis cliquer sur le bouton GO.</p></td>

</tr>

<tr>

<td><form action="traitement.php" method="post">

Saisissez votre prénom ici : <input type="text" size="12" name="Prenom">

<br>

<input type="submit" value="GO !">

</form></td></tr>

</table>

</body>

</html>

 

Voici le code du fichier script traitement.php :

 

<?php

// Code du script traitement.php

 

// Introduction des variables globales dites de session

SESSION_START();

// Récupération des champs de formulaires de la page précédente

extract($_POST,EXTR_OVERWRITE);

 

// Traitement des différents cas de figure

// par rapport au contenu de la variable contenant la réponse

switch ($_SESSION["NumReponse"]) {

case 0 :

// La page précédente était index.php

if ($Prenom=="")

{ // L'utilisateur a oublié de saisir son prénom

// Ouverture de la page d'erreur erreur.php

  header("location:erreur.php"); }

else

{ // Le prénom est présent

// Affectation du prénom dans une variable globale

  $_SESSION["Prenom"]=$Prenom;

// Ouverture de la page question01.php 

header("location:question01.php"); }

break;

case 1 :

// La page précédente était question01.php

// Vérification de la validité de la réponse

if ($Reponse=="Qu'il ait")

{  // La réponse est correcte, ouverture de la page question02.php

  header("location:question02.php"); }

else

{ // Mauvaise réponse, ouverture de la page perdu.php

  header("location:perdu.php"); }

  break;

case 2 :

// La page précédente était question02.php

// Vérification de la validité de la réponse

if ($Reponse=="U A, L'unité astronomique")

{ // La réponse est correcte, ouverture de la page question03.php

  header("location:question03.php"); }

else

{ // La réponse est incorrecte, ouverture de la page perdu.php

  header("location:perdu.php"); }

break;

case 3 :

// La page précédente était question03.php

// Vérification de la validité de la réponse

if ($Reponse=="Le treizième")

{ // La réponse est correcte, ouverture de la page victoire.php

  header("location:victoire.php"); }

else

{ // La réponse est incorrecte, ouverture de la page perdu.php

  header("location:perdu.php"); }} ?>

 

Voici le code du fichier question01.php :

 

<?php SESSION_START(); ?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN"

"http://www.w3.org/TR/REC-html40/frameset.dtd">

<html>

<head>

<?php $_SESSION["NumReponse"]=1; ?>

<LINK rel=STYLESHEET href="styles.css" type="text/css">

<title>Question numéro 1</title>

<bgsound src="SonSucces.wav">

</head>

<body>

<table border="1">

<tr>

<td><?php echo "Salut ".$_SESSION["Prenom"]; ?></td>

</tr>

<tr>

<td><h1>Première question</h1></td>

</tr>

<tr>

<td>Comment conjugue-t-on l'auxiliaire avoir à la troisième personne du singulier du subjonctif présent ?</td>

</tr>

<tr>

<td><form action="traitement.php" method="post">

<select name="Reponse">

<option selected>Qu'il eut</option>

<option>qu'il fut</option>

<option>Qu'il soit</option>

<option>Qu'il ait</option>

<option>Qu'il a</option>

</select></td>

</tr>

<tr>

<td><input type="submit" value="Valider la réponse">

</form></td>

</tr>

</table>

</body>

</html>

 

Voici le code du fichier question02.php :

 

<?php SESSION_START(); ?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN"

"http://www.w3.org/TR/REC-html40/frameset.dtd">

<html>

<head>

<?php $_SESSION["NumReponse"]=2; ?>

<LINK rel=STYLESHEET href="styles.css" type="text/css">

<title>Question numéro 2</title>

<bgsound src="SonSucces.wav">

</head>

<body>

<table border="1">

<tr>

<td><?php echo "Pas mal ".$_SESSION["Prenom"]." !"; ?></td>

</tr>

<tr>

<td><h1>Deuxième question</h1></td>

</tr>

<tr>

<td>En astronomie, la distance entre le Soleil est la Terre est d'environ cent soixante millions de kilomètres. Quel nom donne-t-on à cette disteance ?</td>

</tr>

<tr>

<td><form action="traitement.php" method="post">

<select name="Reponse">

<option selected>D T S, Distance Terre Soleil</option>

<option>U A, L'unité astronomique</option>

<option>A L, L'année lumière</option>

<option>D N, La distance de NORTON</option>

<option>G C, La grande ceinture</option>

</select></td>

</tr>

<tr>

<td><input type="submit" value="Valider la réponse">

</form></td>

</tr>

</table>

</body>

</html>

 

Voici le code du fichier question03.php :

 

<?php SESSION_START(); ?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN"

"http://www.w3.org/TR/REC-html40/frameset.dtd">

<html>

<head>

<?php $_SESSION["NumReponse"]=3; ?>

<LINK rel=STYLESHEET href="styles.css" type="text/css">

<title>Question numéro 3</title>

<bgsound src="SonSucces.wav">

</head>

<body>

<table border="1">

<tr>

<td><?php echo "Pas mal ".$_SESSION["Prenom"]." !";

echo "<br>Allez, ".$_SESSION["Prenom"]." un dernière effort !"; ?></td>

</tr>

<tr>

<td><h1>Troisième question</h1></td>

</tr>

<tr>

<td>A PARIS, dans quel arrondissement est située la place d'Italie ?</td>

</tr>

<tr>

<td><form action="traitement.php" method="post">

<select name="Reponse">

<option selected>Le cinquième</option>

<option>Le treizième</option>

<option>Le quinzième</option>

<option>Le dix-septième</option>

<option>Le dix-huitième</option>

</select></td>

</tr>

<tr>

<td><input type="submit" value="Valider la réponse">

</form></td>

</tr>

</table>

</body>

</html>

 

Voici le code du fichier perdu.php :

 

<?php SESSION_START(); ?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN"

"http://www.w3.org/TR/REC-html40/frameset.dtd">

<html>

<head>

<LINK rel=STYLESHEET href="styles.css" type="text/css">

<title> bonjour </title>

<bgsound src="SonEchec.wav">

</head>

<body>

<h1>Résultat décevant !</h1>

<?php

echo "Désolé, vous avez perdu à la question numéro ".$_SESSION["NumReponse"];

echo "Franchement, ".$_SESSION["Prenom"].", vous êtes lamentables !";?>

<br>

<p><a href="index.php">Recommencer le jeu</a></p>

</body>

</html>

 

Voici le code du fichier erreur.php :

 

<html>

<head>

<title> Erreur</title>

<bgsound src="SonPrenomOmis.wav">

</head>

<body>

<h1>Erreur de démarage du jeu</h1>

<p>Attention, on vous a demandé de saisir votre prénom, alors, pourquoi ne le faites-vous pas ?</p>

<p><a href="index.php">Retourner dans la page de démarrage</a></p>

</body>

</html>

 

Voici le code du fichier style.css :

 

a { font-family:"Times New Roman";font-size:"16pt";color:"blue" }

h1 { font-family:"arial";font-size:"16pt";text-align:center }

h2 { font-family:"arial";font-style :"italic";font-size:"14pt";text-align:center }

h3, h4, h5, h6 { font-family:"arial";font-style:"italic";

font-size:"13pt" }

p {text-align:"justify";font-size:"12pt" }

 

Philippe BOULANGER