Formation au langage PHP


Le langage PHP

Le langage PHP est un langage de programmation qu'on utilisait, au début, pour concevoir des sites Web dynamiques.
Aujourd'hui, l'utilisation de PHP ne se limite plus à la conception de sites web ; elle dépasse ce cadre et est fort appréciée dans l'industrie de l'informatique pour - entre autres - l'accompagnement de la gestion des bases de données et l'administration système.
Le PHP s'appuie sur le langage HTML qu'il complète et – en quelque sorte – améliore.
Il permet d'interagir avec des bases de données hébergées sur des serveurs informatiques.

Qu'est-ce qu'un site dynamique ?

Un site Web dynamique peut se présenter différemment selon l'utilisation qu'en fait le visiteur par opposition à un site statique qui affichera toujours les mêmes informations quoi qu'on y fasse.
Un site de commerce en ligne affichera une liste actualisée d'articles selon les préférences de l'internaute ou selon les promotions du moment. Un autre site permettra qu'on modifie sa mise en forme en cliquant sur certains boutons. Un troisième site autorisera l'enregistrement et l'affichage de commentaires.
Jetons un coup d'œil sur un site Internet dynamique.

Exemple de site

Nous voici sur le site http://www.francaisfacile.com/.
Cliquez sur le lien hypertexte Quel niveau avez-vous en français ?

Un site écrit en ...?

Regardez dans la barre d'adresse de votre navigateur.
Quelle est l'extension (.doc, .txt, .gif, etc.) du fichier constituant la page Web que nous sommes en train de consulter ?
 html
 php
 com

En PHP !

Nous sommes bien sur un site écrit en PHPcomme l'atteste l'extension des pages Web que nous consultons.
Cliquez sur le lien Livre d'or situé à gauche de la page.

Un site dynamique

Voyez-vous tous ces commentaires laissés par les utilisateurs du site ?
Et bien c'est grâce au langage PHP qu'on peut proposer un tel outil (livre d'or) et qu'on peut enregistrer chaque remarque dans une base de données.

Une page PHP

Qu'est-ce qu'une page PHP ?
Une page PHP est un fichier texte portant l'extension .php et qui contient :
         Soit du code PHP.
         Soit un mélange de code HTML et de code PHP.

Un premier exemple de page PHP

Une page PHP peut ressembler à ceci :
<?php
   echo "Bonjour, le monde !";
?>
Dans ce premier exemple, il n'y a que du code PHP.
La balise <?php indique que ce qui suit est du PHP et la balise ?> indique la fin du code . Entre ces deux balises... on écrit des instructions PHP.

Deuxième exemple de page PHP

Une page PHP peut aussi être un mélange de code HTML et de code PHP :
<html>
   <head>
   <title>Deuxième exemple de page PHP</title>
</head>
<body>
   <p>Juste pour dire...
   <?php echo "Bonjour, le monde !"; ?>
</p>
</body>
</html>
Dans ce cas-ci, on a une page HTML standard dans laquelle on insère du code PHP.
Il faudra veiller à ce que le nom de fichier se termine par l'extension .php !

Troisième exemple

On pourrait encore avoir ceci :
<?php
echo "<p>Juste pour dire... Bonjour, le monde !</p>";
?>
Dans ce dernier exemple, c'est le code HTML qui se trouve dans le code PHP.
C'est l'expérience et le besoin qui détermineront quand on utilisera l'une ou l'autre façon de faire.
Avez-vous constaté que toutes les instructions / ordres de PHP se terminent toutes par un point-virgule ?

Quiz

On utilise le langage PHP pour créer...
 Des sites Web dynamiques
 Des sites Web statiques
Chaque instruction/ordre PHP se termine par...
 Un point-virgule
 Un point
 Un tiret
Une page qui mélange du code PHP et HTML est le plus souvent appelée...
 un script
 un template PHP
 un canevas


Balises de délimitation du code PHP

Vous l'avez constaté : une page PHP peut très bien contenir du code HTML, du code PHP ou bien les deux.
Mais comment « expliquer » au serveur qui exécute notre page Web, qu'ici commence notre code PHP et que, là, il se termine ?
En utilisant des balises de délimitation du code PHP !
Avant le début du code PHP, on écrira <?php. Et on clôturera au moyen de ?>.
Exemple :
<?php
   echo "Je commence à comprendre !";
?>
La première ligne <?php indique que ce qui va suivre est... du code PHP.
La seconde ligne echo "Je commence à comprendre !"; est effectivement du code PHP. La commande echo donnant l'ordre d'afficher la phrase "Je commence à comprendre !"
Enfin, la troisième ligne ?> indique que c'est terminé pour le code PHP.
Pensez à ne pas insérer d'espace entre "<?" et "php" ! <?php est correct, <? php ne l'est pas !

Appliquez

Voici un premier exercice pratique.
Nous allons vous demander d'encoder les balises manquantes afin que le code PHP déjà présent s'exécute correctement.
À vous !
<?php
  echo "Si vous voyez cette phrase (et juste cette phrase)... c'est gagné !";

?> Afficher du texte

La première opération que l'on réalise en programmation est souvent un affichage.
Pour afficher un texte à l'écran (en PHP), on utilise l'instruction echo :
         echo " texte à afficher " ;
Le texte à afficher peut être : une information quelconquedu code HTML (qui sera interprété par le navigateur), le contenu d'une variable ou d'une constante PHP (nous y reviendrons).
Affichage d'un message de bienvenue.
<?php
   echo "Bienvenue &agrave; tous sur ma premi&egrave;re page PHP !";
?>
En PHP, les chaînes de caractères (texte) peuvent être définies en utilisant deux types de délimiteurs : les apostrophes simples et les apostrophes doubles (guillemets). Dans un souci de simplification et conscients que nous nous adressons majoritairement à des débutants, nous avons fait le choix pédagogique d'utiliser les guillemets doubles.
Pour éviter les problèmes de codage des caractères accentués, nous avons remplacé les caractères 'à' et 'è' par leur entité-caractère correspondante '&agrave;' et '&egrave;'

Afficher du texte mis en forme avec HTML

Affichage d'un message de bienvenue formaté au moyen du langage HTML.
<?php
echo "Bienvenue <b>&agrave; tous</b> sur <i>ma premi&egrave;re page PHP</i> !";
?>
Ici, nous avons inséré des balises HTML dans le texte à afficher.
Découvrons le résult

Le résultat

C'est bien ce que nous attendions.
Maintenant, affichez le code source de la page de droite.
Avec Microsoft Internet Explorer, faites un clic droit sur la page et sélectionnez « Afficher la source ».
Avec Google Chrome, faites un clic droit sur la page et sélectionnez « Afficher le code source de la page ».
Avec Mozilla Firefox, faites un clic droit sur la page et sélectionnez « Code source de la page ».

Le code source

Comme nous l'évoquions au point Exécuter une page PHP, ce n'est bien que du HTML qui est récupéré et executépar le navigateur.


Appliquez

Dans ce second exercice pratique, nous vous demandons d'écrire le code PHP d'un programme qui affichera les jours de la semaine formatés au moyen de balises HTML.
Résultat attendu :
Prêt(e) ? Go !
<?php

  echo "<h2>Les jours de la semaine</h2>";
  echo "<ol><li>Lundi</li><li>Mardi</li><li>Mercredi</li><li>Jeudi</li><li>Vendredi</li><li>Samedi</li><li>Dimanche</li></ol>";

?> Les commentaires

Un commentaire est un texte qui ne sera pas traité et qui sert principalement à laisser des informations utiles au programmeur. On commence un commentaire au moyen des caractères //.
<?php
   // Ici commence mon code PHP. Écrit le 25/12/2012
   echo " Ça alors ! Mais c'est Noël ! ";
?>
Comme les commentaires ne sont pas traités, ils sont également utilisés pour désactiver une portion de codequand on cherche des erreurs dans un code qui ne donne pas les résultats attendus.
<?php
   // echo " Beuh !? ;
   echo " Youpi ! "; // Pourquoi ça fonctionne ici et pas précédemment ?
?>

Appliquez

Dans cet exercice pratique, nous allons manipuler les commentaires.
Résultat attendu :
<?php

   echo "<p>Je compte jusque 3</p>";
   echo "<p>// Un //</p>";
   echo "<p>// Deux //</p>";
   echo "<p>// Trois ! //</p>";

?> Quiz

Chaque ligne d'instruction en PHP doit être terminée par...
 //
 ;
 .
On commence l'écriture d'un commentaire au moyen de...
 //
 REM
 <!-

Transmettre les données d'un formulaire

Comme indiqué dans l'introduction de ce cours, nous allons transmettre et traiter les données d'un formulaire.
Le fonctionnement sera le suivant :
Il y a deux méthodes principales d'envoi des informations pour un formulaire HTML :
         GET qui passe les données par le biais de l'adresse Internet (donc de manière visible pour tous).
         POST qui n'affiche pas les données transférées.
Nous emploierons la méthode GET qui est la méthode la plus courante pour demander une ressource non sensible.
Le formulaire HTML ressemblera donc à ceci :
<form method="get" action="traitement.php">
   ...
   <input type="submit" />
</form>
Constatez que la valeur de l'attribut action recevra le nom du fichier PHP qui traitera les données provenant du formulaire.

Appliquez

Et si nous faisions un exercice pratique sur les formulaires ?
Essayez de créer un formulaire (en HTML) qui permet :
         d'encoder librement une marque (champ de type text).
         d'encoder librement un prix maximum (champ de type text).
         de choisir une catégorie parmi : Ballons et Chaussures (élément de type select).
Un bouton Exécuter doit permettre de soumettre les données (méthode GET) à une page nommée traitement.php.
Un bouton Reset doit permettre de réinitialiser les données du formulaire.
Remarque : dans le code source de la solution, nous employons la balise <pre> pour aligner plus aisément le texte. C'est un choix que rien ne vous oblige à suivre.
                <pre>
                               <form method="get" action="traitement.php">
                                              
                                               Marque            : <input type="text" name="inputMarque" /><br />
                                               Prix maximum      : <input type="text" name="inputPrix" /><br />
                                               Catégorie  : <select name="inputCategorie">
                                                                                                                                                                            <option value="0">-- Catégories --</option>
                                                                                                                                                                            <option value="Ballons">Ballons</option>
                                                                                                                                                                            <option value="chaussures">Chaussures</option>
                                                                                                                                                               </select>
                                               <input type="submit" name="inputSubmit" value="Exécuter" />
                                               <input type="reset" name="inputReset" value="Reset" />
                               </form>

            </pre>
Quiz

On transmettra les données au moyen de la méthode GET parce que...
 c'est plus facile
 c'est la méthode la plus courante pour demander une ressource non sensible
 c'est la seule façon de procéder
L'attribut action de la balise <form> contiendra...
 le nom du fichier PHP qui contient le formulaire
 le nom du fichier PHP qui va recevoir et traiter les données du formulaire
 le nom de la méthode de transfert employée

Mémo

         Les balises de délimitation du code PHP sont <?php et ?>.
         Pour afficher du texte, on utilise l'instruction echo de la manière suivante :
echo "texte à afficher";
         Toutes les instructions (ordres) PHP doivent être terminées par un point-virgule.
         Le texte à afficher avec la balise echo peut contenir des balises HTML (qui seront interprétées lors de l'exécution).
         Pour écrire un commentaire sur une ligne, on commence par écrire //.
         Pour transmettre à une page PHP des informations encodées dans un formulaire, on précise, dans l'attribut action, le nom du fichier PHP qui doit traiter les données.

Complément

Les compléments sont des informations facultatives (pour répondre aux évaluations) et complémentaires au contenu du cours.
Les sujets suivants sont abordés dans les compléments de ce module :
         Tester son code PHP sur son ordinateur.
         Des guillemets entre... des guillemets.
         L'histoire de PHP.
         Les bases de données.
         Fonctionnement des serveurs HTTP avec PHP.
         Manuel PHP
         Différences entre les méthodes GET et POST.

Complément

Les compléments sont des informations facultatives (pour répondre aux évaluations) et complémentaires au contenu du cours.
Les sujets suivants sont abordés dans les compléments de ce module :
         Tester son code PHP sur son ordinateur.
         Des guillemets entre... des guillemets.
         L'histoire de PHP.
         Les bases de données.
         Fonctionnement des serveurs HTTP avec PHP.
         Manuel PHP
         Différences entre les méthodes GET et POST.

Tester son code PHP sur son ordinateur

Pour exécuter du code PHP, il faut disposer d'un programme en mesure de l'exécuter.
Si un navigateur est capable d'exécuter du HTML, du CSS et du JavaScript, il n'est par contre pas en mesure d'interpréter du PHP.
C'est pourquoi nous vous permettons d'exécuter vos programmes PHP directement en ligne lors des exercices pratiques. En fait, vos programmes sont exécutés par notre serveur web qui est – lui – capable d'exécuter le PHP.
Toutefois, il vous est possible de tester votre code PHP sur votre ordinateur. Pour cela, vous devez installer un serveur local qui interprétera le PHP.
Liste des serveurs locaux prenant en charge PHP

XAMP

         Une explication de l'utilisation de Xamp est disponible à cette adresse : http://www.infotuto.com/serveur/premiere-utilisation-de-xampp-sur-windows-239.

EasyPHP

         Solution prenant en charge PHP ainsi que de nombreux autres langages.


Des guillemets entre... des guillemets

Les guillemets étant utilisés pour délimiter le texte à afficher au moyen de la commande echo, une ligne de code telle que echo "Mon nom est "Laurent""; va poser problème étant donné que le deuxième guillemet va être considéré comme « fermant » la chaîne à afficher. Le reste Laurent""; engendrera alors une erreur de syntaxe.
Mais alors, comment utiliser des guillemets... entre des guillemets ? Ou plutôt, comment les afficher ?
En les échappant ! C'est-à-dire, en indiquant au langage qu'il ne faut les traiter que comme texte à afficher et pas comme délimiteur.
Pour échapper un caractère, on utilise le symbole \.
Exemple :
echo "Mon nom est \"Laurent\"";
Ce qui affichera :
Mon nom est "Laurent"

L'histoire de PHP

L'histoire du langage PHP

         J'invite les personnes intéressées par l'histoire du langage PHP à consulter cette page. Il serait trop long de décrire ici les différentes étapes menant au succès de ce langage.

Les bases de données

Le terme base de données reviendra régulièrement dans ce cours (mais aussi tout au long de votre découverte du langage PHP), l'intérêt principal du langage PHP étant de travailler de concert avec les bases de données.
Il serait donc intéressant d'en apprendre un peu plus sur ce sujet.
Je vous invite donc à consulter les pages suivantes :

Introduction aux bases de données

         Une introduction aux bases de données proposée par le site Comment ça marche.ne introduction aux bases de données sur le site Comment ça marche : http://www.commentcamarche.net/contents/104-bases-de-donnees-introduction

Wikipédia

         La page Wikipédia décrivant ce que sont les bases de données.

Fonctionnement des serveurs HTTP avec PHP

Pour en apprendre un peu plus sur le fonctionnement d'un serveur web hébérgeant et interprétant du PHP, je vous invite à suivre cette courte vidéo.

https://youtu.be/UEteb-otzFM Manuel PHP

Quand on développe, il est utile de disposer d'un manuel de référence sur le langage utilisé.
Vous pouvez, bien évidemment, acheter des livres traitant du sujet mais sachez qu'il existe un site de référence en ligne sur lequel vous pourrez rechercher toutes les informations nécessaires à l'utilisation du langage PHP.

Manuel de référence PHP

         N'hésitez pas à y effectuer des recherches aussi souvent que nécessaire.

Différences entre les méthodes GET et POST

En ce qui concerne l'envoi de données par le bais de formulaires HTML, deux méthodes peuvent être utilisées : la méthode GET et la méthode POST.
Pour en apprendre un peu plus sur ces deux méthodes, je vous invite à consulter les sites suivants :

GET vs POST

         Courte explication sur les méthodes d'envoi de données GET et POST.

PHP - Formulaires : Méthode post ou get ?

         Une autre explication des méthodes d'envoi des données.

Objectifs

Dans ce module, nous verrons :
         Comment mémoriser des informations dans des variables.
         Comment manipuler des variables

Les variables

Les variables peuvent être comparées à des boîtes dans lesquelles on range temporairement des informations.
Temporairement, car ces informations ne sont disponibles que durant l'exécution du programme PHP.
On parle de « variables » parce qu'on peut modifier le contenu de ces « boîtes » à tout moment.

Que stocker dans des variables ?

Les informations les plus fréquemment mémorisées dans des variables sont :
         du texte,
         des nombres,
         des valeurs logiques (vrai / faux),
         des dates et / ou des heures,
         etc.


Comment créer des variables en PHP ?

Pour créer des variables, on utilise la syntaxe suivante :
$mavariable = moncontenu;
où $mavariable est le nom de la variable et moncontenu... le contenu qui y est rangé.
Chaque variable possède un nom (de variable) qui permet de l'identifier. Ce nom est précédé du symbole $.
Quelques exemples :
$monprenom = "Roger";
$monage = 30;
$suisjebeau = true;

Le nom des variables en PHP

En PHP, on ne peut pas donner n'importe quel nom aux variablesNi utiliser n'importe quel caractère dans le nom d'une variable. Et encore moins commencer un nom de variable par n'importe quel caractère (par exemple, pas de chiffre en première position) !
Sachez également que les noms de variables sont sensibles à la casse. Ainsi $monnom et $monNom sont deux variables distinctes !
Quelques règles à respecter :
         Pas d'espace(s). Si nécessaire, utilisez des caractères de soulignement (_). Le tiret n'est pas autorisé.
         Pas d'accents ni de cédilles.
         Toujours $ comme premier caractère.
         Pas de chiffre juste après le $.
         Ne pas écrire le nom de la variable entièrement en majuscules.

Quiz

Lequel de ces noms de variable est correct ?
 $maVariable
 $ma Variable
 $ma-variable
Lequel de ces noms de variable est correct ?
 ma_variable
 $ ma_variable
 $ma_variable
Lequel de ces noms de variable est correct ?
 $1variable
 $mavariable
 mavariable$


Les chaînes de caractères

Une information composée de caractères est appelée chaîne de caractères.
Pour mémoriser une chaîne de caractères dans une variable, on entoure le texte à mémoriser de guillemets doubles ou simples.
$maPhrase = "Programmer n'est pas bien difficile";

Les valeurs numériques

Pour mémoriser des nombres, on les écrit simplement mais, s'ils contiennent une partie décimale, on utilisera le point plutôt que la virgule.
$Pi = 3.1415;

Les valeurs logiques

Les informations logiques (ou booléennes) ne peuvent prendre que deux valeurs différentes : vrai ou faux. En PHP, ce sera true ou false.
$vousEtesGeniaux = true;
$jeSuisLePlusFort = false;


Afficher le contenu d'une variable

Pour afficher le contenu d'une variable, on peut utiliser l'instruction echo de la manière suivante :
$maCouleurPreferee = "Bleu"; // Mémorisation du texte Bleu
echo $maCouleurPreferee; // Affichage du contenu de la variable

Une autre façon d'afficher une variable

On peut également utiliser la syntaxe suivante :
$motDePasse = "Sésame, ouvre-toi !";
echo "Le mot de passe est $motDePasse.";
Dans cette seconde syntaxe, la variable est située à l'intérieur d'une chaîne de caractères. Elle sera alors automatiquement remplacée par sa valeur lors de l'exécution du code.
Remarque : le remplacement du nom de la variable par son contenu ne fonctionne que si on utilise des guillemets doubles !


Mettre en forme l'affichage avec du HTML

Pour mettre en forme le texte affiché, on peut employer les balises HTML.
Exemple :
$motDePasse = "Sésame, ouvre-toi !";
echo "Le mot de passe est <b>$motDePasse</b>.";

Appliquez

Exerçons-nous à créer et afficher le contenu d'une variable.
Créez une variable dans laquelle vous mémoriserez le prénom 'Michel' et affichez la phrase 'Je m'appelle Michel'. Contrainte : le prénom doit être affiché en gras.


Manipuler des variables contenant des données numériques

On peut effectuer des opérations mathématiques sur les variables contenant des données numériques.
Par exemple :
$nombreJoursAnnee = 365;
$nombreHeuresJournee = 24;
$nombreHeuresAnnee = $nombreHeuresJournee * $nombreJoursAnnee;
Les opérateurs mathématiques élémentaires sont + (addition) - (soustraction) * (multiplication) et / (division). <?php

   $TVA = 21;
   $prixHTVA = 250;
   $prixTVAC = $prixHTVA * (1+($TVA / 100));
   echo "Pour un produit coûtant $prixHTVA euros dont la TVA est de $TVA %, il faudra payer $prixTVAC euros.";

?> Créez une variable dans laquelle vous mémoriserez le prénom « Michel » et affichez la phrase « Je m'appelle Michel ». Contrainte : le prénom doit être affiché en gras. <?php

$prenom = "Michel";
echo "Je m'appelle <b>$prenom</b>";

?> Écrivez un programme PHP qui mémorise un taux de TVA, un prix hors TVA et qui calcule (et affiche) le prix TVA comprise. <?php

   $TVA = 21;
   $prixHTVA = 250;
   $prixTVAC = $prixHTVA * (1+($TVA / 100));
   echo "Pour un produit coûtant $prixHTVA euros dont la TVA est de $TVA %, il faudra payer $prixTVAC euros.";

?> Manipuler des chaînes de caractères

Une opération fréquemment réalisée en programmation est la concaténation de chaînes de caractères. Il s'agit tout simplement d'assembler le contenu de deux variables pour n'en faire qu'une seule.
Exemple :
$debutPhrase = "Je suis content";
$finPhrase = "que vous me lisiez !";
$phraseComplete = $debutPhrase." ".$finPhrase; // entre les deux morceaux, un espace ;-)

L'opérateur permettant de concaténer deux (ou plusieurs) chaînes de caractères est le point (.)Appliquez

À vous de compléter le programme suivant qui contient quatre variables qu'il faut afficher dans le bon ordre afin de retrouver une citation célèbre
À vous de compléter le programme suivant qui contient quatre variables qu'il faut afficher dans le bon ordre afin de retrouver une citation célèbre. <?php

        $partie1 = "vous avez ";
        $partie2 = "de survivre.";
        $partie3 = "Mr Bond, ";
        $partie4 = "la mauvaise habitude ";
        echo $partie3.$partie1.$partie4.$partie2;

?> Conclusion

Dans ce module, nous avons vu :
         Comment créer des variables et y stocker des informations.
         Comment manipuler les différents types de variables.
Dans le module suivant, nous verrons comment récupérer et exploiter les données provenant d'un formulaire.

Mémo

         Un nom de variable commence toujours par le symbole $.
         Une chaîne de caractères est délimitée par des guillemets (simples ou doubles).
         Le symbole d'affectation d'une valeur est le signe égal (=). Exemple : $maVariable = "quelque chose";.
         Pour les nombres, le séparateur décimal est le point (.).
         Pour afficher le contenu d'une variable, on peut utiliser la commande echo. Exemple : echo $maVariable;.
         Pour concaténer deux chaînes de caractères, on utilise le point (.). Exemple : $ensemble = "papa" . " et " . "maman";.

Complément

Voici la liste des informations complémentaires et facultatives du module :
         La méthode PEMDAS

La méthode PEMDAS

Quand on effectue des opérations arithmétiques, il est vite important de savoir comment évaluer une expression mathématique du type $total = $prix * $nbre_articles - $ristourne * $nbre_articles.
Effectue-t-on les opérations en suivant : la multiplication puis la soustraction puis la seconde multiplication ? Ou procède-t-on différemment ?
Les programmes informatiques utilisent la méthode PEMDAS (pour Parenthèses, Exposant, Multiplication, Division, Addition, Soustraction) qui indique l'ordre de traitement des opérations.
Ainsi, dans notre exemple, il faut d'abord traiter les multiplications avant la soustraction.

La méthode PEMDAS sur Wikipédia

         Description assez approfondie de la méthode PEMDAS

Objectifs

Dans le module 1, nous avons appris à créer un formulaire permettant l'envoi de données. Dans ce module, nous allons voir comment réceptionner et analyser ces données au moyen des concepts suivants :
         Les fonctions, qui sont des outils puissants permettant de manipuler les données.
         Les structures conditionnelles qui vont nous permettre d'effectuer des tests.
Au niveau de l'application, il est important de pouvoir vérifier ce que l'utilisateur a encodé afin de ne pas « faire planter » le programme suite à l'envoi d'informations « farfelues » ou parce que certaines données seraient manquantes.

Qu'est-ce qu'une fonction ?

Une fonction est un ensemble d'instructions auquel on donne un nom. La fonction effectue une tâche déterminée et peut (mais ce n'est pas obligatoire) renvoyer un résultat.
Imaginez un ensemble d'instructions qui affiche trois messages d'accueil :
echo "Bonjour !";
echo "Bienvenue sur le système de lancement des missiles.";
echo "Entrez votre commande (si vous n'avez pas peur):";
On pourrait très bien nommer cet ensemble d'instructions inviteDeCommande (nom de fonction) et, lors de chaque appel (c'est comme cela qu'on nomme le fait d'exécuter une fonction), elle ferait le même traitement.
Quand il s'agira de « baptiser » nos propres fonctions, nous choisirons des noms explicites (parfois un peu longs) afin d'appréhender au premier coup d'œil leur utilité (par exemple : centrerTextecalculTVAaffichageTroisPremiersProduits).

Fonctions du langage ou fonctions utilisateur

Il existe deux types de fonctions :
         Les fonctions du langage ou fonctions pré-définies. Il s'agit de fonctions faisant partie du langage de programmation. On peut les appeler directementà tout endroit de l'application. Par exemple : date (qui affiche l'heure et / ou la date du jour / moment).
         Les fonctions utilisateur. Il s'agit de fonctions que l'utilisateur crée et utilise quand bon lui semble. Si un autre programmeur, dans une autre application, veut utiliser une fonction inventée par un collègue, il devra inclure la définition (le code) de la fonction dans son script pour pouvoir l'utiliser.

Exemple de fonction du langage

Il existe une fonction du langage qui affiche l'heure et / ou la date du moment / jour. Il s'agit de date.
Pour l'utiliser, on écrit simplement son nom avec, entre parenthèses, une chaîne de caractères renseignant ce qu'on désire obtenir comme information (l'heure et / ou la date). La fonction retournera alors l'information désirée.
Exemple :
$dateDuJour = date("d/m/Y");
echo "Nous sommes le $dateDuJour";
Ce qui affiche :
Pour information, le résultat affiche « 12/12/2013 » parce que l'exemple a été créé le 12 décembre 2013.

Les paramètres d'une fonction

Dans l'exemple précédent, lors de l'utilisation de la fonction date, nous avons fourni une chaîne de caractères entre parenthèses. Cette information est appelée un paramètre. Le (ou les) paramètres passés (entre parenthèses) à une fonction influencent le fonctionnement de cette dernière.
Ainsi d demande à la fonction de renvoyer le jour du mois (10), m le numéro du mois de l'année (01 pour janvier) et Y l'année sur 4 chiffres.
Modifions l'exemple précédent afin de tester d'autres paramètres (utilisons DM et Y) et un séparateur différent (- à la place de /).
Attention : la casse des paramètres de la fonction date est importante. Utiliser 'Y' ou 'y' donnera des résultats différents.
         d : le jour du mois sur deux chiffres.
         D : le jour de la semaine en trois lettres (et en anglais).
         m : le numéro du mois sur deux chiffres.
         M : le mois en trois lettres (et en anglais).
         y : l'année sur deux chiffres.
         Y : l'année sur quatre chiffres.
Modifiez l'exemple afin de tester d'autres paramètres (utilisez D, M et Y) et un séparateur différent (- à la place de /).
<?php

$dateDuJour = date("D-M-Y");
echo "Nous sommes le $dateDuJour";

? Autre exemple d'utilisation d'une fonction

Autre exemple de fonction du langage : var_dump. Cette fonction renvoie des informations concernant une variable.
Exemple :
$monPrenom = "Michel";
$infoVar = var_dump($monPrenom);
echo $infoVar;
Ce qui affiche :
         string signifie que la variable analysée ($monPrenom) est une chaîne de caractères (string).
         (6) indique le nombre de caractères contenus dans la variable.
         "Michel" est le contenu de la variable.
Cette fonction est utile lors de tests et de recherches d'erreur dans un programme.

Quiz

Quelle est la bonne façon d'utiliser la fonction var_dump ?
 var_dump($infoVar) = $maVariable;
 $infoVar = var_dump($maVariable);
 $infoVar = var_dump;
Quelle est la bonne façon d'utiliser la fonction date ?
 echo date("Y");
 echo date(Y);
 echo $date("Y");
Peut-on créer ses propres fonctions ?
 Oui
 Non

Appliquez

Dans cet exercice pratique, nous allons calculer votre âge (ou celui de quelqu'un d'autre).
Mémorisez l'année courante dans la variable $anneeCourante au moyen d'une fonction date et mémorisez l'année de naissance en l'encodant. Ensuite, affichez l'âge calculé. <?php

$anneeCourante = date("Y");
$anneeNaissance = 1971;
$age = $anneeCourante - $anneeNaissance;
echo "La personne est âgée de $age an(s)";

?> Les structures conditionnelles

Les structures conditionnelles permettent de tester des informations et d'agir en conséquence.
Par exemple :
Si l'âge est supérieur à 90 ans, afficher « Mon dieu que vous êtes âgé(e) ! » sinon afficher « Quel(le) gamin(e) ! »
On teste bien une information (l'âge) et on agit en conséquence (on affiche une phrase ou l'autre).

Les structures conditionnelles en PHP

En PHP, on utilise les commandes if et else qui signifient respectivement si et sinon.
Exemple :
$age = 45;
if ($age > 90)
{
   echo "Mon dieu que vous êtes âgé(e) !";
}
else
{
   echo "Quel(le) gamin(e) !";
}
Après avoir mémorisé un âge (45) dans une variable ($age), on effectue un test (est-ce que age est plus grand que 90 ?). Dans l'affirmative, on affiche "Mon dieu que vous êtes agé(e) !" et dans le cas contraire "Quel(le) gamin(e) !".
Les instructions liées à un if doivent être insérées entre une accolade ouvrante et une accolade fermante. Idem pour le else.
Que peut-on tester et comment ?
Tout. Ou presque :-)
Par exemple :
         Deux variables contiennent-elles la même information ou une information différente ?
         Une variable est-elle égalesupérieureinférieuresupérieur ou égaleinférieure ou égale à une certaine valeur ?
         Une variable logique est-elle vraie ? Fausse ?
         Etc.
Pour effectuer les tests, nous allons utiliser des opérateurs de comparaison.
==
est égal à
!=
est différent de
> 
est supérieur à
< 
est inférieur à
>=
est supérieur ou égal à
<=
est inférieur ou égal à
Exemple 1 :
if ($propositionJoueur == $reponseAttendue)...
Si la proposition du joueur égale la réponse attendue, alors...
Exemple 2 :
:
if ($motPasseEncode != $motPasseSysteme)...
Si le mot de passe encodé est différent du mot de passe du système, alors...
Exemple 3 :
if ($hauteurBuilding >= 800)...
Si la hauteur du building est supérieure ou égale à 800 (mètres), alors...
Exemple 4 :
if ($jeSuisLePlusFort == true)...

S'il est vrai que je suis le plus fort, alors... Structures conditionnelles complexes

On peut associer différentes comparaisons pour construire un test complexe.
On utilisera :
         and pour associer deux conditions au moyen d'un "et logique" (les deux conditions doivent être remplies).
         or pour associer deux conditions au moyen d'un "ou logique" (une des deux conditions doit être remplie ; ou les deux).
Par exemple : si le sexe est féminin et que l'âge est supérieur à 40 ans, afficher "On ne demande pas son âge à une dame !".
Ce qui se traduit en PHP comme suit :
$age = 60;
$sexe = "f";
if ($age>40 and $sexe=="f")
{
   echo "On ne demande pas son âge à une dame !";
}
Après avoir mémorisé l'âge (60) dans la variable $age et le sexe ("f") dans la variable $sexe, nous testons si l'âge est supérieur à 40 ET si le sexe est féminin. Dans l'affirmative, nous affichons le texte « On ne demande pas son âge à une dame ! ».
Il existe un second opérateur qui permet de lier des comparaisons. Il s'agit de or.
Que peut-on tester et comment ?
Tout. Ou presque :-)
Par exemple :
         Deux variables contiennent-elles la même information ou une information différente ?
         Une variable est-elle égalesupérieureinférieuresupérieur ou égaleinférieure ou égale à une certaine valeur ?
         Une variable logique est-elle vraie ? Fausse ?
         Etc.
Pour effectuer les tests, nous allons utiliser des opérateurs de comparaison.
==
est égal à
!=
est différent de
> 
est supérieur à
< 
est inférieur à
>=
est supérieur ou égal à
<=
est inférieur ou égal à
Exemple 1 :
if ($propositionJoueur == $reponseAttendue)...
Si la proposition du joueur égale la réponse attendue, alors...
Exemple 2 :
:
if ($motPasseEncode != $motPasseSysteme)...
Si le mot de passe encodé est différent du mot de passe du système, alors...
Exemple 3 :
if ($hauteurBuilding >= 800)...
Si la hauteur du building est supérieure ou égale à 800 (mètres), alors...
Exemple 4 :
if ($jeSuisLePlusFort == true)...

S'il est vrai que je suis le plus fort, alors... Structures conditionnelles complexes

On peut associer différentes comparaisons pour construire un test complexe.
On utilisera :
         and pour associer deux conditions au moyen d'un "et logique" (les deux conditions doivent être remplies).
         or pour associer deux conditions au moyen d'un "ou logique" (une des deux conditions doit être remplie ; ou les deux).
Par exemple : si le sexe est féminin et que l'âge est supérieur à 40 ans, afficher "On ne demande pas son âge à une dame !".
Ce qui se traduit en PHP comme suit :
$age = 60;
$sexe = "f";
if ($age>40 and $sexe=="f")
{
   echo "On ne demande pas son âge à une dame !";
}
Après avoir mémorisé l'âge (60) dans la variable $age et le sexe ("f") dans la variable $sexe, nous testons si l'âge est supérieur à 40 ET si le sexe est féminin. Dans l'affirmative, nous affichons le texte « On ne demande pas son âge à une dame ! ».
Il existe un second opérateur qui permet de lier des comparaisons. Il s'agit de or.

Vérification de l'existence d'information

Introduisons maintenant une autre fonction : isset.
Cette fonction va nous permettre de tester l'existence et le contenu d'une variable. Ce qui est important dans le cadre de l'application que nous envisageons d'écrire : il faut s'assurer que l'utilisateur envoie bien des informations exploitables par le biais du formulaire.
La fonction isset accepte comme paramètre une variable et renvoie la valeur logique true si la variable existe et contient autre chose que la valeur null (indiquant que la variable ne contient rien).
Exemple :
$nombrePizzasCommandees = 10;
$ilYaDuContenu = isset($nombrePizzasCommandees);
if ($ilYaDuContenu == true)
{
   echo "Des pizzas ont bien été commandées !";
}
else
{
   echo "Arrêtez la préparation ! La commande est vide !";
}
Que se passe-t-il si vous remplacez la première ligne par :
// $nombrePizzasCommandees = 10;

Réponse : Le message « Arrêtez la préparation ! La commande est vide ! » s'affiche dans le navigateur. Pourquoi vérifier qu'une variable existe ?

Il est particulièrement utile de vérifier qu'une variable existe dans le cas (entre autres) de la réception de données envoyées par un formulaire.
Ainsi nous pourrons vérifier que le formulaire a bien passé des informations.

Appliquez

Passons à un exercice pratique qui va nous permettre de vérifier qu'une information (un nom) a bien été encodée dans un formulaire.
Attention : pour des raisons techniques qui nous sont propres, nous employons la méthode $_POST dans l'exercice.
Complétez ce programme afin qu'il vérifie que l'utilisateur a bien encodé quelque chose dans le champ nom du formulaire. <?php

$contenuChampNom = $_POST["nom"];
$champNomExiste = isset($contenuChampNom);

if ($champNomExiste == true and $contenuChampNom != "")
{
   echo "Le champ nom existe et a bien été reçu. Sa valeur est $contenuChampNom";
}
else
{
   echo "Le champ nom n'existe pas ou ne contient rien !";
}

?>

Objectifs

Dans ce module, nous allons apprendre ce que sont les bases de données et leurs différents composants.
Nous verrons également ce qu'est le langage SQL et comment construire une requête qui nous permettra d'interroger notre base de données.
Du point de vue de notre application, il faut savoir comment les informations sont mémorisées de façon permanente et comment procéder pour retrouver celles demandées par l'utilisateur.

Qu'est-ce qu'une base de données ?

Une base de données est un élément informatique permettant de mémoriser et d'organiser efficacement et de façon permanente des informations.
Exemple de bases de données : pour une société X, l'identité de clients, leurs commandes, leurs livraisons, le stock des produits (état, prix, localisation), les factures émises, etc.

Qu'est-ce qu'une table ?

Dans une base de données, les informations d'une certaine entité sont regroupées dans une table. Par exemple, les données identifiant les clients (nom, prénom, adresse, n° de client, n° de téléphone, etc.) peuvent être mémorisées dans une table nommée clients.
Une base de données est généralement constituée de plusieurs tables.
Exemple de table :
Cette table pourrait contenir les données suivantes :
001 JAMES BOND THAMES HOUSE LONDRES
002 MICHEL DUPONT 25 RUE D'HERGE 1000 BRUXELLES
003 ANNE SISTER 33 RUE DE L'ANGE 6001 MARCINELLE
004 DIMITRI LOVKEOLOV 374 RUE DU FORT 7000 MONS

Que sont les enregistrements et les champs ?

Une table est composée de lignes et de colonnes.
Dans une table, les données mémorisant une certaine catégorie (nom, prénom, adresse) d'information sont appelées des champs.
L'ensemble des données des champs constitutifs d'une table qui identifent un élément précis est appelé enregistrement.

Quiz

Une base de données est constituées de...
 chaises
 tables
 bases
Si une table mémorise les informations des clients (nom, adresse, etc.), quel élément contiendra le nom et l'adresse du client Michel Dupont ?
 Un champ
 Un enregistrement

Le langage SQL

Le langage PHP est fréquemment associé au langage SQL.
SQL est un langage informatique permettant d'interroger une base de données afin d'en extraire des informations. Ce langage permet également d'ajouter, de supprimer, de modifier et d'organiser / structurer les données.
Le langage PHP s'appuie sur le langage SQL pour interroger et / ou modifier les informations présentes dans les bases de données.

Les requêtes SQL

Une requête SQL peut se présenter sous la forme d'une question qu'on envoie à la base de données afin d'en obtenir, en réponse, une série d'informations.
Exemple de requête SQL qui va renvoyer la liste des noms des clients (présents dans la table table_clients) qui ont Laurent comme prénom :
SELECT nom FROM table_clients WHERE prenom = 'Laurent'

En SQL, on utilise beaucoup le simple guillemet pour délimiter les chaînes de caractères à faire figurer dans une requête. L'interrogation d'une base de données, en théorie

Interroger une base de données consiste à envoyer une requête (« Dis-moi quels sont les produits de moins de 100 euros ! ») au serveur informatique qui héberge la base de données, le SGBD (Système de Gestion de Base de Données). Ce dernier, par le biais d'une application spécifique, traite la demande et renvoie les résultats au programme demandeur.
(1) Le programme informatique (écrit en PHP) envoie une requête SQL au serveur hébergeant la base de données.
(2) La base de données est manipulée en suivant les instructions (consignes) de la requête SQL.
(3) Le résultat est envoyé sous forme de liste au programme informatique PHP qui va se charger du formatage.

L'interrogation d'une base de données, en pratique

En SQL, l'interrogation de la base de données suivra généralement le processus suivant :
1.   Connexion à la base de données.
2.   Construction de la requête SQL.
3.   Envoi de la requête SQL vers la base de données.
4.   Traitement des résultats renvoyés.
5.   Déconnexion de la base de données.

Quiz

Quel langage effectue l'interrogation de la base de données ?
 SQL
 PHP
Comment s'appelle l'opération d'interrogation d'une base de données SQL ?
 Une requête
 Une sollicitation
 Une interrogation

Construire des requêtes SQL

Dans cette partie du module, nous allons voir comment créer des requêtes simples. Dans le module suivant, nous verrons comment nous connecter à une base de données et récupérer les données provenant d'une requête SQL.
Les requêtes SQL permettent également de modifier, de supprimer et d'ajouter des données dans une base de données.

La commande SELECT

Les requêtes d'interrogation SQL commencent par l'instruction SELECT.
Exemple :
SELECT nom FROM table_clients WHERE prenom = 'Laurent'

La commande SELECT est suivie du nom des champs dont il faut afficher le contenu. Vient ensuite FROM suivi du nom de la table concernée (plusieurs tables peuvent être renseignées à condition de les séparer par une virgule). L'opérateur *

L'opérateur * indique qu'on veut l'ensemble des données (tous les champs) : toutes les informations.
Si on veut récupérer toutes les informations de la table table_clients, on écrira :
SELECT * FROM table_clients
On récupèrera ainsi le contenu de tous les champs de la table table_clients.
L'opérateur * est bien pratique mais, par la suite, pour un développement en production, on conseille toujours de mentionner uniquement les champs que l'on désire récupérer.

Comment procéder ?

Tout d'abord, nous allons mémoriser la requête SQL dans une variable.
$marequete = "SELECT nom,prenom FROM table_clients";
Ici, notre requête demande le renvoi des noms et des prénoms apparaissant dans la table table_clients.
Notez que les différents champs doivent être séparés par une virgule.
Ensuite, nous enverrons la requête au serveur hébergeant la base de données.
$resultatRequete = $pdo->query($marequete);
$pdo->query($marequete) signifie " Envoie la requête contenue dans la variable $marequete au serveur hébergeant la base de données au moyen de la méthode query de l'objet $pdo."
Remarque : en vulgarisant, on peut « dire » qu'une méthode est une fonction (liée à un objet).

Appliquez : première requête

Imaginons que nous hébergeons une base de données contenant une table nommée produits et que nous désirions afficher le contenu des champs description, marque et pu (prix unitaire) de tous les enregistrements.
Quelle requête SQL faudra-t-il écrire ?
À vous de jouer.
Imaginons que nous hébergeons une base de données contenant une table nommée produits et que nous désirions afficher le contenu des champs description, marque et pu (prix unitaire) de tous les enregistrements. <?php

// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// CONNEXION A LA BASE DE DONNEES (SERA VU AU MODULE 5)

$basededonnees = "mysql:host=localhost;dbname=appliquez-php";
$identifiant = "php";
$motdepasse = "password";
$pdo = new PDO($basededonnees, $identifiant, $motdepasse);

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)



$requete = " ";



// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// TRAITEMENT DES RESULTATS RECUS (SERA VU AU MODULE 5)

$produits = $pdo->query($requete);
$produits = $pdo->query($requete);
foreach($produits as $produit){

  echo $produit['description']." ";
  echo $produit['marque']." ";
  echo $produit['pu']." euros<br />";
}

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)

 ?> <?php

// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// CONNEXION A LA BASE DE DONNEES (SERA VU AU MODULE 5)

$basededonnees = "mysql:host=localhost;dbname=appliquez-php";
$identifiant = "php";
$motdepasse = "password";
$pdo = new PDO($basededonnees, $identifiant, $motdepasse);

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)



$requete = "SELECT description,marque,pu FROM produits ";



// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// TRAITEMENT DES RESULTATS RECUS (SERA VU AU MODULE 5)

$produits = $pdo->query($requete);
foreach($produits as $produit){

  echo $produit['description']." ";
  echo $produit['marque']." ";
  echo $produit['pu']." euros<br />";

  }

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)

 ?> La clause WHERE

Il est courant qu'on recherche des résultats répondant à un certain critère. Par exemple, tous les produits dont le prix est égal à 10 euros.
La clause WHERE est parfaite pour cet usage.
Exemple :
SELECT nomproduit FROM produits WHERE prix = 10

Appliquez : requête avec condition

C'est le moment de vous exercer.
Sur base de l'exemple précédent, essayez d'écrire la requête SQL qui affichera la liste des produits dont le prix est de maximum 20 euros. Le champ de la table produits qui contient le prix s'appelle pu (prix unitaire).
Rédigez la requête SQL qui affichera la liste des produits dont le prix est de maximum 20 euros. Le champ de la table produits qui contient le prix s'appelle pu (prix unitaire). <?php

// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// CONNEXION A LA BASE DE DONNEES (SERA VU AU MODULE 5)

$basededonnees = "mysql:host=localhost;dbname=appliquez-php";
$identifiant = "php";
$motdepasse = "password";
$pdo = new PDO($basededonnees, $identifiant, $motdepasse);

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)



$requete = "SELECT * FROM produits";



// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// TRAITEMENT DES RESULTATS RECUS (SERA VU AU MODULE 5)

$produits = $pdo->query($requete);
foreach($produits as $produit){

  echo $produit['description']." ";
  echo $produit['marque']." ";
  echo $produit['pu']." euros <br />";
}

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)

 ?> <?php

// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// CONNEXION A LA BASE DE DONNEES (SERA VU AU MODULE 5)

$basededonnees = "mysql:host=localhost;dbname=appliquez-php";
$identifiant = "php";
$motdepasse = "password";
$pdo = new PDO($basededonnees, $identifiant, $motdepasse);

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)



$requete = "SELECT * FROM produits WHERE pu <= 20";



// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// TRAITEMENT DES RESULTATS RECUS (SERA VU AU MODULE 5)

$produits = $pdo->query($requete);
foreach($produits as $produit){
  echo $produit['description']." ";
  echo $produit['marque']." ";
  echo $produit['pu']." euros <br />";
}

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)

 ?>

La clause ORDER BY

Une requête SQL permet de renvoyer des informations extraites d'une base de données en suivant certaines conditions. Une requête SQL peut également fournir ces informations triées selon un ou plusieurs critères !
Pour trier les informations reçues, nous utiliserons la clause ORDER BY suivie du champ sur lequel doit s'effectuer le tri en terminant par ASC pour un tri croissant et DESC pour un tri décroissant.
Exemple d'une requête retournant les informations de la table table_clients triées par ordre croissant des noms.
SELECT * FROM table_clients ORDER BY nom_client ASC

Remarque : si le paramètre de tri n'est pas spécifié, c'est ASC qui est utilisé par défaut. Appliquez : un peu d'ordre

Et si nous améliorions notre précédent exercice en triant les résultats par ordre décroissant de prix (du plus cher au moins cher) avec un prix maximum de 100 euros ?
Respectez l'ordre des mots-clés utilisés dans la requête SQL : SELECT puis FROM puis WHERE puis ORDER BY.
Améliorions notre exercice en triant les résultats par ordre décroissant de prix (du plus cher au moins cher) avec un prix maximum de 100 euros. <?php

// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// CONNEXION A LA BASE DE DONNEES (SERA VU AU MODULE 5)

$basededonnees = "mysql:host=localhost;dbname=appliquez-php";
$identifiant = "php";
$motdepasse = "password";
$pdo = new PDO($basededonnees, $identifiant, $motdepasse);

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)

$requete = "SELECT * FROM produits WHERE produits.pu <= 20";

// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// TRAITEMENT DES RESULTATS RECUS (SERA VU AU MODULE 5)

$produits = $pdo->query($requete);
foreach($produits as $produit){
 
  echo $produit['description']." ";
  echo $produit['marque']." ";
  echo $produit['pu']." euros <br />";
}

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)

 ?> <?php

// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// CONNEXION A LA BASE DE DONNEES (SERA VU AU MODULE 5)

$basededonnees = "mysql:host=localhost;dbname=appliquez-php";
$identifiant = "php";
$motdepasse = "password";
$pdo = new PDO($basededonnees, $identifiant, $motdepasse);

$requete = "SELECT * FROM produits WHERE pu <=100 ORDER BY pu DESC";

$produits = $pdo->query($requete);
foreach($produits as $produit){
 
  echo $produit['description']." ";
  echo $produit['marque']." ";
  echo $produit['pu']." euros <br />";
}

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)

 ?> Quiz

Quel est l'opérateur SQL qui permet de sélectionner toutes les données ?
 *
 +
 $
Pour trier les résultats d'une requête par ordre décroissant, on utilise le mot...
 ASC
 DESC
 UP
 DOWN
Les requêtes SQL font partie du langage PHP.
 Faux
 Vrai

Conclusion

Nous venons de voir comment concevoir des requêtes SQL élémentaires et comment les transmettre au serveur hébergeant notre base de données.
Dans le module suivant, nous verrons comment créer des tableaux et exécuter des actions répétitives, concepts important dans le cadre de l'utilisation d'une base de données.

Mémo

         Une requête SQL d'interrogation commence par SELECT.
         L'opérateur * permet de sélectionner toutes les informations (tous les champs).
         Le mot-clé FROM permet d'indiquer dans quelle table la requête doit porter.
         Le mot-clé WHERE suivi d'une condition permet de filtrer les résultats.
         La clause ORDER BY suivie d'un nom de champ permet de trier les résultats sur base du champ indiqué.
         Les mots-clés ASC et DESC permettent d'indiquer dans quel sens doit s'effectuer le tri.
         Exemple de requête : SELECT champ1,champ2,champ3... FROM table WHERE condition ORDER BY champ.
         Respecter l'ordre d'apparition des mots-clés : SELECT puis FROM puis WHERE puis ORDER BY.

Complément

Voici la liste des informations complémentaires facultatives :
         Ressources MySQL


Ressources MySQL

Dans ce cours, nous avons pris le parti d'utiliser MySQL comme système de gestion des bases de données.

Site officiel de MySQL

         La principale ressource à consulter concernant MySQL est bien évidemment le site officiel et particulièrement la section Documentation.

PHP et MySQL

         Pour l'interaction entre PHP et MySQL, je vous invite à consulter cette page.

Enoncé de l'exercice

Rédigez la requête SQL qui affichera la liste des produits dont le prix est de maximum 20 euros. Le champ de la table produits qui contient le prix s'appelle pu (prix unitaire).
<?php

// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// CONNEXION A LA BASE DE DONNEES (SERA VU AU MODULE 5)

$basededonnees = "mysql:host=localhost;dbname=appliquez-php";
$identifiant = "php";
$motdepasse = "password";
$pdo = new PDO($basededonnees, $identifiant, $motdepasse);

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)



$requete = "SELECT * FROM produits";



// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// TRAITEMENT DES RESULTATS RECUS (SERA VU AU MODULE 5)

$produits = $pdo->query($requete);
foreach($produits as $produit){

  echo $produit['description']." ";
  echo $produit['marque']." ";
  echo $produit['pu']." euros <br />";
}

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)

 ?>
// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// CONNEXION A LA BASE DE DONNEES (SERA VU AU MODULE 5)

$basededonnees = "mysql:host=localhost;dbname=appliquez-php";
$identifiant = "php";
$motdepasse = "password";
$pdo = new PDO($basededonnees, $identifiant, $motdepasse);

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)



$requete = "SELECT * FROM produits WHERE pu <= 20";



// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// TRAITEMENT DES RESULTATS RECUS (SERA VU AU MODULE 5)

$produits = $pdo->query($requete);
foreach($produits as $produit){
  echo $produit['description']." ";
  echo $produit['marque']." ";
  echo $produit['pu']." euros <br />";
}

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)

 ?> Enoncé de l'exercice

Imaginons que nous hébergeons une base de données contenant une table nommée produits et que nous désirions afficher le contenu des champs description, marque et pu (prix unitaire) de tous les enregistrements.
<?php

// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// CONNEXION A LA BASE DE DONNEES (SERA VU AU MODULE 5)

$basededonnees = "mysql:host=localhost;dbname=appliquez-php";
$identifiant = "php";
$motdepasse = "password";
$pdo = new PDO($basededonnees, $identifiant, $motdepasse);

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)



$requete = " ";



// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// TRAITEMENT DES RESULTATS RECUS (SERA VU AU MODULE 5)

$produits = $pdo->query($requete);
$produits = $pdo->query($requete);
foreach($produits as $produit){

  echo $produit['description']." ";
  echo $produit['marque']." ";
  echo $produit['pu']." euros<br />";
}

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)

 ?> <?php

// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// CONNEXION A LA BASE DE DONNEES (SERA VU AU MODULE 5)

$basededonnees = "mysql:host=localhost;dbname=appliquez-php";
$identifiant = "php";
$motdepasse = "password";
$pdo = new PDO($basededonnees, $identifiant, $motdepasse);

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)



$requete = "SELECT description,marque,pu FROM produits ";



// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// TRAITEMENT DES RESULTATS RECUS (SERA VU AU MODULE 5)

$produits = $pdo->query($requete);
foreach($produits as $produit){

  echo $produit['description']." ";
  echo $produit['marque']." ";
  echo $produit['pu']." euros<br />";

  }

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)

 ?> Enoncé de l'exercice

Améliorions notre exercice en triant les résultats par ordre décroissant de prix (du plus cher au moins cher) avec un prix maximum de 100 euros.
<?php

// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// CONNEXION A LA BASE DE DONNEES (SERA VU AU MODULE 5)

$basededonnees = "mysql:host=localhost;dbname=appliquez-php";
$identifiant = "php";
$motdepasse = "password";
$pdo = new PDO($basededonnees, $identifiant, $motdepasse);

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)

$requete = "SELECT * FROM produits WHERE produits.pu <= 20";

// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// TRAITEMENT DES RESULTATS RECUS (SERA VU AU MODULE 5)

$produits = $pdo->query($requete);
foreach($produits as $produit){
 
  echo $produit['description']." ";
  echo $produit['marque']." ";
  echo $produit['pu']." euros <br />";
}

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)

 ?> <?php

// NE VOUS INQUIETEZ PAS DE CE QUI SUIT :-)
// CONNEXION A LA BASE DE DONNEES (SERA VU AU MODULE 5)

$basededonnees = "mysql:host=localhost;dbname=appliquez-php";
$identifiant = "php";
$motdepasse = "password";
$pdo = new PDO($basededonnees, $identifiant, $motdepasse);

$requete = "SELECT * FROM produits WHERE pu <=100 ORDER BY pu DESC";

$produits = $pdo->query($requete);
foreach($produits as $produit){
 
  echo $produit['description']." ";
  echo $produit['marque']." ";
  echo $produit['pu']." euros <br />";
}

// NE VOUS INQUIETEZ PAS DE CE QUI PRECEDE :-)

 ?>

Objectifs

Dans ce module, nous allons aborder les tableaux, les variables superglobales et la boucle foreach.
La compréhension des tableaux permettra d'aborder les variables superglobales qui sont des tableaux particuliers.
La maîtrise de la boucle tant que est nécessaire pour automatiser la lecture des résultats retournés lors de l'interrogation d'une base de données.
Ces différentes notions sont la base du module suivant.

Les tableaux

Les tableaux sont des variables particulièresN'essayez pas de faire un parallèle avec les tableaux des tableurs ou les tableaux HTML : il s'agit ici d'une notion spécifique à la programmation.
Imaginez un ensemble de boîtes collées les unes aux autres. L'ensemble porte un seul nom (le nom du tableau) et chaque boîte est référencée par un numéro (en commençant par zéro).
Chaque « boîte » composant le tableau peut contenir une information.
Par exemple :
Chaque « boîte » d'un tableau est appelée cellule. Un tel tableau est appelé tableau scalaire.

Création d'un tableau en PHP

Pour créer un tableau, on procédera de la manière suivante :
$tableauJours = array();
$tableauJours[0] = "Lundi";
$tableauJours[1] = "Mardi";
$tableauJours[2] = "Mercredi";
$tableauJours[3] = "Jeudi";
$tableauJours[4] = "Vendredi";
Mais il est aussi possible de procéder comme suit :
$tableauJours = array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi");
La seconde méthode est plus économe en écriture.
Le mot array signifie 'tableau'.
Enfin, on affichera le contenu d'une cellule de la manière suivante :
echo $tableauJours[3];

Appliquez

Écrivez un programme qui mémorise dans un tableau le nom des quatre saisons de l'année et les affiche de la manière suivante : printemps - été - automne - hiver.
<?php

                $tableauSaisons = array(   );
                echo "   ";

?>    <?php

                $tableauSaisons = array("printemps","été","automne","hiver");
                echo "$tableauSaisons[0] - $tableauSaisons[1] - $tableauSaisons[2] - $tableauSaisons[3]";

?> Manipulation d'un tableau

On manipule les cellules d'un tableau comme s'il s'agissait de variables « classiques ».
Par exemple :
// Soit un tableau contenant le nombre de jours dans un mois
// La première cellule du tableau contient le nombre de jour du mois de Janvier
// La seconde cellule du tableau contient le nombre de jour du mois de Février
// Et ainsi de suite...
$joursMoisAnnee2013 = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30,31);
$totalJoursPremierTrimestre2013 = $joursMoisAnnee2013[0]+$joursMoisAnnee2013[1]+$joursMoisAnnee2013[2];

Appliquez

Complétez le programme suivant afin d'afficher la moyenne d'âge des hommes et la moyenne d'âge des femmes.
<?php

    $tableauAgesHommes = array(25, 20, 65);
    $tableauAgesFemmes = array(40, 15, 75);
    $moyenneAgeHommes = ;
    $moyenneAgeFemmes = ;
    echo "L'âge moyen des femmes est de $moyenneAgeFemmes ans.<br />";
    echo "L'âge moyen des hommes est de $moyenneAgeHommes ans.";

?> <?php

    $tableauAgesHommes = array(25, 20, 65);
    $tableauAgesFemmes = array(40, 15, 75);
    $moyenneAgeHommes = ($tableauAgesHommes[0] + $tableauAgesHommes[1] + $tableauAgesHommes[2]) / 3;
    $moyenneAgeFemmes = ($tableauAgesFemmes[0] + $tableauAgesFemmes[1] + $tableauAgesFemmes[2]) / 3;
    echo "L'âge moyen des femmes est de $moyenneAgeFemmes ans.<br />";
    echo "L'âge moyen des hommes est de $moyenneAgeHommes ans.";

?> Les tableaux associatifs

Les tableaux associatifs sont des tableaux pour lesquels chaque cellule est indicée non par un nombre mais par une autre information (un mot par exemple).
Exemple :
Pour afficher l'âge d'Isabelle, par exemple, on peut procéder comme suit :
echo $tableauAges["Isabelle"];

Créer un tableau associatif

Pour créer le tableau associatif vu précédemment, on peut écrire :
$tableauAges = array("Alain" => 65, "Marc" => 41, "Isabelle" => 60, "Nicole" => 25,"Laurent" => 40);
L'écriture suivante ajoute de la lisibilité au code :
$tableauAges = array(
"Alain" => 65,
"Marc" => 41,
"Isabelle" => 60,
"Nicole" => 25,
"Laurent" => 40
);

Vous remarquez que les caractères => lient l'indice de la cellule à sa valeur. Appliquez

Écrivez un programme qui mémorise les codes postaux de grandes villes belges (Charleroi, Mons, Bruxelles, Liège) à l'aide d'un tableau associatif et qui affiche le code postal de Bruxelles.
<?php

                $tableauCP = array("Charleroi"=>    ,      =>7000,          =>    ,"Liege"=>4000);
                echo "Le code postal de Bruxelles est ".$tableauCP["Bruxelles"];

?>   <?php

                $tableauCP = array("Charleroi"=>6000,"Mons"=>7000,"Bruxelles"=>1000,"Liege"=>4000);
                echo "Le code postal de Bruxelles est ".$tableauCP["Bruxelles"];

?> Les variables superglobales

Les données envoyées à une page PHP au moyen d'un formulaire (avec la méthode GET) sont stockées automatiquement dans une variable particulière nommée $_GET.
La variable $_GET est une variable superglobale.
         Les variables superglobales s'écrivent en majuscules.
         Le nom des variables superglobales commence par un $_.
         Les variables superglobales sont des tableaux.
         Les variables superglobales sont accessibles partout dans le script PHP (d'où leur nom) !
$_GET est un tableau associatif dont les indices des cellules sont les noms des éléments du formulaire (champs, cases à cocher, boutons d'option, etc.)
Ainsi, l'envoi des données encodées dans le formulaire formulaire.php créera un tableau associatif nommé $_GET composé de deux cellules : $_GET["Nom"] et $_GET["Prénom"]. Ces cellules contiendront (selon l'exemple) respectivement les valeurs "Rock" et "Alain".

Les structures répétitives

Il est souvent nécessaire de répéter un même traitement, un certain nombre de fois.
Plutôt que d'écrire plusieurs fois les lignes de code correspondant à ce traitement, le programmeur utilise une structure répétitive dans laquelle on écrit qu'une seule fois le traitement mais dans laquelle on indique le nombre (ou la condition) de répétitions.
Dans ce cours, nous emploierons la structure répétitive foreach(). Sachez cependant qu'il existe d'autres structures répétitives comme while() ("Tant que"), par exemple.
Cette structure répétitive est aussi appelée boucle.

Utilisation et fonctionnement de foreach()

L'instruction foreach() permet de parcourir aisément une collection d'éléments (un tableau dont on ne connait pas la taille par exemple).
Son utilisation est la suivante :
Pour chaque élément du tableau :
- Faire ceci
- Faire cela
Ce qui peut se traduire en PHP par :
$tableau_saisons = array("printemps", "été", "automne", "hiver");
foreach($tableau_saisons as $element_tableau){
    echo $element_tableau;
}
echo "C'est fini !";
Explications :
         La boucle foreach va parcourir tous les éléments du tableau ($tableau_saisons).
         Dans notre exemple, il y a quatre éléments. La boucle effectuera donc quatre itérations.
         À chaque itération, le contenu de la variable $element_tableau contiendra la valeur d'un élément du tableau (lors du premier passage "printemps", lors du deuxième passage "été", etc.)
         Quand tous les éléments du tableau auront été traités, la boucle sera terminée et le traitement continuera avec l'exécution de l'instruction suivante (echo "C'est fini !";)
Ce qui affiche :

Appliquez : une petite boucle

Nous vous proposons d'améliorer le programme présenté précédemment afin d'afficher chaque saison sur une ligne différente et avec un numéro d'ordre.
<?php
$tableau_saisons = array("printemps","été","automne","hiver");

foreach($tableau_saisons as $element_tableau){

echo $element_tableau;

}
 ?> <?php

$tableau_saisons = array("printemps","été","automne","hiver");

echo "<ol>";

foreach($tableau_saisons as $element_tableau){

echo "<li>".$element_tableau."</li>";

}

echo "</ol>";

?> Conclusion

Les tableaux sont très pratiques pour organiser le stockage d'information : ils permettent de ranger les données et de les retrouver au moyen d'un indice.
La boucle foreach() est également très utile car elle permet d'éviter la répétition de code.
Ces deux notions sont essentielles en programmation et particulièrement dans le cas qui nous intéresse : la conception de l'application qui permet de consulter le stock d'un magasin d'articles de sport.

Mémo

         Un tableau est une collection de variables (les cellules) portant le même nom mais différenciées par un indice.
         On peut créer un tableau comme suit $tableau[0] = "Mercure"; ou de la manière suivante $tableau = array("Mercure", "Vénus", "Terre");.
         Un tableau associatif est un tableau où l'indice n'est pas un nombre mais un mot clé.
         On peut créer un tableau associatif comme suit $tableau["planete1"] = "Mercure"; ou de la manière suivante $tableau = array("planete1" => "Mercure", "planete2" => "Venus", "planete3" => "Terre");.
         Une variable superglobale est une variable dont le contenu est accessible à tous les niveaux d'un script.
         La variable $_GET est une variable superglobale créée par le système PHP lors de l'envoi d'informations par le biais d'un formulaire HTML utilisant la méthode GET comme méthode d'envoi des données.
         Pour accéder au contenu du champ "prénom" d'un formulaire HTML, on peut faire référence à la variable superglobale $_GET["prenom"].
         La boucle foreach() est une structure répétitive qui permet d'exécuter un même traitement, un certain nombre de fois.
         La boucle foreach() se met en place de la manière suivante foreach($nom_tableau as $element_extrait){instructions;...}.

Complément

Voici la liste des informations complémentaires et facultatives de ce module.
         Les autres boucles en PHP

Les autres boucles en PHP

Dans ce module, nous avons abordé la boucle foreach(), très pratique pour parcourir tous les éléments d'un tableau.
Il existe d'autres types de boucles : la boucle « tant que... faire... » (while()), la boucle « répéter... jusqu'à ce que... » (do while()) et la boucle for().

La boucle while()

         Description de la boucle while() dans le manuel en ligne de PHP.

La boucle do...while()

         Description de la boucle do...while() dans le manuel en ligne de PHP.

La boucle for()

         Description de la boucle for() dans le manuel en ligne de PHP.

Objectifs

Dans ce module, nous allons apprendre à exploiter les données mémorisées dans une base de données.
Pour cela, nous allons devoir :
         lire les résultats retournés par une requête SQL,
         prendre les résultats les uns après les autres et les afficher sous forme d'une liste.
Dans l'application, il est important de récupérer les données intéressantes stockées dans la base de données et souhaitées par l'utilisateur. Comme les données arrivent sous un format particulier, il est important de savoir comment les exploiter afin de les fournir au client.


L'extension PDO

Pour nous connecter à une base de données, nous allons utiliser une extension du langage PHP nommée PDO.
L'extension PDO est un composant courant du langage qui contient une série d'instructions permettant la connexion et l'interaction avec des bases de données.
PDO est une extension uniforme d'accès aux bases de données : la façon de coder en PHP ne dépend donc plus du logiciel de gestion de base de données choisi. C'est la même procédure que l'on utilise MySQL, Oracle, MSSQL ou SQLite.
Par souci de simplicité, nous avons choisi d'utiliser le code minimum pour se connecter à une base de données au moyen de l'objet PDO. Sachez que l'objet PDO est plus complexe qu'il n'y paraît : il peut notamment gérer les erreurs de connexion, les tentatives de piratage par injection de code SQL, etc.

Pré requis à la connexion

Pour nous connecter à une base de données MySQL, nous avons besoin de connaître une série d'informations importantes :
         Le nom du serveur (l'hôte) qui héberge la base de données.
         Le nom de la base de données.
         Un nom d'utilisateur autorisé à accéder à la base de données.
         Le mot de passe de l'utilisateur.

Quiz

Pour interagir avec une base de données, il faut...
 établir une connexion
 d'abord envoyer sa ou ses requêtes
L'extension utilisée pour la connexion à une base de données se nomme
 SQL
 DB extend
 PDO

Se connecter en PHP (1/3)

Il est courant de mémoriser dans une variable les informations importantes de connexion. Cela permet d'éviter d'introduire ces informations plusieurs fois.
Nous avons choisi d'appeler cette variable $sourceDeDonnees et voici comment nous mémoriserons les informations de connexion :
$sourceDeDonnees = "mysql:host=localhost;dbname=mabasededonnees";
Décomposons le contenu de la variable $sourceDeDonnees :
         Deux informations sont séparées par un point-virgule : le nom serveur qui héberge la base de données et le nom de la base de données.
         Le nom du serveur est composé de deux parties : le mot mysql:host= qui indique qu'il s'agit de l'hébergement d'une base de données au format MySQL et le nom proprement dit du serveur.
         Le nom du serveur est généralement donné par la société à laquelle on loue un hébergement. En l'absence de cette information, le mot-clé localhost fonctionne dans la plupart des cas.

Se connecter en PHP (2/3)

Nous mémorisons maintenant les données relatives à l'utilisateur.
$utilisateur = "james";
$motPasseUtilisateur = "007";


Se connecter en PHP (3/3)

Et maintenant, place à la connexion proprement dite !
Dans notre cas, la connexion s'effectuera de la façon suivante :
$connexion = new PDO($sourceDeDonnees, $utilisateur, $motPasseUtilisateur);
La variable $connexion va contenir un objet lié à la connexion à la base de données. Nous exploiterons cet objetpour lire les données de la base de données.
Nous ne traiterons pas des détails des objets et des extensions.
Après l'exécution de cette ligne d'instruction, nous sommes connectés à la base de données !
new PDO est une commande qui crée un objet de type PDO (PHP Data Objects).

Quiz

Les trois données à fournir à l'objet PDO pour se connecter sont...
 Le nom du serveur, le nom de la base de données et le mot de passe du serveur.
 La source des données, le nom d'utilisateur et le mot de passe de l'utilisateur.
 La source de données, le nom de la base de données et le mot de passe de la base de données.
Les deux informations contenues dans la variable contenant la source de données sont séparées par
 un double-point
 une virgule
 un point-virgule

Appliquez : se connecter

Voici les dénominations nécessaires pour vous connecter :
         Serveur hôte : localhost
         Base de données : appliquez-php
         Nom d'utilisateur : php
         Mot de passe de l'utilisateur : password
À vous de modifier le code source pour que le programme fonctionne.

Enoncé de l'exercice

À vous de modifier le code source pour que le programme fonctionne.
<?php


 ?>
$requete = "SELECT * FROM produits";

$resultats = $connexion->query($requete);

foreach($resultats as $elementLu){

  echo $elementLu['description']." ";
  echo $elementLu['marque']." ";
  echo $elementLu['pu']." euros <br />";
 
}<?php

$sourceDeDonnees = "mysql:host=localhost;dbname=appliquez-php";
$utilisateur = "php";
$motPasseUtilisateur = "password";
$connexion = new PDO($sourceDeDonnees, $utilisateur, $motPasseUtilisateur);

$requete = "SELECT * FROM produits";

$resultats = $connexion->query($requete);

foreach($resultats as $elementLu){

  echo $elementLu['description']." ";
  echo $elementLu['marque']." ";
  echo $elementLu['pu']." euros <br />";
  
}


 ?> Quiz

Quelle information identifie généralement le nom du serveur ?
 host
 localserver
 localhost


Exécuter une requête SQL

Dans le module 4, nous avons testé différentes requêtes SQL.
Une fois de plus, nous mémorisons la requête dans une variable afin de ne pas avoir à la retaper si le besoin se présentait.
$requete = "SELECT * FROM produits";
Pour envoyer la requête à la base de données, nous utilisons la méthode query de l'objet PDO de la manière suivante :
$resultats = $connexion->query($requete);
La notation -> signifie qu'on utilise les informations contenues dans la variable $connexion pour effectuer une requête (query en anglais) sur la base de données.
En fait, on appelle la méthode query de l'objet $connexion. Une méthode s'apparente à une fonction attachée à un objet / à une classe.

Retour des résultats

Après exécution de $resultats = $connexion->query($requete); la variable $resultats contient l'ensemble des données renvoyées par le serveur.
Ainsi, la variable $resultats contient, par exemple :
Chaussures Nike 350Ballon Puma 15Ballon Nike 34Chaussures Adidas 230
Or, ce qui nous intéresse, c'est de traiter ce résultat, élément par élément.
Voyons comment procéder...


Lire les résultats élément par élément

Pour lire un élément dans les résultats, nous allons utiliser une boucle foreach().
Pourquoi ? Parce que les résultats vont revenir sous la forme de tableaux associatifs et que la boucle foreach() permet – comme nous l'avons vu dans le module 5 – de lire tous les éléments d'un tableau.
Plutôt chouette, non ? :-)


Traitement des résultats d'une requête

L'idée est la suivante :
Pour chaque élément provenant de la requête:
- L'afficher
Et en PHP, on écrit généralement cela sous la forme :
$connexion = new PDO($sourceDeDonnees, $utilisateur, $motPasseUtilisateur); // connexion à la DB
$elements = $connexion->query($requete); // interrogation de la BD
// Lecture des résultats reçus
foreach($elements as $un_element){
   echo $un_element;
}

La boucle de lecture

Analysons la boucle de lecture.
$connexion = new PDO($sourceDeDonnees, $utilisateur, $motPasseUtilisateur); // connexion à la DB
$elements = $connexion->query($requete); // interrogation de la BD
// Lecture des résultats reçus
foreach($elements as $un_element){
   echo $un_element;
}
La ligne $connexion = new PDO($sourceDeDonnees, $utilisateur, $motPasseUtilisateur); nous permet de nous connecter à la base de données (comme vu précédemment).
La ligne $elements = $connexion->query($requete); permet d'envoyer la requête vers la base de donnéeset de récupérer les résultats dans la variable $elements.
Ensuite, nous entrons dans la boucle qui va lire chaque élément reçu (une ligne de tableau associatif).

Quiz

Quelle méthode de l'objet PDO permet d'envoyer une requête ?
 send
 query
 pdo

Boucler n'est pas tout !

Nous sommes maintenant capables de récupérer, élément par élément, les données renvoyées par la requête SQL.
Mais, même si nous n'avons plus qu'un élément à traiter à la fois, ce dernier contient encore les différents champs de la table concernée par la requête.
Comment, dès lors, récupérer les champs séparément ?
Par la magie des tableaux associatifs (n'hésitez pas à retourner consulter le module 5 pour vous rafraîchir la mémoire).

Tableaux associatifs et champs

Chaque fois que vous traitez un élément dans la boucle (voir points précédents), c'est un enregistrement qui vous est fourni. L'information se présente alors de la manière suivante :
Chaussures Nike 350
« Chaussures » est l'information présente dans le champ description, « Nike » le contenu du champ marque et « 350 » le contenu du champ pu.
Mais comment ne traiter que le contenu du champ marque, par exemple ? En utilisant un tableau associatif.
Mais comment ?
Bonne nouvelle, l'information retournée par la fonction query peut être manipulée est un tableau associatif dont les indices sont les noms des champs.
Ainsi, dans une boucle foreach, pour afficher le contenu du champ marque, on peut écrire :
foreach($resultats as $element){
   echo $element["marque"];
}

Appliquez : présenter les éléments en colonnes

Je vous propose de vous exercer en présentant les résultats de la requête en colonnes : une colonne pour les descriptions, une colonne pour les marques et une colonne pour les prix. Utilisez les balises <table><tr> et <td> pour réaliser cet exercice.

Enoncé de l'exercice

Deux erreurs de logique se sont glissées dans le code source de ce programme. À vous de les retrouver et de les corriger.
<?php

$sourceDeDonnees = "mysql:host=localhost;dbname=appliquez-php";
$utilisateur = "php";
$motPasseUtilisateur = "password";
$connexion = new PDO($sourceDeDonnees, $utilisateur, $motPasseUtilisateur);

$requete = "SELECT * FROM produits";

$resultats = $connexion->query($requete);

foreach($resultats as $element){

  echo $element['description']." ";
  echo $element['marque']." ";
  echo $element['pu']." euros";
 
}

echo "</table>";

 ?> <?php

$sourceDeDonnees = "mysql:host=localhost;dbname=appliquez-php";
$utilisateur = "php";
$motPasseUtilisateur = "password";
$connexion = new PDO($sourceDeDonnees, $utilisateur, $motPasseUtilisateur);

$requete = "SELECT * FROM produits";

$resultats = $connexion->query($requete);

echo "<table>";

foreach($resultats as $element){
  echo "<tr>";
  echo "<td>".$element['description']."</td>";
  echo "<td>".$element['marque']."</td>";
  echo "<td>".$element['pu']." euros </td>";
  echo "</tr>";
 
}

echo "</table>";

 ?> Conclusion

Nous venons de terminer l'approche théorique du langage PHP. Dans le module suivant, nous verrons quelques concepts fondamentaux de la programmation appliqués à l'utilisation du langage PHP. Ensuite, dans le dernier module, nous assemblerons toutes nos connaissances pour réaliser l'application pratique qui nous a servi de fil conducteur tout au long de ce cours.

Mémo

         Pour se connecter, on crée un objet PDO de la manière suivante : $connexion = new PDO($sourceDeDonnees, $utilisateur, $motPasseUtilisateur);
         La source de données est généralement initialisée de la manière suivante : $sourceDeDonnees = "mysql:host=localhost;dbname=mabasededonnees"; (valable parce qu'on a choisi de travailler avec MySQL).
         La variable contenant la source de données doit contenir : le nom d'hôte / du serveur (souvent localhost) et le nom de la base de données; ces deux informations séparées par un point-virgule.
         Pour envoyer une requête à la base de données, on utilise la fonction query de la façon suivante : $resultats = $connexion->query($requete).
         Pour lire un champ parmi les résultats reçus, on utilise les propriétés des tableaux associatifs. Chaque champ est indicé par son nom. Par exemple : $unElement["description"]

Complément

Voici la liste des informations complémentaires et facultatives de ce module :
         La programmation objet en PHP

La programmation objet en PHP

Vous l'avez constaté : nous avons utilisé un « objet » (PDO) pour communiquer avec une base de données.
PHP permet ce qui s'appelle la programmation orientée objet (POO).
Il s'agit d'un concept assez particulier (et aussi assez complexe) de la programmation qui permet d'écrire un programme sous forme d'objets qui interagissent les uns avec les autres. Les objets peuvent être : une base de données, une variable, un champ de formulaire, etc.
Nous n'entrerons pas dans le détails de la POO ici.

La POO avec PHP

         Aide sur la POO PHP dans le manuel en ligne de PHP.

Description de la POO

         Qu'est-ce que la Programmation Orientée Objet sur Wikipédia

Objectifs

Dans ce module, nous vous présenterons quelques bonnes pratiques en matière de programmation appliquées au langage PHP.
Nous verrons également comment déboguer le code source.
Enfin, nous reviendrons rapidement sur les notions vues dans les modules précédents.
Vous serez ainsi prêts à aborder le module suivant qui vous proposera de réaliser l'application dont il est fréquemment question depuis le début de cette formation.

Commenter son code

En programmation, il est tres important de commenter son code :
         pour soi-même, afin de s'y retrouver quand on édite un fichier dans lequel on n'a plus travaillé depuis longtemps.
         pour les autres (programmeurs), afin de faciliter la prise en main d'un code étranger.

Comment procéder ?

Rappelez-vous : en PHP, on utilise // pour un commentaire sur une seule ligne.
         Datez et signez vos commentaires.
         Soyez précis. Pensez que vous écrivez pour quelqu'un d'autre.
Exemple :
// Laurent 27/05/2013
// Boucle qui affiche le contenu du tableau $tab_exemple !
$tab_exemple = array(1, 3, 5, 7, 9, 11);
foreach ($tab_exemple as $element) {
   echo $element . "<br/>"; // le <br/> permet de sauter à la ligne
}

ndenter son code

Indenter son code signifie qu'on positionne ses instructions selon la syntaxe et la logique du code au moyen de tabulations ou d'espaces.

SUITE Formation au langage PHP 2: https://combatdetous.blogspot.be/p/blog-page_10.html

Aucun commentaire:

Enregistrer un commentaire

Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.