Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
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.
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.
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" !
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.
Reprenons le thème précédent. Plutôt que deux conditions if simples on peut utiliser un seul test if ... else ...
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.
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.
Thème : la note va être saisie via un formulaire et il y a désormais quatre appréciations possibles.
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";
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 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 !
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 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).
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++ ).
Reprenons le même thème (table de multiplication par 5) mais traitons le avec la structure for !
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.
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é.
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
Thème : tirage au sort de 5 cartes (poker) d'un jeu de 32 cartes.
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.
Ne confondez pas break qui permet de quitter une boucle, avec continue qui permet de passer à l'itération suivante.
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.
La chaine "13" est considérée comme numérique (conversion) mais pas comme entière ...