PHP : Le tutoriel pour grands débutants pressés

Image non disponible


précédentsommairesuivant

IV. PHP ETAPE 4

Vous avez un formulaire qui propose des saisies au client (client au sens informatique du mot, par opposition à serveur). Disons une dizaine.
Vous vous en souvenez, cela créera une dizaine de variables $_POST['nom_de_l_input'].
Il se trouve que PHP range automatiquement ces variables dans un tableau. Nous y reviendrons à la fin de cette étape.

Commençons par voir ce qu'est un tableau :

IV-1. Les tableaux simples

Un tableau, c'est un moyen de stocker plusieurs variables, selon un plan qui vous paraît logique.

C'est comparable à un meuble avec ses tiroirs.
Dans le tiroir 0, (oui, le tableau commence par le tiroir zéro), vous rangez la variable lundi par exemple, dans le tiroir 1, vous rangez la variable mardi etc.

En informatique, on appelle index ou indice le numéro de tiroir (la position de la variable dans le tableau), et valeur la valeur de la variable entreposée.


Voici la syntaxe d'un tableau tout simple

On construit le tableau des jours de la semaine
Sélectionnez
<?php
$semaine=array('lundi','mardi','mercredi','jeudi','vendredi','samedi','dimanche');
?>


Par cette simple ligne, vous venez de construire un tableau (qui vous le remarquerez, est une variable en lui même puisqu'il commence par $, mais une variable complexe, organisée).

$semaine est le nom du tableau entier.

Vous lui avez affecté des valeurs, (via la commande array, il sait que c'est un tableau).
Et ici, par défaut, l'index commence à 0, donc dimanche aura pour index... 6 et non 7.

Une fois construit ce tableau, comment convoquer une valeur ?
$semaine[2] sera...mercredi et ainsi de suite... selon la règle : $semaine[index]

Vous pouvez le vérifier en tapant la commande suivante :

 
Sélectionnez
<?php 
echo $semaine[2]; 
?>

Bien sûr ici, nous avons construit un tableau contenant des variables string (les jours de la semaine) et des indices numériques (0,1,2 etc...).

On peut tout-à-fait ranger des valeurs numériques dans un tableau.
Ainsi ce tableau qui stocke quelques années marquantes de l'histoire de France...

Histoire de France
Sélectionnez
<?php
$dates=array(1789,1830,1848,1851,1871,1914,1918,1936,1939,1945,1958,1968);   
echo $dates[3]; 
?>

La commande echo renverra... 1851 ici.

IV-2. Les commentaires

Au sein de votre code, il est bon de poser parfois quelques commentaires, quelques lignes d'explication qui ne seront bien entendu pas considérées par la machine comme des lignes de programmation à exécuter mais des lignes qu'elle pourra zapper, et qui ne sont destinées qu'au programmeur, qui remet le nez dans son programme parfois dix ans après et ne sait plus pourquoi ou comment il a conçu son code.

Parfois, c'est une autre personne qui hérite du programme. Dans tous les cas, il faut donc commenter son code.

Deux sortes de syntaxe pour des commentaires en PHP
  • Petit commentaire sur une seule ligne // en début de ligne
  • Commentaire sur plusieurs lignes /* au début et */ en dernier...
Comment rédiger des commentaires dans son code
Sélectionnez
<?php
/*
TOUS LES TABLEAUX
TOUTES LES DATES
TOUS LES PAYS
*/
 
//tableau dates marquantes en France
 
$datesF=array(1789,1830,1848,1851,1871,1914,1918,1936,1939,1945,1958,1968);
 
//tableau dates marquantes aux Etats-unis
 
$datesUS=array(1861,1865,1917,1918,1929,1934,1941,1945,1959,1975);
?>


PS : à partir de maintenant dans ce tuto, les commentaires me permettront également d'insérer mes commentaires didactiques directement dans mon code...

C'est-y-pas plus facile ?

IV-3. Les tableaux associatifs

Ici, la seule différence, par rapport à un tableau simple, c'est que l'index n'est plus numérique, mais lui-même une variable string :

Par exemple, votre tableau veut stocker une adresse.
Sachant que chaque adresse comporte en gros et dans cet ordre, un nom, un prénom, un numéro, une rue, un code postal et une ville...

On peut construire le tableau suivant :

Un tableau associatif pour stocker une adresse
Sélectionnez
<?php
//On signale que notre variable $adresse4 sera un tableau
$adresse4 = array(); 
//on le remplit
$adresse4 ['nom']='DUPONT';
$adresse4 ['prenom']='Mickaël';
$adresse4 ['num'] = 12; 
$adresse4 ['rue']  = 'rue des églantines'; 
$adresse4 ['cp']  = 93000;
$adresse4 ['ville'] = 'SAINT-DENIS';
?>


'num' est ici un index du tableau adresse. 12 est la valeur stockée à l'index 'num'.

 
Sélectionnez
<?php
//Pour convoquer 12
echo $adresse4['num']; 
?>


Bien entendu, l'intérêt d'un tableau d'adresses, c'est d'en stocker plus d'une !

Alors nous procèderons... à un tableau de tableaux, un tableau imbriqué en fait...

Nous venons de voir que $adresse4 est un tableau.

Construction d'un tableau de tableaux
Sélectionnez
<?php
//construction de mon tableau $agenda
$agenda=array($adresse0, $adresse1, $adresse2, $adresse3 ,$adresse4); 
?>


Je procède ensuite en deux étapes :

Convoquer une donnée dans un tableau de tableaux - Méthode 1
Sélectionnez
<?php
//récupérer l'adresse totale de Mickaël
$adresseMick= $agenda[4];
/*
En effet, l'adresse de Mickaël se trouve dans notre agenda à l'index 4 (l'index numérique construit automatiquement)...
*/
//Récupérer enfin le nom de famille de Mickaël
echo $adresseMick['nom'];
?>


Compris ? Allez, même si ça pique un peu la tête, signalons au passage que l'on aurait pu retrouver le nom de Mickaël dans ce tableau de tableaux par la syntaxe suivante, plus condensée :

Convoquer une donnée dans un tableau de tableaux - Méthode 2
Sélectionnez
<?php
echo $agenda[4]['nom'];
?>

IV-4. La boucle foreach

Bien sûr, l'idéal pour parcourir les valeurs d'un tableau, c'est une boucle.
La boucle foreach (pour chaque élément) présente l'avantage de parcourir la totalité d'un tableau, même si l'on n'a aucune idée du nombre d'éléments qu'il contient.

Reprenons notre tableau des jours de la semaine, comment le parcourir ?

Égrener les jours de la semaine
Sélectionnez
<?php
//construction du tableau semaine
$semaine=array('lundi','mardi','mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche');
 
//parcours du tableau
 
foreach($semaine as $jour){
    echo'- '.$jour.'<br/>';
}
/*
Pour chaque valeur du tableau $semaine, compose la variable $jour et affiche le jour puis va à la ligne...
*/
?>


Copiez, collez maintenant le gros morceau de code qui suit, dont nous avons vu l'essentiel tout à l'heure, la construction à la main d'un agenda d'adresses :

L'agenda : un tableau de tableaux
Sélectionnez
<html>
    <head><title>Mon agenda</title></head>
    <body>
        <?php
        $adresse0 = array(); 
        //on le remplit
        $adresse0 ['nom']='ZERO';
        $adresse0 ['prenom']='Toto';
        $adresse0 ['num'] = 10; 
        $adresse0 ['rue']  = 'rue des rosiers'; 
        $adresse0 ['cp']  = 94000;
        $adresse0 ['ville'] = 'IVRY-SUR-SEINE';
 
        $adresse1 = array(); 
        //on le remplit
        $adresse1 ['nom']='AIN';
        $adresse1 ['prenom']='Anne';
        $adresse1 ['num'] = 11; 
        $adresse1 ['rue']  = 'rue des moineaux'; 
        $adresse1 ['cp']  = 57000;
        $adresse1 ['ville'] = 'METZ';
 
        $adresse2 = array(); 
        //on le remplit
        $adresse2 ['nom']='DEUX';
        $adresse2 ['prenom']='Al';
        $adresse2 ['num'] = 2; 
        $adresse2 ['rue']  = 'rue des arbres'; 
        $adresse2 ['cp']  = 88000;
        $adresse2 ['ville'] = 'EPINAL';
 
        $adresse3 = array(); 
        //on le remplit
        $adresse3 ['nom']='TROIS';
        $adresse3 ['prenom']='Léa';
        $adresse3 ['num'] = 3; 
        $adresse3 ['rue']  = 'rue des éléphants'; 
        $adresse3 ['cp']  = 69000;
        $adresse3 ['ville'] = 'LYON';
 
        $adresse4 = array(); 
        //on le remplit
        $adresse4 ['nom']='DUPONT';
        $adresse4 ['prenom']='Mick';
        $adresse4 ['num'] = 4; 
        $adresse4 ['rue']  = 'rue des églantines'; 
        $adresse4 ['cp']  = 93000;
        $adresse4 ['ville'] = 'SAINT-DENIS';
 
        //on déclare et remplit l'agenda avec toutes les adresses précédentes :
        $agenda=array($adresse0,$adresse1,$adresse2,$adresse3,$adresse4);
        ?>
    </body>
</html>


Ceux qui ont suivi le devinent, qui dit tableau de tableaux dit... boucles imbriquées pour la lecture du tableau :

Une boucle pour lire chaque champ dans l'adresse imbriquée dans une boucle pour lire chaque adresse
Sélectionnez
<?php
//pour chaque élément de $agenda crée la variable $adresse
foreach($agenda as $adresse){
    //pour chaque élément de $adresse crée la variable $element
    foreach($adresse as $element){
    //écris le $element sur la même ligne avec un tiret et des espaces
        echo '- '.$element.'  ';
    }
    //A chaque nouveau $adresse, saute une ligne
    echo'<br/>';
}
?>


Et voici notre agenda qui s'affiche de façon assez lisible...

Bien, nous arrivons maintenant au coeur de notre problème, et nous revenons à notre formulaire :

Comment récupérer des variables $_POST, résultats d'un formulaire de saisie, quand elles sont nombreuses ?

IV-5. Boucle foreach et variables POST

PHP construit automatiquement un tableau associatif dès que l'on soumet un formulaire.
Ce tableau se nomme $_POST, chaque élément a pour index le 'name' d'un élément du formulaire, et chaque valeur, la valeur entrée par l'utilisateur dans chaque champ avant de cliquer sur le bouton 'submit'.

On peut donc égrener tranquillement notre tableau de variables POST de cette façon :

Une boucle foreach pour récupérer les variables POST
Sélectionnez
<?php
/*pour chaque élement du tableau $_POST, 
récupère et affecte la valeur de l'index, 
puis récupère et affecte la valeur associée à cet index*/
 
foreach($_POST as $index=>$valeur){
    echo '- '.$valeur.'<br/>';
} 
?>


Pour vous en convaincre, reprenons le formulaire sur l'IMC, (correction du TP3) et voyons ce que cette boucle produit :

Récupérons tout le tableau $_POST de notre petit code sur l'IMC
Sélectionnez
<html>
    <head><title>Votre IMC</title></head>
    <body>
        <h1>Déterminez votre IMC et sachez quelle est votre corpulence d'un point de vue médical</h1>
        <h2>Entrez les données suivantes </h2>
        <form name="formulaire" method="post" action="tableau.php">
            Entrez votre prénom : <input type="text" name="prenom"/> <br/>
            Entrez votre taille (sous la forme 1.70) : <input type="text" name="taille"/> <br/>
            Entrez votre poids (en kilos) : <input type="text" name="poids"/> <br/>
            <input type="submit" name="valider" value="OK"/>
        </form>
        <?php  
        echo'Vos données entrées : '.'<br/>';
 
        if(isset($_POST['valider'])){
            foreach($_POST as $index=>$valeur){
                echo '- '.$index.' : '.$valeur.'<br/>';
            }
        }
        ?>
    </body>
</html>


Ce petit bout de code ne fait qu'afficher la valeur des variables que le client vient d'entrer plus la valeur (permanente) de valider qui est 'ok'...

IV-6. TP4

Sur le fichier tp4.php, offrez via un formulaire la saisie du nom, du prénom, de l'âge, de la ville et de l'activité.

Quand l'utilisateur clique sur le bouton valider, il voit apparaître en dessous du même formulaire le message suivant :
'Vous venez de saisir :' puis à la ligne à chaque fois un tiret son nom, un tiret son prénom etc...

Comme d'habitude sans copier... De mémoire seulement...
Par ailleurs, on ne veut pas voir 'ok' dans la liste de ce que l'on vient de saisir...

IV-7. Correction du TP4

Veuillez cliquer sur le symbole à droite pour découvrir la solution quand vous aurez fini.

tp4.php
CacherSélectionnez

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 VAUTHIER Sylvie. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.