NoShade.net est en vente — Contactez nous si vous êtes intéressé
Le siteTutoriauxInterviews
icone RSS NoShade.net

Accueil » Tutoriaux » PHP » Chapitre 3.1 : Transmission de données

Les tutoriaux Php

3.1 - Transmission de données

Les variables $_POST

Nous allons voir un exemple de variables un peu spéciales. En effet, elles vont nous servir à récupérer le contenu d'un champ d'un formulaire HTML pour l'exploiter en PHP. Cette variable un peu spéciale et accessible dans tous vos fichiers PHP se nomme $_POST (facile à retenir).

Envoi de données à travers un formulaire

Vous vous souvenez de l'exercice de la partie 2.4? À la fin de ce chapitre, je vous disais que la variable qui contenait l'âge du visiteur était un peu trop statique...
Et bien nous allons reprendre cet exemple pour savoir l'âge véritable du visiteur (à condition qu'il ne triche pas en rentrant son âge). :)

Pour cela, il va falloir mettre en place un petit formulaire en HTML. Ce dernier se constituera d'un champ de texte et d'un bouton envoyer.
Voici le formulaire :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Titre du site</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>
    <p>
    <form method="post" action="age.php">
    Quel est votre âge ?<br />
    <input type="text" name="age_visiteur" /><br />
    <input type="submit" value="Envoyer"/>
    </form>
    </p>
    </body>
</html>

Normalement ce code source ne doit pas vous surprendre. On met en place un formulaire qui agira sur notre page (age.php par exemple) et on le construit petit à petit.

Pour récupérer son âge une fois le formulaire envoyé, nous allons vérifier s'il l'a bien saisi : pour ça, la fonction isset() convient parfaitement. :)
Ensuite, on l'affichera à l'aide de la variable $_POST que l'on utilisera comme une variable classique. Rien ne vaut un code source commenté pour faire des explications un peu plus détaillées :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Titre du site</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>
    <p>
        <--! Votre formulaire -->
        <form method="post" action="age.php">
            Quel est votre âge ? <br />
            <input type="text" name="age_visiteur" /><br />
            <input type="submit" value="Envoyer" />
        </form>
    </p>
    <p>
    <?php
        
if (isset($_POST['age_visiteur'])) //Si le visiteur a saisi son âge
        
{
            
// On affiche tout ça dans un echo
            
echo 'Bonjour, vous avez ' $_POST['age_visiteur'] . ' ans.';
        }
    
?>
    </body>
</html>

Alors, tout d'abord on a la condition. On vérifie si on a bien rempli le champ qui a pour nom "age_visiteur" en appliquant la fonction isset() à la variable $_POST['age_visiteur']. En fait, cette variable vaut le texte qu'on rentre dans la zone de texte. Ainsi, on peut très bien l'utiliser dans une boucle (vous verrez ça un peu plus tard), une condition (comme on vient de le faire), un echo etc. Vous remarquerez qu'elle a une syntaxe un peu particulière. Détaillons tout ça :

$_POST : Il faut indiquer à PHP que c'est une variable qui vaut l'âge du visiteur saisi dans la zone de texte du formulaire.
['age_du_visiteur'] : Pour que la variable $_POST sache sur quel élément du formulaire elle doit travailler, on lui dit qu'il s'agit de celui qui a pour nom "age_du_visiteur". Le nom de la zone de texte doit être, comme vous le constatez, entouré de crochets et d'apostrophes (ou guillemets).

Retournons à notre script si vous le voulez bien. :)
Après la condition donc, on affiche l'âge du visiteur. On utilise la variable $_POST['age_du_visiteur'] comme une variable normale. Seulement, vous ne l'avez pas créée. Et pourtant, elle est là, sous vos yeux ! En fait, dès que le visiteur appuie sur le bouton Envoyer, une variable $_POST['age_du_visiteur'] est crée sur la page de destination du formulaire. C'est là un des grands avantages de ce type de variables, nous n'avons pas besoin de nous soucier de sa création : tout ça se fait dans les entrailles de PHP!

Avouez que les variables $_POST ne sont pas bien compliquées à comprendre. :)
Ce qui est difficile au début, c'est leur syntaxe un peu particulière (les crochets [ ]) mais on s'y habitue (très) vite.
Pensez à faire des essais chez vous qui suivent le même modèle que mon exemple pour bien vous familiariser avec tout ça avant de vous attaquer à l'exercice qui va suivre. ;)

Exercice : Accès à une page par mot de passe

Nous voilà au moment crucial de ce tutoriel : l'exercice !
On va en effet réutiliser ce qu'on a appris pour faire notre premier script éutileé pour notre site : une protection par mot de passe. Admettons que vous ayez une partie privée pour gérer votre site, ça serait dommage que tout le monde puisse y accéder non? :D
Allez, vous êtes prêts? Voici l'énoncé :

On veut donc protéger une page par un mot de passe. On va considérer que la page en question s'appelle "motdepasse.php". Alors, le but de notre script est de vérifier SI le mot de passe entré par l'utilisateur est correct. Si c'est le cas, ALORS on lui affiche ce qu'il doit voir. SINON, on affiche une nouvelle fois le formulaire avec un message "Mot de passe incorrect" jusqu'à ce qu'il trouve le bon mot de passe.

Il va donc nous falloir un champ de texte de type "password" et un bouton envoyer... et c'est tout. :)
D'ailleurs, combien de variables va-t-on utiliser? 10? 20? Une seule : $motdepasse qui contiendra le mot de passe entré par l'utilisateur pour vérifier si ce dernier est correct.

C'est un script oh combien utile et très simple à réaliser, mais ne vous pressez pas... Si vous sentez des coups de pompes, ne vous entêtez pas à coder pour tout supprimer dans un élan de colère (ça ne servirait à rien). :D
Si vraiment vous n'y arrivez pas, regardez la correction mais... ce n'est pas beaucoup plus compliqué que celui que j'ai utilisé pour vous expliquer l'utilisation des variables $_POST ci-dessus.

Bonne chance! :)

















Correction

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

    <head>
        <meta http-equiv="content-type" content="text/html;charset=iso-8859-1"/>
        <title>Mot de passe</title>
    </head>

    <body>

<?php
    
// Si il y a eu un envoi de mot de passe
    
if (isset($_POST['mot_de_passe']))
    {    
// Si le mot de passe est 'noshade'
        
if ($_POST['mot_de_passe'] == 'noshade')
        {
        echo 
'<p>Bienvenue à toi l\'admin!</p>';
        }
        else 
// Sinon, c'est que le mot de passe est incorrecte
        
{
?>
        <p>Mot de passe incorrect!</p>
            <form id="envoi_pass" action="index.php" method="post" name="envoi_pass">
                <input type="password" name="mot_de_passe" size="24"/>
                <input type="submit" name="envoyer" value="Envoyer"/>
            </form>
<?php
        
}
    }

    else 
// Si il n'y a eu aucun mot de passe d'envoyé
    
{
?>
        <br />
        <br />
        <form id="envoi_pass" action="index.php" method="post" name="envoi_pass">
            <input type="password" name="mot_de_passe" size="24"/>
            <input type="submit" name="envoyer" value="Envoyer"/>
        </form>
<?php
    
}
?>
    </body>

</html>

Normalement, vous ne devriez pas être surpris par la correction de ce script. Si jamais c'est le cas, ne paniquez pas : l'essentiel n'est pas de savoir coder tout seul dans son coin (ça on y arrive progressivement, en pratiquant) mais de savoir s'ouvrir à la correction. Ainsi, si vous comprenez la correction, vous êtes en théorie capable de reproduire ce script.

Séparons le code en deux parties :

1) D'un coté, on a la vérification, qui est composée de deux conditions : si le visiteur a rempli la zone de texte et si le mot de passe entré est "noshade", alors on peut lui afficher la page cachée.
Sinon, on re-affiche le formulaire avec une alterne "Mot de passe incorrect!".

2) Si le visiteur arrive sur la page pour la première fois, il n'y a donc aucune variable $_POST, on lui affiche donc le formulaire. S'il a rentré un mot de passe qui est incorrect, on lui affiche un message d'erreur en prime. :)

Voilà, ce n'était pas bien compliqué. Si vous avez eu du mal : persévérez, continuez à lire le cours et surtout à bien faire des tests chez vous, même s'ils semblent bêtes et inutiles. Dites-vous que c'est comme ça que vous arriverez à faire un livre d'or, un système de news ou tout ce que vous voulez (sauf le café, mais on y travaille)...

Allez, faites une pause et lisez la rubrique suivante : nous allons apprendre à manier les variables $_GET ... vous allez voir, ça en vaut également vraiment la peine. :)

Les variables $_GET

Allez, qu'est-ce que c'est encore que cette bestiole là?
Bon, en grand surfeur que vous êtes, vous avez certainement déjà du remarquer des choses bizarres dans la barre d'adresse de votre navigateur, quand vous passez d'une page à l'autre sur certains sites...

Prenons l'exemple d'une URL de la version précédente de NoShade :

http://www.noshade.net/?p=p_tutoriaux&sujet=CSS&id=21
Pour votre information personnele, la version actuelle de NoShade utilise ce que l'on appele "l'URL re-writing", méthode que vous apprendrez à utiliser bien plus tard et qui permet d'utiliser des adresses dites "propres", ce qui est entre autre mieux pour le référencement.

Nous avons des points d'interrogation ( ? ) et des signes ( & ), avec des ( = ) ... bizarre, non?
Pour cette adresse-ci, nous avons en fait trois variables $_GET.

?p = p_tutoriaux
&sujet = CSS
&id = 21

La première variable $_GET est toujours affichée avec un point d'interrogation ( ? ), tandis que toutes les suivantes s'utilisent avec un signe ( & ).

Mais, à quoi ça sert concrètement tout ça?
C'est très simple, grâce à ces petites indications contenues dans l'adresse du navigateur, nous allons pouvoir créer des actions dans notre code PHP.

Un contenu différent

Un exemple très simple consiste en l'affichage de contenu différent en fonction de ces variables. Un premier exemple toute suite!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <meta http-equiv="Content-Language" content="fr" />
        <title>Essais de variables GET</title>
    </head>
<body>

<!-- On crée un petit menu, incluant des variables $_GET dans les liens -->
<a href="./index.php?affichage=accueil">Accueil</a> | 
<a href="./index.php?affichage=passions">Mes passions</a> | 
<a href="./index.php?affichage=journal">Mon journal</a> | 
<a href="./index.php?affichage=contact">Me contacter</a>

<hr />

<?php
    
// Si on a une variable GET 'affichage'
    
if (isset($_GET['affichage']))
    {
        
// Si cette variable vaut 'accueil'
        
if ($_GET['affichage'] == 'accueil')
        {
        echo 
'Bienvenue sur mon petit site!';
        }
        
// Si cette variable vaut 'passions'
        
elseif ($_GET['affichage'] == 'passions')
        {
        echo 
'J\'adore jouer de la flûte!';
        }
        
// Si cette variable vaut 'journal'
        
elseif ($_GET['affichage'] == 'journal')
        {
        echo 
'Mardi : On a été au centre commercial avec maman.<br />
                Lundi : On a joué à la pétanque avec José!<br />
                Dimanche : On a visité un musée bien sympa...'
;
        }
        
// Si cette variable vaut 'contact'
        
elseif ($_GET['affichage'] == 'contact')
        {
        echo 
'Voilà mon email : truc@machin.com';
        }


        
// Si elle vaut autre chose
        
else
        {
        echo 
'Page inexistante!';
        }
    }

    
// Si il n'y a pas de variable GET
    
else
    {
    echo 
'Bienvenue sur mon petit site!';
    }
?>

</body>
</html>

Pfiou, il est long ce code! :D
Bon, si vous essayez ça chez vous (enregistrez ce code dans un fichier nommé "index.php"), vous allez mieux comprendre! :)

Nous avons donc en premier lieu un simple menu, avec quatre rubriques. Dans les liens de ce menu, on peut constater l'existence de variables GET (rappelez vous, les points d'interrogations ...).
En second lieu, nous avons un code PHP avec des conditions.
On vérifie d'abord si il y a une variable $_GET, puis, nous analysons son résultat.
Si celle-ci vaut "accueil", c'est donc que le visiteur à cliqué sur "Accueil" dans le menu, et qu'il souhaite donc afficher le contenu de la page d'accueil. (hé oui, tout simplement!)
Si celle-ci vaut "passions", c'est que le visiteur à cliqué sur "Mes passions" dans le menu, on affiche donc le contenu correspondant... et ainsi de suite! :)

Alors, là, vous vous dites : "Génial ça!! par contre, pour mettre à jour le site, c'est vraiment pas pratique, et pire encore si les pages sont longues... et en plus on doit répéter deux fois le contenu de la page d'accueil... non, bon, en fait il est complètement nul ton script!"

Là je vous répondrais que vous avez raison, complètement! :D Mais! (oui, il y a un "mais"!), que vous verrez dans le chapitre suivant comment remédier à tout cela, et rendre donc ce code beaucoup plus utile et productif!

Afficher des messages d'avertissement

Voyons ensemble un autre cas d'utilisation de ces variables, il s'agit de l'affichage de messages d'avertissements dans une page.
Je vais vous laisser vous-même écrire le code, mais ne vous abandonne pas sans vous donner quelques explications pour vous guider.

Imaginons, un site où l'on peut se connecter/déconnecter à une partie réservée aux membres de l'équipe du site.
Nous voulons, à la connexion du membre, lui souhaiter la bienvenue, en re-affichant son pseudo (tant qu'on y est), histoire de réviser les variables $_POST.

On va donc créer une page avec un simple petit formulaire pseudo et mot de passe.
Une fois l'accès autorisé (si le pseudo + mot de passe sont correctes), nous lui afficherons donc un message "Bienvenue $pseudo", puis, un lien "Déconnexion", pour qu'il puisse sortir et revenir à la page du formulaire de connexion, avec, en prime, un message "Vous avez bien été déconnecté, à bientôt!".

Vous pouvez le faire en un seul fichier, ou en deux fichiers, comme vous voulez, les deux sont possibles. :)
Bon courage! ;)

Avant d'attaquer le chapitre suivant, je pense qu'il est vraiment important d'arriver à réaliser ce script seul, ce n'est pas très compliqué, prenez juste le temps de penser à "Comment je vais procéder?" avant de vous lancer tête baissée! :)

Une fois ce script réalisé et fonctionnel, vous pouvez passer à la suite.

Par : Legibe & Vinchz, le 5 septembre 2006

Sommaire du cours PHP

» Sommaire
» 1.1 Avant propos
» 1.2 Que faut'il pour faire du php?
» 2.1 Écrire du texte en PHP
» 2.2 Les commentaires, les variables et les calculs
» 2.3 Les conditions
» 2.4 La concaténation + Évaluation
» 3.1 Transmission de données
» 3.2 Les fonctions + Dates et heures
» 3.3 Les Arrays (tableaux) + les boucles
» 4.1 Les bases de données
» 4.2 Lecture dans une BDD
» 4.3 Enregistrer dans une BDD
» 4.4 Modifier le contenu d'une table
» 4.5 Supprimer du contenu dans une BDD
» 4.6 Statistiques
» 5.1 Les sessions et cookies
» 5.2 Exercice : Un système de login multi-membres