Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Intérêt des tableaux de variables en PHP
Les
tableaux de variables sont incontournables en programmation. Nous les avions d'ailleurs mis en oeuvre dans diverses formations Web clientes avec
Javascript . C'est pourquoi, dans la logique des choses, nous proposons de les aborder aujourd'hui en
programmation Serveur avec du
code PHP .
L'intérêt d'un
tableau de variables est de stocker une grande quantité d'informations dans une seule
variable . Chacune est rangée indépendamment dans une ligne du tableau. Pour y accéder et restituer précisément une donnée, il suffit d'indiquer le numéro de ligne dans laquelle cet élément est rangé.
Sources et présentation de la problématique
Pour débuter la présentation et les manipulations, nous proposons de récupérer des sources Html existantes.
La décompression conduit au fichier de la page Web principale. Il est
nommé index.php . Il est accompagné de ses ressources externes dont notamment les codes communs à toute page du site, précisément stockés dans le sous dossier local
commun .
Dans la formation précédente, nous avions démontré l'intérêt et l'importance de ces constructions grâce à l'
instruction PHP Include . Toutes les parties communes doivent être codées dans des fichiers indépendants. Ce procédé simplifie le développement, la normalisation et les modifications à la volée.
Nous proposons d'accéder au résultat de cette page d'accueil en l'affichant dans un navigateur Web. Pour ce faire et comme nous l'avons appris dans les formations précédentes, nous devons le référencer dans l'interface d'
EasyPhp . Il s'agit de l'émulateur des serveurs Web. Nous devons définir son nom et spécifier son adresse issue de l'explorateur Windows, en cliquant sur le
bouton Add Directory .
Bien entendu, pour l'émulation, le serveur http doit être démarré. Notre projet Web apparaît désormais référencé dans la liste.
Cliquer sur son lien pour accéder à sa page d'accueil,
Nous découvrons la page Web destinée à recevoir nos manipulations et travaux. Dans le bandeau supérieur, vous notez la présence d'une zone de saisie, d'une liste déroulante et d'un bouton. Ce dernier doit transmettre les valeurs saisies depuis le client vers le serveur. C'est pourquoi ces
contrôles Html Input sont encapsulés dans un
formulaire Html .
Comme nous l'avons appris, un
formulaire est essentiel pour transférer des données. Nous proposons de le constater en accédant au code de la page Web principale.
A la racine du dossier de décompression, cliquer droit sur le fichier index.php ,
Dans le menu contextuel, choisir de l'ouvrir avec un éditeur tel que le Notepad++,
En entête du code comme en pied de page, nous notons les appels aux parties communes à toutes les pages du site Web. C'est la solution que nous avons mise en oeuvre dans la formation précédente. Nous la répliquerons désormais pour chacun de nos développements à des fins d'optimisation.
<?php
include("commun/connexion.php");
include("commun/entete.php");
?>
<div style="width:100%; display:block; text-align:center;">
</div>
...
En ligne 29 pour un éditeur Notepad, vous notez en effet la présence du
formulaire encapsulant les
contrôles Html dont la zone de saisie, la liste déroulante et le bouton.
...
<div class="centre">
<div class="titre_centre">
<form id="formulaire" name="formulaire" method="post" action="index.php">
<select id="choix_dep" name="choix_dep" class="liste">
<option value="00">Sélectionnez un département</option>
<option value="07-Ardèche">07-Ardèche</option>
<option value="26-Drome">26-Drome</option>
<option value="38-Isère">38-Isère</option>
<option value="69-Rhone">69-Rhone</option>
<option value="73-Savoie">73-Savoie</option>
</select>
<div class="liste_div">
<input type="text" id="nbval" name="nbval" class="liste" value="Saisir une valeur numérique" onClick="this.value='';" />
</div>
<div class="liste_div" style="float:right;">
<input type="button" id="envoyer" name="envoyer" class="liste" style="width:100px;" value="Envoyer" onClick="document.getElementById('formulaire').submit();" />
</div>
</form>
</div>
</div>
...
La méthode du
formulaire permet de poster les données pour les faire transiter par le serveur. La page de réception est définie par l'
attribut action . Il s'agit de la même page que l'appelant soit
index.php . Nous chercherons plus tard à réceptionner les données transmises, comme nous l'avons déjà appris. Dans un premier temps, nous souhaitons présenter les
tableaux en Php , leur syntaxe, subtilité et intérêt.
Atteindre la ligne 49 pour un éditeur Notepad,
Nous y découvrons les deux calques constituant le corps de la page d'accueil. Ils portent les identifiants respectifs
colonne_gauche et
colonne_droite .
...
<div class="colonne" id="colonne_gauche">
</div>
<div class="colonne" id="colonne_droite">
</div>
...
Présentation des tableaux de variables en PHP
Le premier calque d'identifiant
colonne_gauche correspond au cadre de gauche. Nous allons y coder les premières
instructions PHP permettant de découvrir les
tableaux de variables et leurs manipulations.
Dans ce premier calque, créer la section de code PHP comme suit :
...
<div class="colonne" id="colonne_gauche">
<?php
?>
</div>
...
Un
tableau de variables PHP peut se déclarer grâce à l'
instruction array . Il suffit d'énumérer entre ses bornes l'ensemble des éléments du tableau, séparés par une virgule. Nous proposons de créer un tableau de variables recensant quelques départements français dans le désordre.
Dans la section PHP, ajouter les instructions suivantes :
...
<?php
$dep=array("46-Lot", "03-Allier", "83-Var", "26-Drôme", "02-Aisne");
echo $dep[2];
?>
...
Nous déclarons une
variable ($dep) qui est typée à la volée par affectation grâce à l'
instruction Php array . Nous insérons 5 valeurs dans ce tableau, séparées les unes des autres par une virgule. Comme il s'agit de textes, nous les renseignons fort logiquement entre guillemets. Nous exploitons ensuite l'
instruction echo à titre d'essai pour tenter de restituer le deuxième élément de ce tableau, celui situé sur la deuxième rangée. Pour cela, nous mentionnons son indice entre crochets ($dep[2]).
Enregistrer les modifications (CTRL + S) et basculer sur le navigateur Web,
Puis, rafraîchir la page à l'aide de la touche F5 du clavier ,
Nous constatons que l'un des départements est effectivement restitué. Seulement il ne s'agit pas du deuxième mais du troisième. En effet, comme nous l'avions appris en
Javascript notamment, un
tableau de variables débute à l'indice 0. Donc, nous aurions dû mentionner le chiffre 1 pour obtenir l'élément rangé en deuxième ligne.
Le dernier élément, soit le cinquième, est donc rangé à l'indice 4 pour le département de l'Aisne. Nous proposons de le prouver.
Revenir dans l'éditeur de code de la page index.php,
Changer le paramètre 2 par le chiffre 4 , dans le tableau de variables (echo $dep[4]),
Enregistrer les modifications, basculer sur le navigateur et réactualiser la page,
Nous constatons que nous accédons en effet à l'élément demandé, stocké dans la même variable que précédemment mais sur une ligne différente. Il s'agit de la dernière ici en l'occurrence.
En
programmation , il est important de connaître la taille d'un
tableau de variables . Cette information permet de le parcourir depuis sa borne inférieure qui est inévitablement 0, jusqu'à sa borne supérieure définie par le dernier élément, moins une unité donc. En
PHP , c'est la
fonction sizeof qui renseigne sur cette donnée.
Revenir dans l'éditeur de code de la page Web,
Adapter le code de la fonction echo comme suit :
echo sizeof($dep);
Nous devons ainsi afficher le nombre d'éléments contenus dans le tableau, reconnu par son nom de variable passé en paramètre. Comme il s'agit du tableau dans sa globalité, les crochets ne doivent pas être renseignés.
Enregistrer les modifications, basculer sur le navigateur Web et rafraîchir la page,
La page Web restitue le chiffre 5. Il s'agit effectivement des 5 départements stockés dans le
tableau de variables . Désormais nous sommes donc en mesure de le parcourir grâce à une
boucle de programmation que nous avait apprise la
formation PHP sur les traitements itératifs .
Pour ce faire nous proposons d'exploiter une
boucle bornée For . Elle doit permettre de restituer par concaténation de code client et serveur, l'ensemble des éléments du tableau, les uns en-dessous des autres. Il s'agit donc d'y intégrer l'
instruction echo .
Revenir dans l'éditeur de code de la page Web,
Puis adapter le code de la section PHP comme suit :
<?php
$dep=array("46-Lot", "03-Allier", "83-Var", "26-Drôme", "02-Aisne");
for($ligne=0 ; $ligne<sizeof($dep) ; $ligne++)
{
echo $dep[$ligne]."<br />";
}
?>
Nous parcourons les éléments du tableau du premier ($ligne=0) jusqu'au dernier ($ligne<sizeof($dep)). A chaque passage, nous incrémentons la variable du compteur ($ligne++). Et nous l'exploitons pour restituer l'élément situé sur la rangée correspondante (echo $dep[$ligne]).
Enregistrer les modifications, basculer sur le navigateur Web et rafraîchir la page,
Effectivement, nous avons réussi à accéder à chaque élément du tableau référencé par son indice de ligne et à les restituer les uns en dessous des autres par concaténation Html, grâce à la
balise <br /> qui consiste en un saut de ligne.
En
PHP , il est très simple d'ajouter de nouvelles valeurs à la suite dans le
tableau de variables .
Revenir dans l'éditeur de code de la page Web,
Avant la boucle , ajouter l'instruction suivante :
...
$dep=array("46-Lot", "03-Allier", "83-Var", "26-Drôme", "02-Aisne");
$dep[]="38-Isère";
for($ligne=0 ;$ligne<sizeof($dep) ;$ligne++)
{
...
Nous désignons le tableau par le nom de sa variable sans valeur de paramètre mais avec les crochets. Ils sont destinés à accueillir une donnée. Nous l'affectons sur une nouvelle valeur. Par défaut, cette dernière est ajoutée à la fin du tableu. C'est ce que nous proposons de constater.
Enregistrer les modifications, basculer sur le navigateur Web et rafraîchir la page,
Comme vous le remarquez, le nouveau département est bien listé à la suite dans l'énumération, grâce au traitement itératif de la
boucle For . Sa borne supérieure s'est dynamiquement adaptée grâce à la
fonction sizeof .
De même, il est très simple de supprimer un élément reconnu par son indice de ligne, dans un
tableau Php . Pour cela, nous devons exploiter la
fonction unset .
Revenir dans l'éditeur de code de la page Web,
Puis, ajouter l'instruction PHP suivante, juste avant la boucle :
...
$dep[]="38-Isère";
unset($dep[2]);
for($ligne=0 ;$ligne<sizeof($dep) ;$ligne++)
{
...
Enregistrer les modifications, basculer sur le navigateur Web et rafraîchir la page,
Au passage du troisième élément repéré par son indice 2, nous rencontrons une erreur. En effet le département du Var a été supprimé par la
fonction unset . Néanmoins, la ligne est toujours présente mais elle est vide.
Pour palier le problème, nous proposons d'adapter le code de la
boucle . Il s'agit de tester l'existence de l'élément en cours de lecture. Nous avons appris et exploité la
fonction Php isset dans les formations précédentes. Elle retourne une valeur booléenne indiquant si la variable existe. Comme il s'agit d'un test, nous devons l'intégrer dans une instruction conditionnelle.
Revenir dans l'éditeur de code de la page Web,
Incrémenter la borne supérieure de la boucle d'une unité,
Puis, ajouter la condition suivante dans le traitement itératif :
...
for($ligne=0 ;$ligne<sizeof($dep)+1 ;$ligne++)
{
if(isset($dep[$ligne]))
echo $dep[$ligne]."<br />";
}
...
Comme un élément a été supprimé, la
fonction sizeof retourne une dimension inférieure qu'il faut ajuster (+1) dans la borne supérieure de la boucle pour atteindre le dernier élément. Il n'existe plus certes, mais sa rangée est toujours présente. Puis, nous exploitons la
fonction Php isset désormais bien connue, pour tester l'existence de la valeur à l'indice en cours de lecture dans la boucle.
Enregistrer les modifications, basculer sur le navigateur Web et rafraîchir la page,
Comme vous le constatez, la rangée vide est ignorée. L'erreur disparaît et l'énumération se poursuit. Nous aurions aussi pu exploiter la
fonction array_splice qui permet de
redimensionner un tableau à la volée : array_splice($dep, sizeof($dep));
Une autre fonction est intéressante pour la manipulation des
tableaux PHP . Il s'agit de la
fonction print_r . Avec un tableau passé en paramètre, elle restitue l'ensemble de son contenu sans même faire appel à une boucle. Nous proposons de la tester.
Revenir dans l'éditeur de code de la page Web,
Ajouter les deux instructions PHP suivantes avant l'appel de la fonction unset :
...
<?php
$dep=array("46-Lot", "03-Allier", "83-Var", "26-Drôme", "02-Aisne");
$dep[]="38-Isère";
print_r($dep);
echo "<br /><br />";
unset($dep[2]);
for($ligne=0 ;$ligne<sizeof($dep)+1 ;$ligne++)
{
if(isset($dep[$ligne]))
echo $dep[$ligne]."<br />";
}
?>
...
Enregistrer les modifications, basculer sur le navigateur Web et rafraîchir la page,
Nous obtenons une vue déployée de l'ensemble des éléments contenus dans le tableau de
variables Php .
Construire dynamiquement le contenu d'une liste déroulante
Nous souhaitons désormais mettre à profit ces premières notions à des fins utiles. La
liste déroulante sur la page Web est statique. Il s'agit d'un
contrôle Html Select. En l'état, elle ne nous intéresse pas. Nous souhaitons remplir son contenu en fonction des données qui auraient été récoltées sur le serveur grâce à une requête exécutée sur la base de données. Mais nous ne savons pas encore attaquer les bases de données en PHP. Nous proposons donc de simuler le cas en construisant une chaîne de caractères en entête de code. Elle doit énumérer les départements les uns à la suite des autres, comme s'ils avaient été réceptionnés depuis la base de données.
Revenir dans l'éditeur de code de la page index.php ,
Passer toutes les instructions en commentaires (/* */),
Nous proposons d'intégrer ce nouveau code dans la
page de connexion . C'est elle qui intervient en premier dans la chronologie. Elle est chargée grâce à l'instruction
Php include , comme nous l'avons constaté en préambule de cette formation. Nous simulerons ainsi une première connexion.
A la racine du dossier de décompression, double cliquer sur le sous dossier commun pour l'ouvrir,
Cliquer alors avec le bouton droit de la souris sur le fichier connexion.php ,
Dans le menu contextuel, choisir de l'ouvrir avec un éditeur tel que le Notepad++,
Nous y notons la présence des instructions codées lors de la formation précédente. Elles permettent de restituer les informations d'Url purgées et de les adapter dynamiquement dans les titres de chaque page du site.
A la suite du code, ajouter la déclaration de variable suivante :
...
$info = strtoupper(substr($info, 0, 1)).substr($info, 1);
$dep="46-Lot, 03-Allier, 83-Var, 26-Drôme, 02-Aisne, 38-Isère";
?>
Nous supposons donc que ces données concaténées sont issues du serveur. Mais elles ne sont pas dissociées. Elles ne sont pas rangées explicitement et indépendamment dans un
tableau de variables . Et pourtant c'est ce dont nous avons besoin pour parcourir chacun de ces éléments du premier au dernier. En
Javascript , nous avions appris à exploiter la
méthode split pour découper une chaîne de texte sur un caractère remarquable. Cette méthode permettait de transformer la variable affectée en tableau de variables à la volée. Tous les éléments y étaient rangés indépendamment. En
Php , il ne s'agit pas d'une méthode, mais d'une
fonction . Et cette fonction se nomme
explode . Le caractère remarquable à passer en paramètre pour la découpe est la virgule.
La fonction
PHP explode , tout comme la
méthode Javascript split , transforme une variable en tableau à la volée. Il n'est donc pas nécessaire de le déclarer en tant que tel.
A la suite du code précédent, ajouter l'instruction Php suivante :
...
$dep="46-Lot, 03-Allier, 83-Var, 26-Drôme, 02-Aisne, 38-Isère";
$tableau=explode(",",$dep);
?>
Pour confirmer que nous avons été en mesure de créer un
tableau de variables par cette simple
fonction explode , nous proposons de tenter de restituer tous ses éléments, les uns à la suite des autres, par une
boucle de traitement .
Revenir dans la section Php de la page index.php ,
Sous les commentaires précédents, créer la boucle parcourant ce nouveau tableau :
...
}
*/
for($ligne=0 ;$ligne<sizeof($tableau) ;$ligne++)
{
if(isset($tableau[$ligne]))
echo $tableau[$ligne]."<br />";
}
?>
...
Enregistrer les modifications, basculer sur le navigateur Web et rafraîchir la page,
Comme vous le constatez, tous les éléments ont parfaitement été rangés indépendamment dans les lignes du tableau, ainsi construit à la volée grâce à la
fonction Php explode .
Nous souhaitons désormais exploiter ce tableau pour construire dynamiquement la liste déroulante en remplaçant son
contenu statique Html par du
code dynamique Php .
Revenir dans le code de la page index.php ,
A partir de la ligne 30 pour un éditeur Notepad, adapter le code Html de la balise Select , comme suit :
...
<select id="choix_dep" name="choix_dep" class="liste">
<?php
echo "<option value='0'>Sélectionnez un département</option>";
for($ligne=0 ;$ligne<sizeof($tableau) ;$ligne++)
{
echo "<option value='".$tableau[$ligne]."'>".$tableau[$ligne]."</option>";
}
?>
</select>
...
Nous conservons les
balises Select ouvrantes et fermantes destinées à déclarer cette liste déroulante. Son contenu quant à lui est remplacé par un
code Php dynamique . Comme précédemment, il consiste à parcourir tous les éléments du tableau créé grâce à la
fonction explode . Et chacun de ces éléments est concaténé dans une balise Html (option) destinée à reconstruire chaque ligne de la liste.
Enregistrer les modifications, basculer sur le navigateur Web et rafraîchir la page,
La liste est effectivement remplie dynamiquement des valeurs du tableau. Un simple traitement itératif a permis de la reconstruire côté serveur par concaténation. Nous allons prouver que son contenu est parfaitement dynamique.
Revenir dans le code de la page connexion.php ,
Ajouter un nouveau département dans le tableau de variables, comme : 08-Ardennes :
...
$dep="46-Lot, 03-Allier, 83-Var, 26-Drôme, 02-Aisne, 38-Isère,08-Ardennes ";
$tableau=explode(",",$dep);
?>
Enregistrer les modifications, basculer sur le navigateur et rafraîchir la page Web,
Puis, déployer l'affichage de la liste déroulante,
Comme vous le remarquez, nous constatons la présence de la nouvelle donnée intégrée automatiquement.
Puisque nous parvenons à construire dynamiquement les informations d'une liste déroulante en fonction des données du serveur, nous souhaitons récupérer le choix de l'internaute par le biais de cette liste. Pour ce faire, il s'agit de répliquer ce que nous avons appris dans les formations précédentes. Souvenez-vous, c'est l'instruction
$_POST en
Php qui permet de réceptionner une donnée transmise, en fonction du nom du
contrôle Html . La liste déroulante est nommée
choix_dep .
Revenir dans le code de la page index.php ,
Dans le calque d'identifiant colonne_droite , ajouter le code Php suivant :
...
<div class="colonne" id="colonne_droite">
<?php
if(isset($_POST["choix_dep"]))
echo $_POST["choix_dep"];
?>
</div>
...
Enregistrer les modifications, basculer sur le navigateur et rafraîchir la page Web,
Choisir un département dans la liste déroulante,
Puis, cliquer sur le bouton Envoyer ,
Le choix de l'internaute est parfaitement intercepté et restitué côté serveur. Pour nos développements futurs, il est intéressant de constater à quel point il est simple en
Php de construire des interfaces dynamiques, d'interagir avec l'internaute en fonction de ses données et potentiellement d'enclencher des actions dynamiques. Nous sommes dans la philosophie d'un site Web dynamique et évolutif.
Un problème subsiste néanmoins. Les départements ont été réceptionnés dans le désordre. Pour des questions de clarté et d'ergonomie, nous souhaitons réorganiser l'information. Ce souci peut être résolu à la source par une simple
fonction Php . Il s'agit de la
fonction sort . Elle permet de trier les informations du tableau qui lui est passé en paramètre.
Revenir dans le code de la page connexion.php ,
A la suite des instructions précédentes, ajouter la ligne Php suivante :
...
$dep="46-Lot, 03-Allier, 83-Var, 26-Drôme, 02-Aisne, 38-Isère, 08-Ardennes";
$tableau=explode(",",$dep);
sort($tableau);
?>
Enregistrer les modifications, basculer sur le navigateur,
Valider sa barre d'adresse par la touche Entrée pour recharger la page,
Puis, déployer l'affichage de la liste déroulante,
Comme vous le remarquez, une simple
instruction Php suffit. Désormais, la liste déroulante Html propose ses informations triées dans l'ordre croissant.
Liste à choix multiples et tableau de variables
Nous allons voir que nous ne sommes pas au bout de nos surprises avec les possibilités offertes par les
tableaux en PHP . Il est possible de proposer des zones de liste déroulante à choix multiples et d'en réceptionner les valeurs côté serveur. Ensuite, il ne reste plus qu'à les traiter comme nous savons le faire par traitement itératif. Mais pour cela, quelques adaptations Html sont nécessaires. La méthode de soumission du formulaire doit être passée Ã
GET à la place de POST. Cette méthode permet de transférer des données multiples. Elles transiteront par l'URL du navigateur. Le nom de la liste déroulante (Name), doit être transformé en
tableau de variables . C'est ainsi que les choix multiples pourront être mémorisés.
Revenir dans le code de la page index.php ,
Adapter les propriétés du formulaire et de la liste, selon les éléments ci-dessous mentionnés en gras :
...
<form id="formulaire" name="formulaire" method="get" action="index.php">
<select id="choix_dep" name="choix_dep[]" class="liste" multiple="true" style="height:50px;" >
<?php
echo "<option value='0'>Sélectionnez un département</option>";
for($ligne=0 ;$ligne<sizeof($tableau) ;$ligne++)
{
echo "<option value='".$tableau[$ligne]."'>".$tableau[$ligne]."</option>";
}
?>
</select>
...
Tout d'abord nous basculons l'
attribut method du formulaire sur
Get . Ensuite nous référençons la liste déroulante dans son nom comme un tableau de variables grâce à ses crochets (name="choix_dep[]). Puis nous lui ajoutons l'
attribut Multiple que nous fixons Ã
True . Cette propriété permet de réaliser des sélections multiples grâce à la touche CTRL et au clic de la souris. Enfin, nous augmentons la hauteur de la liste déroulante (style="height:50px;"). En mode multi-sélection, elle s'affiche en effet complètement déployée.
Nous devons maintenant nous occuper de réceptionner les valeurs transmises par la liste déroulante. Pour cela, nous devons adapter le
code Php situé dans le calque d'
identifiant colonne_droite .
Dans le calque colonne_droite, adapter le code Php comme suit :
...
<div class="colonne" id="colonne_droite">
<?php
if(isset($_GET["choix_dep"]))
echo print_r($_GET["choix_dep"]);
?>
</div>
...
C'est fort logiquement l'instruction
$_GET qui remplace l'instruction
$_POST pour la réception des valeurs. Nous lui passons le nom du contrôle en paramètre. Celui-ci est déclaré comme un
tableau de variables par sa
propriété Name . De fait, nous exploitons la
fonction Php print_r pour restituer tout son contenu.
Enregistrer les modifications et basculer sur le navigateur Web,
Recharger la page en validant sa barre d'adresse par la touche Entrée du clavier,
Sélectionner plusieurs départements (Touche CTRL) dans la liste déployée,
Puis, cliquer sur le bouton Envoyer pour soumettre ces choix,
Vous constatez que les données ont parfaitement été transmises au serveur sous forme de
tableau de variables . Toutes ont ainsi pu être réceptionnées pour traitements ultérieurs. Dans nos développements futurs, nous exploiterons ces acquis pour proposer de véritables applications Web dynamiques interactives. Mais il nous reste encore beaucoup d'apprentissage. Comme vous l'avez remarqué, du fait du changement de hauteur de la liste, la structure de la page n'est pas correcte. Nous devrions la retravailler. Mais l'objectif ici était d'aborder les
tableaux de variables en PHP .