Accueil

Traduction

Débuter en programmation web - sommaire

Débuter en programmation web - recherche

L'auteur : Patrick Darcheville

Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site

Les structures de contrôle en PHP

Dans ce chapitre nous abordons les conditions et les boucles.
Si vous connaissez JavaScript vous constaterez que les structures de contrôle PHP sont très proches de celles de Javascript.

Les conditions

Traitons d'abord des conditions ou tests.
La condtion doit être entre parenthèses. La condtion est une expression comprenant des variables/constantes, des opérateurs de comparaison et opérateurs logiques.
Une condition retourne true / false.

Les opérateurs de comparaison

Pour tester l'égalité il faut écrire == et pour tester l'inégalité il faut écrire !=.
Les autres opérateurs de comparaison sont :

>
>=
<
<= 

Mais il existe aussi les opérateurs "identique" et "différent" !

Les opérateurs logiques

La structure if

Exemple - le code

N'oubliez pas les deux parenthèses fermantes car il y a deux fonctions imbriquées : if() & isset().

Si soumission du formulaire alors la variable $_GET['soumission'] est créée.
Les instructions du script sont exécutées uniquement si cette variable existe.
L'instruction rand(1,20) génère un entier aléatoire compris entre 1 et 20.

Dans une condition if le bloc d'instructions entre accolades est exécuté si le test retourne true.
Si une seule instruction dans le bloc alors les accolades sont facultatives.

Le rendu

La structure if ... else...

Reprenons le thème précédent. Plutôt que deux conditions if simples on peut utiliser un seul test if ... else ...

Exemple - le code

Le rendu

L'opérateur ternaire

L'opérateur ternaire en PHP est une syntaxe concise pour les instructions conditionnelles. Il permet de remplacer des structures if-else par une seule ligne de code.
Reprenons le thème précédent et remplaçons le bloc if ... else ... par une instruction unique.

Exemple - le code

Admirez la concision du test.
Notez bien la syntaxe : (condition)? instruction si vrai : instruction si faux ;
Utilisez l'opérateur ternaire seulement si une seule instruction si true et une seule instruction si false.

Le rendu

Les SI imbriqués

Thème : la note va être saisie via un formulaire et il y a désormais quatre appréciations possibles.

Exemple - le code

Le formulaire et le script PHP dans la même page !

Il existe dans le script PHP un contrôle de saisie qui semble faire double emploi avec le contrôle HTML :
if (!is_numeric($note) || $note >20 || $note <1 )echo "erreur de saisie";

Le rendu

Cliquez ici pour le rendu dans un autre onglet

Ouvrez la console du navigateur puis via l'onglet "élements" modifiez le type du INPUT : "text" à la place de "number".
Saisissez alors une suite de lettres dans ce champ.

Saisissez, par exemple, la note 12 dans le formulaire et observez la barre d'adresse.
Le contenu devient bizarre : darchevillepatrick.info/debutant/if_imbriques.php?note=12
à votre insu, vous avez ajouté un paramètre à l'URL de la page cible : ?note=12
Dans la barre d'adresse, remplacez 12 par 20 et observez. Le script affiche "Très bonne note". Vous avez passé des paramètres à la page cible via l'URL.
Je reviens sur cette technique de soumission dans le chapitre suivant.

La structure switch

La structure switch qui existe en JavaScript, existe aussi en PHP et avec la même restriction : le seul opérateur de comparaison admis est == (opérateur qui est implicite).

Donc le thème précédent ne peut pas être traité avec un switch !

Exemple - le code

Thème : affichage du nom de département en fonction du code minéralogique saisi.

Le formulaire ne comprend pas de bouton de soumission puisque celle-ci réalisée en JS à chaque changement de valeur dans le SELECT : onchange ="this.form.submit()"

Le rendu

Les boucles

Le bloc d'instructions contenu dans un boucle est répété plusieurs fois. On parle d'itérations.

Thème : afficher la table de multiplication par 5 (50 premières lignes : 5*1 = 5 ... 5*50 = 250).

Première solution : emploi de la boucle while(condition)

Le code

Le bloc d'instructions à l'intérieur des accolades est répété tant que $i est inférieur ou égal à 50.
Pour éviter de boucler à l'infini il faut incrémenter $i dans la boucle ($i++ ).

Le rendu

Deuxième solution : emploi de la boucle for()

Reprenons le même thème (table de multiplication par 5) mais traitons le avec la structure for !

Le code

Le rendu

La boucle do ... while(condition)

Une boucle while(condition) peut très bien être jamais exécutée si la condition retourne dès le départ false.
Une boucle do ... while(condition) sera exécutée au moins une fois puisque le test est posé en fin de bloc.

Exemple - le script

Tant que l'élément tiré au hasard dans le tableau $divers est numérique on boucle.
Même si le premier élément tiré au hasard n'est pas numérique, il est cependant affiché.

Le rendu

La bouche foreach()

Pour afficher toutes les valeurs d'un array vous pouvez utiliser "while" ou "for" mais la structure foreach() est plus adaptée.
Pour revoir la structure foreach() je vous invite à relire le chapitre portant entre autres sur les tableaux : Variables, constantes & tableaux

Une boucle infinie

Thème : tirage au sort de 5 cartes (poker) d'un jeu de 32 cartes.

Le code

C'est une bonne révision sur les tableaux : utilisation des fonctions array_rand(), array_unique(), etc.

Remarque : il ne faut pas boucler 5 fois mais boucler tant que le tableau "$ma_main" ne comprend pas encore cinq valeurs distinctes. En effet le hasard peut générer plusieurs fois la même carte.
Il faut donc créer une boucle infinie (while true) et à l'intérieur de cette boucle un test qui s'il est vrai appelle l'instruction break.

Le rendu dans un nouvel onglet

Testez ce code !

L'instruction continue

Ne confondez pas break qui permet de quitter une boucle, avec continue qui permet de passer à l'itération suivante.

Exemple - le code

Un tableau indicé peut être une séquence d'éléments de types différents.
Nous voulons afficher seulement les éléments numériques puis seulement les entiers.

Premier foreach() : affichage de tous les éléments de la séquence.
Deuxième foreach() : dès qu'un élément n'est pas numérique on passe à l'itération suivante.
Troisième foreach() : dès qu'un élément n'est pas entier on passe à l'itération suivante.

Le rendu

La chaine "13" est considérée comme numérique (conversion) mais pas comme entière ...