Blog ENI : Toute la veille numérique !
Dernière chance (fin le 29/02) : -25€ dès 75€ sur les livres en ligne, vidéos... code FUSEE25. J'en profite !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Apprendre à développer un site web avec PHP et MySQL
  3. Les fonctions et structures de contrôle
Extrait - Apprendre à développer un site web avec PHP et MySQL Exercices pratiques et corrigés (5e édition)
Extraits du livre
Apprendre à développer un site web avec PHP et MySQL Exercices pratiques et corrigés (5e édition) Revenir à la page d'achat du livre

Les fonctions et structures de contrôle

Les conditions

1. if

Les instructions de type condition permettent d’exécuter du code si une condition est vraie.

Par exemple, si le prénom est égal à Robert, afficher "Bienvenue" :

<?php 
$prenom = 'Robert'; //déclaration de la variable $prenom 
 
if ($prenom == 'Robert') //test de la variable $prenom 
{ 
    echo 'Bienvenue'; 
} 
?> 

Ci-dessus, la valeur Robert est affectée à la variable $prenom puis cette variable est testée à l’aide de l’instruction if.

La syntaxe est donc :

if (condition) { instruction } 

Notez que :

  • "est égal à" se note ==.

  • "est différent de" se note !=.

  • "est inférieur à" se note <.

  • "est supérieur à" se note >.

  • "est inférieur ou égal à" se note <=.

  • "est supérieur ou égal à" se note >=.

L’instruction sinon se note else.

Par exemple, si le prénom est égal à Robert, afficher "Bienvenue", sinon "A bientôt" :

<?php 
$prenom = 'Toto'; //déclaration de la variable $prenom 
 
if ($prenom == 'Robert') //test de la variable $prenom 
{ 
   echo 'Bienvenue'; 
} 
else 
{ 
   echo 'A bientôt'; 
} 
?> 

Affiche :

A bientôt

En effet, le code teste si la variable $prenom est égale à Robert, puis comme ce n’est pas le cas, le code passe dans le else (sinon) et exécute echo "A bientôt";.

Enfin la dernière instruction pour les conditions est else if appelée sinon si.

Cela permet de tester d’autres conditions non testées par le if.

Par exemple, si le prénom est égal à Robert, afficher "Bienvenue", sinon s’il est égal à Toto, afficher "Bonjour", sinon "A bientôt" :

<?php 
$prenom = 'Toto'; //déclaration de la variable $prenom 
 
if ($prenom == 'Robert') //test de la variable $prenom 
{ 
   echo 'Bienvenue'; 
} 
else...

Les boucles

1. for

Une boucle permet de répéter x fois une exécution de code.

Par exemple, si vous voulez afficher dix fois "Bonjour", il suffit d’écrire avec une boucle for :

<?php 
for ($i = 1; $i <= 10; $i++) 
{ 
    echo 'Bonjour <br />'; 
} 
?> 

$i est une variable représentant le compteur de la boucle. Vous n’êtes pas obligé d’appeler votre variable $i mais par convention c’est le nom employé.

La syntaxe est donc :

for ($i=nombre de départ ; $i <= nombre d'arrivée ; incrément) 
{ 
   instructions 
} 

$i++ est équivalent à $i=$i+1 et représente l’incrémentation de $i. Vous pouvez écrire $i=$i+2 pour incrémenter de 2 ou $i=$i-1 pour décrémenter.

Autre exemple : pour écrire les nombres entre 100 et 150, vous avez le code suivant :

<?php 
for ($i = 100; $i <= 150; $i++) 
{ 
    echo $i.'<br />'; 
} 
?> 

L’instruction echo $i.’<br />’; est répétée 50 fois avec à chaque fois $i augmentant de 1.

Le <br /> permet de sauter une ligne entre chaque nombre pour ne pas les afficher tous à la suite.

L’instruction break permet d’arrêter...

Les tableaux

1. Tableaux numériques

Un tableau est comme une variable mais pouvant stocker plusieurs valeurs.

Un tableau est défini par une clé (appelée indice) et une valeur :

images/04RI01V3.png

Pour créer ce tableau, il faut écrire :

<?php 
$tableau = array('Jean','Robert','Paul','Joe','Alain'); 
?> 

Ici, le tableau s’appelle $tableau, mais vous pouvez bien sûr l’appeler autrement.

Vous pouvez aussi accéder directement à la valeur d’un tableau grâce à son indice avec cette syntaxe :

<?php 
echo $tableau[0]; 
?> 

Affiche :

Jean

En effet, $tableau[x] est une variable avec pour valeur le xème élément du tableau.

Attention : les indices des tableaux commencent à 0 !

Pour remplacer la chaîne de caractères ’Robert’ par ’Nadia’ à l’indice 1 du tableau, il faut écrire :

<?php 
$tableau[1] = 'Nadia'; 
?> 

Il est aussi possible de créer un tableau vide et de le remplir de cette façon :

<?php 
$tableau = array(); 
$tableau[0] = 'Jean'; 
$tableau[1] = 'Robert'; 
$tableau[2] = 'Paul'; 
$tableau[3] = 'Joe'; 
$tableau[4] = 'Alain'; 
?> 

ou de cette façon :

<?php 
$tableau = array(); 
$tableau[] = 'Jean'; 
$tableau[] = 'Robert'; 
$tableau[] = 'Paul'; 
$tableau[] = 'Joe'; 
$tableau[] = 'Alain'; 
?> 

ou encore :

<?php 
$tableau = ['Jean','Robert','Paul','Joe','Alain']; 
?> 

PHP remplit automatiquement les indices et cela revient au même que d’écrire :

<?php 
$tableau = array('Jean','Robert','Paul','Joe','Alain'); 
?> 

2. Tableaux associatifs

Dans un tableau associatif, c’est vous qui décidez de la clé à mettre dans celui-ci.

Par exemple :

images/04PHP02.png

Dans cet exemple, la clé peut prendre n’importe quelle valeur. Ce n’est pas forcément un nombre.

Ce type de tableau s’écrit :

<?php 
$tableau = array('A1'=>'Jean','B4'=>'Robert',3=>'Paul', ...

Traitement de chaînes de caractères

1. Les fonctions de manipulation de chaîne

Dans ce chapitre, il est question de toutes les fonctions PHP permettant de manipuler les chaînes de caractères.

a. strlen()

La fonction strlen() retourne la longueur d’une chaîne de caractères.

Par exemple :

<?php 
 
$nom = "Robert"; 
$longueur = strlen($nom); 
echo "La longueur de la chaîne est : ".$longueur; 
 
?> 

Affiche :

La longueur de la chaîne est : 6

Sa syntaxe est donc :

$longueur= strlen($chaine); 

Autre exemple :

<?php 
 
$nom = " Bonjour, Robert  "; 
$longueur = strlen($nom); 
echo "La longueur de la chaîne est : ".$longueur; 
 
?> 

Affiche :

La longueur de la chaîne est : 18

En effet, les espaces sont aussi comptés.

b. substr()

La fonction substr() retourne un morceau de la chaîne à partir d’une position et d’une certaine longueur donnée.

Par exemple :

<?php 
 
$nom = "Robert"; 
$morceau = substr($nom,2,3); 
echo "Le morceau de la chaîne est : ".$morceau; 
 
?> 

Affiche :

Le morceau de la chaîne est : ber

La position du début commence à 0.

Il n’est pas nécessaire d’indiquer la longueur. La fonction retourne alors les caractères jusqu’à la fin de la chaîne de caractères.

Sa syntaxe est donc :

$morceau_chaine = substr($chaine,$position_debut,longueur_chaine); 

Autre exemple :

<?php 
 
$nom = "Bonjour, je m'appelle Robert"; 
$morceau = substr($nom,22); 
echo "Le morceau de la chaîne est : ".$morceau; 
 
?> 

Affiche :

Le morceau de la chaîne est : Robert

En effet, en n’indiquant pas le dernier paramètre, la fonction prend la chaîne de caractères jusqu’à sa fin.

c. strstr()

La fonction strstr() retourne un morceau de la chaîne à partir d’un caractère jusqu’à la fin de la chaîne.

Par exemple :

<?php 
 
$email = "robert.dupont@france.fr"; 
$morceau = strstr($email,'@'); 
echo "Le morceau de la chaîne est : ".$morceau; 
 
?> 

Affiche :

Le morceau de la chaîne est : @france.fr

La fonction...

Les opérateurs

1. Les opérateurs de chaîne

a. La concaténation

Vous avez eu l’occasion de le voir dans le chapitre Les bases du langage PHP : la concaténation se note avec . (point) ou , (virgule). Elle permet d’attacher deux chaînes de caractères.

Par exemple :

<?php 
 
$prenom = "Jean"; 
$nom = "Dupont"; 
echo $prenom." ".$nom; //concaténation du prénom + un espace + le nom 
 
?> 

Affiche :

Jean Dupont

b. L’assignation

Vous l’utilisez déjà depuis le début dans tous les exemples.

L’assignation se note avec le signe =. Elle permet d’affecter une valeur à une variable.

Vous pouvez aussi utiliser la combinaison .= qui permet de concaténer une chaîne à une variable et de l’affecter à cette variable.

Par exemple :

<?php 
 
$prenom = "Jean"; 
$nom = "Dupont"; 
$prenom .= " "; //concaténation du prénom + un espace 
$prenom .= $nom; //concaténation du prénom + le nom 
echo $prenom; 
 
?> 

est équivalent à :

<?php 
 
$prenom = "Jean"; 
$nom = "Dupont"; 
$prenom = $prenom." "; //concaténation du prénom + un espace 
$prenom = $prenom.$nom; //concaténation du prénom + le nom 
echo $prenom; 
 
?> 

Affiche :

Jean Dupont

2. Les opérateurs arithmétiques

a. L’addition

L’opérateur se note +.

Par exemple :

<?php 
 
$nombre = 11; 
$resultat = $nombre + 5; 
echo $resultat;  
 
?> 

Affiche :

16

Depuis PHP 8.0, les opérateurs d’addition (+), de soustraction (-) et de division (/) ont une priorité plus élevée que l’opérateur de concaténation (.).

Par exemple :

<?php 
 
echo "Somme: ". 3 + 2; 
 
?> 

Affiche :

Somme : 5

b. La soustraction

L’opérateur se note -.

Par exemple :

<?php 
 
$nombre = 11; 
$resultat = $nombre - 5; 
echo $resultat;  
 
?> 

Affiche :

6

c. La multiplication

L’opérateur se note *.

Par exemple :

<?php 
 
$nombre = 11; 
$resultat = $nombre * 5; 
echo $resultat;  
 ...

Les fonctions

1. Création

Les fonctions permettent de réutiliser du code PHP plusieurs fois. Par exemple, si vous avez une page web avec le prix HT de différents produits, vous allez créer une fonction qui vous calcule le prix TTC de chaque produit. Cela évite d’écrire le calcul en PHP sur chaque ligne. En développement, il faut essayer de factoriser (c’est-à-dire de regrouper) le code. Ainsi, sa maintenance est plus facile. En effet, plus vous écrivez du code, plus vous risquez de faire des erreurs.

La syntaxe pour créer une fonction est :

function nom_de_la_fonction ($paramètre) { } 

Il ne faut jamais mettre d’espaces ni de caractères spéciaux dans le nom d’une fonction.

Le paramètre est aussi appelé argument.

Essayez de nommer la fonction avec des mots expliquant ce que fait la fonction, séparés par le symbole _ ou avec des majuscules : nom_de_la_fonction ou NomDeLaFonction.

Par exemple :

<?php 
 
function calcul_ttc($prix_ht) { 
   return $prix_ht * 1.2; 
} 
 
?> 

Cette fonction calcule le prix TTC à partir du prix HT passé en paramètre et retourne le résultat par l’intermédiaire du mot-clé return. Une fonction n’est pas obligée de retourner un résultat, elle peut juste servir à afficher un message par exemple.

Pour appeler cette fonction, il suffit d’écrire par exemple :

<?php 
calcul_ttc(12); 
?> 

Soit au final :

<?php 
 
function calcul_ttc($prix_ht) { 
   return $prix_ht * 1.2; 
} 
$prix_ttc = calcul_ttc(12); 
echo "12 euros HT correspondent à ".$prix_ttc." euros TTC"; 
 
?> 

Affiche :

12 euros HT correspondent à 14.4 euros TTC

En effet, le nombre 12 est passé en paramètre de la fonction donc $prix_ht devient égal à 12, puis la fonction retourne 12*1.2 (14.4) dans la variable $prix_ttc.

Il est possible de créer des fonctions qui prennent plusieurs paramètres ou bien aucun paramètre. Il n’est pas possible d’avoir des arguments du même nom.

Par exemple, voici une fonction qui prend plusieurs paramètres et retourne une valeur :

<?php 
 
function assemble_mot($mot1,$mot2,$mot3)...

Les dates

Dans cette section, il est question de toutes les fonctions PHP permettant de manipuler les dates. En effet, souvent les dates sont récupérées dans un format suivant la langue de votre système d’exploitation ou de votre base de données et vous êtes obligé de la retransformer selon vos besoins.

  • La fonction time() retourne l’heure courante, mesurée en secondes depuis le début de l’époque UNIX (1er janvier 1970 00:00:00 GMT). Cette heure est aussi appelée timestamp UNIX.

Par exemple :

<?php 
 
echo time(); 
 
?> 

Affiche :

1680618956

Sa syntaxe est donc :

time() 

Cette fonction est surtout utilisée pour effectuer des calculs sur des dates comme par exemple pour trouver la durée d’un traitement en base de données.

  • La fonction date() retourne la date dans le format passé en paramètre.

Par exemple :

<?php 
 
echo date('d.m.y'); 
 
?> 

Affiche :

04.04.23

Sa syntaxe est donc :

$date_du_jour = date($format) 

avec $format une chaîne contenant les lettres permettant de définir le format. 

Voici la liste des principaux formats à utiliser dans la fonction date. Cette liste est non exhaustive et vous trouverez plus d’informations à cette adresse : http://php.net/manual/fr/function.date.php

Jour

J

Jour du mois sur deux chiffres sans les zéros initiaux 1 à 31.

d

Jour du mois sur deux chiffres avec un zéro initial en fonction du jour 01 à 31.

l

Jour de la semaine en anglais Sunday à Saturday.

w

Jour de la semaine au format numérique 0 (dimanche) à 6 (samedi).

z

Jour de l’année 0 à 366.

Semaine

W

Numéro de semaine dans l’année (les semaines commencent le lundi). Exemple : 42 (la 42ème semaine de l’année).

Mois

F

Mois, textuel, version longue en anglais, comme January ou December.

m

Mois au format numérique, avec zéros initiaux 01 à 12.

n

Mois sans les zéros initiaux 1 à 12.

t

Nombre de jours dans le mois 28 à 31.

Année

L

Est-ce que l’année est bissextile : 1 si bissextile, 0 sinon.

Y

Année sur 4 chiffres (par exemple 1999 et 2003).

y

Année sur 2 chiffres (par exemple 99 et 03).

Heure

a

Ante méridien et Post méridien (minuscules)...

Les fichiers

1. Introduction

Il est parfois très utile de stocker des informations dans un fichier sur le serveur plutôt que dans une base de données. Cela peut être plus rapide et plus facilement accessible mais ce sera moins sécurisé et il peut y avoir des conflits d’écriture en cas de connexions simultanées.

Nous allons voir dans la suite de cette section les fonctions les plus couramment utilisées.

Pour commencer, il faut créer un fichier appelé « fichier.txt » dans le répertoire www, c’est-à-dire là où se trouvent vos pages PHP. Il faut absolument que ce fichier ait les droits en écriture pour pouvoir écrire dedans. Cela sera automatiquement le cas lorsque vous travaillez en local mais il faudra changer éventuellement les permissions du fichier si vous transférez votre fichier par FTP chez un hébergeur.

2. Lecture rapide

  • La fonction file_get_contents() permet de lire le contenu d’un fichier et de le retourner dans une chaîne de caractères.

Dans cet exemple, le fichier texte contient la phrase "Bonjour !".

<?php 
 
$contenu = file_get_contents('fichier.txt'); 
echo $contenu; 
 
?> 

Affiche :

"Bonjour !"

  • La fonction readfile() permet aussi de lire le contenu d’un fichier mais elle retourne le nombre de caractères du fichier et affiche automatiquement le contenu.

Dans cet exemple, le fichier texte contient la phrase : "Bonjour !"

<?php 
 
$fichier = 'fichier.txt'; 
$nombre=readfile($fichier); 
echo "<br /> Le nombre de caractères du fichier est : ".$nombre; 
 
?> 

Affiche :

"Bonjour !"

Le nombre de caractères du fichier est : 11

  • La fonction file() permet de lire le contenu d’un fichier mais elle retourne le contenu dans un tableau ligne par ligne.

Dans cet exemple, le fichier texte contient la phrase "Bonjour !", un saut de ligne et la phrase "Monsieur Dupont.".

<?php 
 
$tableau = file('fichier.txt'); 
foreach ($tableau as $ligne) { 
   echo $ligne."<br />"; 
} 
 
?> 

Affiche :

"Bonjour !"

"Monsieur Dupont."

En effet, chaque ligne du fichier se retrouve dans chaque...

Les includes

La fonction include() est très utile car elle permet d’appeler une autre page PHP dans une page PHP. Si vous marquez include(’fonctions.php’), cela revient à coller le code contenu dans la page fonctions.php à l’endroit où vous appelez la fonction include(). Cette fonction reçoit donc en paramètre le nom de la page PHP à inclure.

Par exemple, vous avez une page PHP appelée variable.php contenant le code suivant :

<?php 
 
$nom = "DUPONT"; 
$prenom = "Robert"; 
 
?> 

Dans votre page PHP courante, vous appelez l’include de cette façon :

<?php 
 
include("variable.php"); 
echo $prenom." ".$nom; 
 
?> 

Affiche :

Robert DUPONT

Si votre fichier variable.php se trouvait dans le répertoire inc, le code pour appeler cette page serait :

<?php 
 
include("inc/variable.php"); 
echo $prenom." ".$nom; 
 
?> 

La page PHP peut être indiquée avec un chemin relatif ou absolu. Un chemin absolu est marqué en partant de la racine du disque dur (par exemple C:\wamp64) alors qu’un chemin relatif est marqué en partant de l’endroit où se situe votre fichier PHP. Vous verrez dans un prochain chapitre que le fichier php.ini contient une directive include_path contenant le chemin de recherche...

Exercices sur les fichiers

1. Énoncés

Exercice 1 (facile) : création d’un fichier compteur de page

Créer un fichier texte qui stocke le nombre de fois qu’une page a été vue.

Exercice 2 (moyen) : création d’un fichier de renseignement d’images

Placer trois images dans un répertoire images puis créer une page PHP qui crée un fichier texte contenant le nom et la taille de ces images puis qui copie ces images dans un répertoire archive au même niveau que le répertoire image.

Exercice 3 (difficile) : création d’un fichier log de traces

Créer une page qui écrit dans un fichier log.txt la date et l’heure courante et qui affiche le temps en microsecondes pour déplacer trois images du répertoire images au répertoire archive.

2. Corrigés

Solution de l’exercice 1

Créer un fichier compteur.txt puis exécuter le code suivant :

<?php 
 
$ressource = fopen('compteur.txt', 'r+'); 
 
$nb_vues = fgets($ressource); // Lecture de la première ligne contenant 
                      // le nombre de pages vues 
if ($nb_vues == "") { //teste si le fichier ne contient pas encore de 
                      //nombre 
   $nb_vues = 0; 
} 
$nb_vues++; // Augmentation de 1 du nombre de pages vues 
fseek($ressource, 0); // le curseur est remis au début du fichier 
fputs($ressource, $nb_vues); // Ecriture du nouveau nombre de pages vues 
 
fclose($ressource);...