Accueil
 COURS INFORMATIQUE
 Cours Algorithmique
 Cours ASP
 Cours CSS
 Cours HTML
 Cours PHP / MySQL
 Cours Réseaux
 Cours SQL
 Cours Visual Basic
 ARTICLES
  Conception de sites
  Droit & Internet
  e-commerce
  Société
  Strategies du web
  Technologies Web
  Marketing Web
 LIVRES
  ASP/ASP.Net
  C/C++/C#
  Conception de sites
  DHTML/CSS
  Gestion de Projet
  HTML/Internet
  Java/JSP/J2EE
  JavaScript/VbScript
  Juridique
  Marketing/Stratégie
  PHP/Linux/Unix
  Réseaux
  XML/XHTML/XSL
 NETALYA RECOMMANDE
Reussir un projet de site web

Cours PHP N°4 : conditions & boucles

Auteur : Frédéric Jacquenod
Adaptation : Christophe Magdelaine

Infinite Menus, Copyright 2006, OpenCube Inc. All Rights Reserved.

Les expressions conditionnelles et les boucles

Introduction

Nous avons vu les différents opérateurs utilisables en php. Nous allons maintenant voir les expressions et boucles dans lesquelles se retrouvent généralement ces opérateurs.

Les expressions conditionnelles

Ces tests permettent de tester la validité des expressions et, en fonction du résultat vrai ou faux, d'effectuer les opérations adéquates.
Ces tests sont des éléments très importants dans la réussite d'un programme.
Si vous vous trompez les effets peuvent etre catastrophiques. Un OU mis à la place d'un ET dans une expression de test et patatra ...

if

Ce test permet de réaliser une action en fonction de l'état vrai ou faux de l'expression.

if(expression) {
  actions1 réalisées si le résultat de l'expression est vrai
}
else {
  actions2 réalisées si le résultat de l'expression est faux
}

exemple

<HTML>
<?
if("$code" == "987654")
{
print "
<META HTTP-EQUIV=REFRESH CONTENT=\"6;URL=http://www.monsite.com/entreevalide.php\">
<BODY BGCOLOR=#FFFFFF> <CENTER>
<IMG SRC=IMAGES/ok.gif>
<BR>
<FONT SIZE=5>
Bonjour votre mot de passe est valide<BR>
vous allez bientôt pouvroir accéder à notre<BR>
zone privée<BR>
</FONT>
";
}
else
{
print "
<META HTTP-EQUIV=REFRESH CONTENT=\"6;URL=http://www.monsite.com/erreur.php\">
<BODY BGCOLOR=#FFFFFF> <CENTER>
<IMG SRC=IMAGES/erreur.gif>
<BR>
<FONT SIZE=5>
Bonjour votre mot de passe est erroné<BR>
veuillez entrez un mot de passe valide<BR>
</FONT>
";
}
?>
<BODY>
</HTML>

En fonction du choix de l'utilisateur vous obtiendrez donc deux pages différentes qui redirigeront au bout de 6 secondes vers la page indiquée dans la ligne META ...

Le test if propose deux actions en fonction de la valeur de l'expression vraie ou fausse.
Vous pouvez imbriquer des if permettant ainsi de réaliser des actions en fonction de plus de deux critères. Le problème est que la lisibilité devient vite impossible.

if(){}else{if()else{...}}

Vous pouvez alors utilisez une alternative grace au mot clé elsif.

if (expression)
{
  action1 si la valeur d'expression est vraie
}
elseif (expression2)
{
  action2 si la valeur de expression est fausse et si la valeur d'expression2 est vraie
}
elseif (expression3)
{
  action3 si la valeur de expression est fausse, la valeur d'expression2 est fausse et si la valeur d'expression3 est vraie
}
......
else
{
  actionn si toutes les valeurs des expressions précédentes sont fausses
}

switch

Cette instruction permet de proposer différentes actions en fonction du résultat d'une expression. Vous me direz le elseif fait la même chose. En effet dans le cas où vous évaluez toujours le résultat de la même variable (voir exemple précédent), l'expression est toujours la même c'est vrai. Par contre si vous désiriez évaluer différentes expressions, le switch ne peut convenir.

switch (expression) {
  case valeur1 : actions1;
  break;
  case valeur2 : actions2;
  break;
  ...
  case valeurn ; actionsn;
  break;
  default : actions par défaut;
  break;
}

Vous voyez que le test ne se fait que sur une expression. En fonction de la valeur de cette expression le programme exécute une des actions.
Le mot clé break permet une fois l'action réalisée de sortir du switch. Si vous ne mettez pas le break, les actions suivantes seront éxécutées.

exemple

<HTML>
<?
switch($type)
{
case "mathematiques" :
  print "<meta http-equiv=refresh content=\"6;
URL=qcmmath.html\">";
break;
case "histoire de l art" :
  print "<meta http-equiv=refresh content=\"6;
URL=artqcm.html\">";
break;
case "droit" :
  print "<meta http-equiv=refresh content=\"6;
URL=droitqcm.html\">";
break;
case "ecologie" :
  print "<meta http-equiv=refresh content=\"6;
URL=ecoloqcm.html\">";
break;
case "culture generale" :
  print "<meta http-equiv=refresh content=\"6;
URL=cultureqcm.html\">";
break;
default :
  print "Si vous ne choisissez rien je fais comment ?";
exit;
}
print "<BODY BGCOLOR=#FFFFFF> <CENTER>
Vous avez choisi le domaine <FONT COLOR=green>$type</FONT>";
?>
<BODY>
</HTML>

Les boucles

Les boucles permettent de répéter les mêmes actions selon la valeur de l'expression indiquée dans le test.
Vous pouvez par exemple, lire le contenu d'un fichier, effectuer des recherches d'occurrence, des opérations mathématiques ...

while

Cette boucle appelée en algorithmique « tant que » permet d'effectuer les mêmes opérations (bloc d'instructions) contenu dans cette boucle tant que la valeur de l'expression est vraie.

Attention le risque de cette boucle est de ne jamais en sortir on appelle cela une boucle infinie. En effet il faut être certain qu'à un moment ou un autre l'expression devienne fausse, si ce n'est pas le cas le bloc d'instructions sera exécuté indéfiniment. Imaginez que ce bloc écrive des informations dans un fichier vous risquez alors la saturation de l'espace disque où se situe ce fichier. Il peut aussi y avoir bien pire comme problème :)

while(expression) {
  instructions;
}

exemple

Vous voulez proposer aux internautes les tables de multiplications de leurs choix.
Vous leurs demandez quelle table ils veulent (chiffres à multiplier) et juqu'à quel chiffre il désire le voir multiplier.

Page html proposant le formulaire

<HTML>
<HEAD>
</HEAD>
<BODY BGCOLOR=white>
<font size=4><U>Bienvenue sur le site de Mathématiques Plus</U></font>
</CENTER>
<BR>
<FORM ACTION=while.php METHOD="POST">
<LI><FONT COLOR=green SIZE=3>
Choisissez le nombre dont<BR>
vous désirez la table de multiplication
</FONT>
<UL>
<LI>Donnez le chiffre <INPUT TYPE=TEXT NAME="nombre" SIZE=3>
</UL>
<LI><FONT COLOR=green SIZE=3>Donnez la borne de la table.</FONT>
<BR> (Le nombre doit etre supèrieur à 0)
<UL>
<LI>Donnez la borne <INPUT TYPE=TEXT NAME="borne" SIZE=3>
</UL>
</OL>
<INPUT TYPE=SUBMIT VALUE="Soumettre">
<INPUT TYPE=RESET VALUE="Reset">
</FORM>
</BODY>
</HTML>

Programme php traitant le formulaire précédent

<html>
<?
print "<font size=3>Vous avez demandez la table de <BR>multiplication de
<font color=green>$nombre</font> jusqu'à la borne <font color=green>
$borne</font></font><BR><BR>";
print "<table bgcolor=yellow border=1>";
$cpt=0;
while($cpt <="$borne) {
$resultat=$nombre*$cpt;
print "<tr>
<td align=center>$nombre * $cpt</td>
<td align=center>=</td>
<td align=center bgcolor=pink>$resultat</td>
<tr>";
$cpt++;
}
?>
</table>
</body>
</html>

Ce programme pour être correct nécessiterait quelques tests de validité des informations entrées par l'utilisateur (borne, chiffre et non caractères ...).
Si vous entrez une borne négative aucun tableau ne sera affiché, on n'entre pas dans la boucle.

Dans le programme php l'expression devient fausse dès que le compteur cpt vaut borne + 1. C'est à ce moment que l'on sort de la boucle. Il a donc fallu avant le début de la boucle initialiser le compteur à 0 et surtout incrémenter ce compteur à l'intérieur de la boucle pour le faire évoluer en lui ajoutant 1 à chaque passage. Si vous oubliez cette instruction dans le bloc du while c'est la boucle infinie ... Le reste n'est que de la mise en forme html.

do ... while

Cette boucle ressemble à la boucle précédente while.
En algorithmique elle se nomme la boucle « jusqu'à ».
A la différence du while, vous exécutez au moins une fois le bloc d'instruction quelque soit la valeur de l'expression. Cette expression n'est évaluée qu'une fois le premier passage réalisé. Le test s'effectue à la fin de la boucle et non au début.
Une fois dans la boucle, les instructions se feront jusqu'à ce que l'expression devienne fausse.

do {
instructions;
}
while(expresion);

exemple

Nous reprenons le même formulaire que précédemment en modifiant seulement la boucle de traitement dans le programme php.

<html>
<?
print "<font size=3>Vous avez demandez la table de <BR>multiplication de
<font color=green>$nombre</font> jusqu'à la borne <font color=green>
$borne</font></font><BR><BR>";
print "<table bgcolor=yellow border=1>";
$cpt=0;
do
{
$resultat=$nombre*$cpt;
print "<tr>
<td align=center>$nombre * $cpt</td>
<td align=center>=</td>
<td align=center bgcolor=pink>$resultat</td>
<tr>";
$cpt++;
}while($cpt <="$borne); ?>
</table>
</body></html>

Vous obtiendrez le même résultat qu'avec le while à la différence prêt que si vous donnez une borne négative vous obtiendrez un tableau comportant une première ligne correspondant à la première valeur du compteur soit la multiplication par 0.

for

Cette boucle permet d'effectuer les instructions du bloc lorsque l'on connaît la valeur de la borne. A la différence du while vous n'avez pas à vous soucier de l'arrêt de la boucle, le compteur s'incrémente de lui-même.
Vous utilisez cette boucle lorsque vous connaissez précisément le nombre de fois où vous voulez passer dans le bloc d'instructions. Vous pouvez éventuellement sortir de la boucle en utilisant une commande break comme dans le cas du switch.
Vous pouvez aussi sauter une itération (un passage dans le bloc d'instruction) grâce à la commande continue. Attention dans ces deux cas la lisibilité de votre programme sera plus difficile.

for (valeur de départ;valeur de fin de boucle;incrément du compteur) {
  instructions;
}

  • valeur de départ est la première valeur que prend votre compteur
  • valeur de fin de boucle est la dernière valeur que prend le compteur (valeur d'arrêt)
  • incrément du compteur est la valeur que vous ajoutez à chaque passage au compteur
Reprenons le formulaire précédent et modifions le programme php.

<html>
<?
print "<font size=3>Vous avez demandez la table de <BR>multiplication de
<font color=green>$nombre</font> jusqu'à la borne <font color=green>
$borne</font></font><BR><BR>";
print "<table bgcolor=yellow border=1>";
for($cpt=0;$cpt<="$borne;$cpt++) {
$resultat=$nombre*$cpt;
print "<tr>
<td align=center>$nombre * $cpt</td>
<td align=center>=</td>
<td align=center bgcolor=pink>$resultat</td>
<tr>";
}
?>
</table>
</body></html>

Vous obtiendrez la même page qu'avec le while.
L'initialisation du compteur et son incrémentation sont inclus dans les instructions de la boucle for et non plus dans le bloc de la boucle.

foreach

Une dernière boucle particulière est foreach qui permet de parcourir le contenu d'une liste ou d'un tableau associatif et d'en extraire les couples clé-valeur (voir la partie définition de variables).

foreach ($liste as $valeur) {
instructions;
}

ou

foreach ($tableau as $cle=>$valeur) {
instructions; }

exemple

<html>
<body BGCOLOR=#FFFFFF>
<B><U>La boucle foreach</U><Br><Br><B>
<?
# J'affecte les éléments à ma liste
$liste = array( "4 bougies","cagouille","php4");
# J'affiche le nombre d'éléments de ma liste ainsi que son contenu
$i=0;
print "Etat de la liste <U>avant</U> le tri<BR>";
foreach($liste as $valeur)
{
print "\$liste[$i] vaut <FONT COLOR=green>$valeur</FONT><BR>";
$i++;
}
print "<HR SIZE=8>";
# Essai sur un tableau associatif
$tab = array( "fred"=>"eric", "dom"=>"tom");
print "Le tableau associatif tab contient";
print " <FONT COLOR=green>".count($tab)."</FONT> élements<BR>";
foreach ($tab as $cle=>$valeur)
{
print "\$tab[<FONT COLOR=green>$cle</FONT>] vaut";
print " <FONT COLOR=green>$tab[$cle]</FONT><BR>";
}
?>
</body></html>



Nous vous informons que ce cours constitue une œuvre protégée en France par le Code de la Propriété Intellectuelle, et à l’étranger par les conventions internationales en vigueur sur le droit d’auteur. La violation de l’un des droits d’auteur de l’œuvre est un délit de contrefaçon. Il est donc interdit, à titre privé ou public, de reproduire, copier, vendre, revendre ou exploiter, que ce soit dans un but commercial ou purement gratuit, ce cours, sauf accord exprès et préalable de son auteur.


Google
 
 RESSOURCES GRATUITES
 Caractères spéciaux
 Code Couleurs HTML
 Générateur Méta Tags
 Références HTML
 Scripts : ASP
 Scripts : Java Scripts
 PRATIQUE / OUTILS
 Salons Informatiques
 Astuces Windows
 TÉLÉCHARGEMENTS
 Utilitaires système
 Logiciels pratiques
 Jeux & démos
 INFOS SITE
 Contacts
 Mentions légales
 Qui sommes-nous ?
 PARTENAIRES
 Jeux et Jouets
 Murielle Cahen
 Cours d'anglais
 Droit NTIC
 Directeur Internet
 Australie
 Création site Internet
 VOD News