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 quelconque, du 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 à tous sur ma
premiè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 'à'
et 'è'
Afficher du texte mis en forme avec HTML
Affichage d'un message de
bienvenue formaté au moyen du langage HTML.
<?php
echo
"Bienvenue <b>à tous</b> sur <i>ma
premiè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";
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 variables. Ni 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 : centrerTexte, calculTVA, affichageTroisPremiersProduits).
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 D, M 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 égale, supérieure, inférieure, supérieur
ou égale, infé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 égale, supérieure, inférieure, supérieur
ou égale, infé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ères. N'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
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.