Method, envoi et récupération
de données
Le sommaire :
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.
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>
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>
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>
Je vous propose
maintenant un exemple en réalisant un petit jeu.
Voici l’organisation
de l’exécution du jeu :
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 :
http://jaws.unadev.com/PHP/Jeu3Questions/index.php
Si vous souhaitez
télécharger directement les pages, voici l’adresse URL du téléchargement :
http://jaws.unadev.com/PHP/Jeu3Questions/JePHP3Questions.rar
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