Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Officiels > Site Web > Lecture du tutoriel

Les conditions

Avatar
Auteur : M@teo21
Créé : le 16/08/2005 02:10:44
Modifié : le 03/07/2008 11:03:50
Noter et commenter ce tutoriel
Imprimer ce tutoriel
Ce chapitre est d'une importance capitale. En effet, vous serez très souvent amenés à employer des "conditions".
Nota : j'aurais dû appeler ce chapitre "Structures conditionnelles", mais j'ai préféré simplifier le titre, j'espère que vous me comprendrez ;)

Bon, ça sert à quoi d'utiliser des conditions ?

Eh bien, on a parfois besoin d'afficher des choses différentes en fonction de certaines données.
Par exemple, si c'est le matin, vous voudrez dire "bonjour" à votre visiteur, si c'est le soir il vaudrait mieux dire "bonsoir".

C'est là qu'interviennent les conditions. Elles permettent de donner des ordres différents à PHP selon le cas. Pour notre exemple, on lui dirait : Si c'est le matin, affiche "Bonjour". Sinon, si c'est le soir, affiche "Bonsoir". Vous allez le voir, les conditions c'est vraiment la base pour rendre votre site dynamique, c'est à dire d'afficher des choses différentes en fonction du visiteur, de l'heure de la journée, de la date etc etc...

Voilà pourquoi ce chapitre est si important !

Allez, on y va ! :)
Sommaire du chapitre :
Chapitre précédent Sommaire Chapitre suivant

La structure de base : If... Else

On appelle ça une structure parce que ça a une "forme" particulière.
Celle que je vais vous apprendre à utiliser maintenant, c'est la principale à connaître. Heureusement qu'il n'y a pas 50 façons d'utiliser des conditions :p

Pour étudier la structure If... Else, nous allons suivre le plan suivant :
  1. Les symboles à connaître : il va d'abord falloir retenir quelques symboles qui permettent de faire des comparaisons. Soyez attentifs car ils vous seront utiles pour les conditions.
  2. La structure If... Else : c'est le gros morceau. Là vous allez voir comment fonctionne une condition avec If... Else. Inutile de vous dire qu'il est indispensable de bien comprendre cela ;)
  3. Des conditions multiples : on compliquera un peu nos conditions. Vous allez voir en effet qu'on peut utiliser plusieurs conditions à la fois.
  4. Le cas des booléens : nous verrons ensuite qu'il existe une façon particulière d'utiliser les conditions quand on travaille sur des booléens. Si vous ne savez pas ce que sont les booléens, revoyez le chapitre sur les variables.
  5. L'astuce bonus : parce qu'il y a toujours un bonus pour récompenser ceux qui ont bien suivi jusqu'au bout :p


Les symboles à connaître



Juste avant de commencer, je dois vous montrer les symboles que l'on sera amenés à utiliser. Je vais vous faire un petit tableau avec ces symboles et leur signification, essayez de bien les retenir ils vous seront utiles !

Symbole Signification
== Est égal à
> Est supérieur à
< Est inférieur à
>= Est supérieur ou égal à
<= Est inférieur ou égal à
!= Est différent de

Il y a deux symboles "égal" (==) sur la première ligne, et il ne faut pas confondre ça avec le simple = que je vous ai appris dans le chapitre sur les variables. Ici, le double égal sert à tester l'égalité, à dire "Si c'est égal à..."
Dans les conditions, on utilisera toujours le double égal (==)

Les symboles "supérieur" (>) et "inférieur" (<) sont situés en bas à gauche de votre clavier.


La structure If... Else



Voici ce qu'on doit mettre dans l'ordre pour utiliser une condition :
Puisqu'un exemple vaut toujours mieux qu'un long discours :

Code : PHP
1
2
3
4
5
6
<?php
if ($age <= 12)
{
    echo "Salut gamin !";
}
?>


Ici, on demande à PHP : Si la variable $age est inférieure ou égale à 12, affiche "Salut gamin !"

Vous remarquerez que dans la quasi-totalité des cas, c'est sur une variable qu'on fait la condition.
Dans notre exemple, on travaille sur la variable $age. Ce qui compte ici, c'est qu'il y a deux possibilités : soit la condition est remplie (l'âge est inférieur ou égal à 12 ans) et alors on affiche quelque chose ; sinon, eh bien on saute les instructions entre accolades, on ne fait rien.

Bon on peut quand même améliorer notre exemple. On va afficher un autre message si l'âge est supérieur à 12 ans :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<?php
$age = 8;
 
if ($age <= 12) // SI l'âge est inférieur ou égal à 12
{
    echo "Salut gamin ! Bienvenue sur mon site !<br />";
    $autorisation_entrer = "Oui";
}
else // SINON
{
    echo "Ceci est un site pour enfants, vous êtes trop vieux pour pouvoir entrer. Au revoir !<br />";
    $autorisation_entrer = "Non";
}
 
echo "Avez-vous l'autorisation d'entrer ? La réponse est : $autorisation_entrer";
?>


Bon comment marche ce code ? Tout d'abord, j'ai mis plusieurs instructions entre accolades (il ne faut pas oublier que vous pouvez mettre plusieurs instructions).
Ensuite, vous avez remarqué que j'ai ajouté le mot "else", qui signifie en anglais "sinon". En clair, on demande : Si l'âge est inférieur ou égal à 12 ans, fais ceci, sinon fais cela.

Essayez ce bout de code chez vous, en vous amusant à modifier la valeur de $age (sur la première ligne). Vous allez voir que le message qui s'affiche change en fonction de l'âge que vous indiquez !

Bien entendu, vous mettez les instructions que vous voulez entre accolades. Ici par exemple j'ai affiché un message, et j'ai donné une valeur différente à la variable $autorisation_entrer, ce qui pourrait nous servir par la suite. Par exemple :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<?php
if ($autorisation_entrer == "Oui") // SI on a l'autorisation d'entrer
{
    // instructions à exécuter quand on est autorisé à entrer
}
elseif ($autorisation_entrer == "Non") // SINON SI on n'a pas l'autorisation d'entrer
{
    // instructions à exécuter quand on n'est pas autorisé entrer
}
else // SINON (la variable ne contient ni Oui ni Non, on ne peut pas agir)
{
    echo "Euh, je ne connais pas ton âge, tu peux me le rappeler s'il te plaît ?";
}
?>


Oulah, ça commence à se compliquer un tantinet n'est-ce pas ? :p

Bon la principale nouveautée ici, c'est le mot-clé "elseif" qui signifie "Sinon si". Dans l'ordre, PHP rencontre les conditions suivantes :
  1. Si $autorisation_entrer est égal à "Oui", tu exécutes ces instructions...
  2. Sinon si $autorisation_entrer est égal à "Non", tu exécutes ces autres instructions...
  3. Sinon, tu redemandes l'âge pour savoir si on a ou non l'autorisation d'entrer.

Au fait, au départ, une variable ne contient rien. Sa valeur est vide, on dit qu'elle vaut NULL, c'est-à-dire rien du tout.
Pour vérifier si la variable est vide, vous pouvez taper : if ($variable == NULL)...


Des conditions multiples



Vous devez vous dire : "Rhalala, qu'est-ce qu'il va encore nous sortir ce vieux tordu ?" :D

Bah, on peut toujours faire plus compliqué, vous devriez commencer à avoir l'habitude ^^
Je pouvais difficilement passer à côté des conditions multiples, car elles sont très pratiques. Allez, un dernier petit effort et on a bientôt fini :)

Ce qu'on va essayer de faire, c'est de donner plusieurs conditions à la fois. Pour cela, on aura besoin de nouveaux mots-clés. Voici les principaux à connaître :

Mot-clé Signification Symbole équivalent
AND Et &&
OR Ou ||


Le symbole équivalent pour OR est consitué de 2 barres verticales. Pour taper une barre verticale, appuyez sur la touche "Alt Gr" et "6" en même temps (clavier français), ou "Alt Gr" et "&" (clavier belge).
Bah oui faut pas oublier que selon le pays le clavier change :p

La première colonne contient le mot-clé en anglais, la troisième son équivalent en symbole. Les deux fonctionnent aussi bien, mais je vous recommande d'utiliser le mot-clé de préférence, c'est plus "facile" à lire (j'espère que vous connaissez un peu l'anglais quand même :p ) Servez-vous de ces mots-clés pour mettre plusieurs conditions entre les parenthèses. Voici un premier exemple :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
if ($age <= 12 AND $sexe == "garçon")
{
    echo "Bienvenue sur le site de Captain Mégakill !";
}
elseif ($age <= 12 AND $sexe == "fille")
{
    echo "C'est pas un site pour les filles ici, retourne jouer à la Barbie !";
}
?>


C'est tout simple en fait et ça se comprend très bien : si l'âge est inférieur ou égal à 12 ans et que c'est un garçon, on lui permet d'accéder au site de son superhéro préféré.
Sinon, si c'est une fille dont l'âge est inférieur ou égal à 12 ans, on l'envoie gentiment balader (hum hum, m'accusez pas de sexisme hein, c'était juste pour l'exemple :p ).

Bon allez, un dernier exemple avec OR pour que vous l'ayez vu au moins une fois, et on arrête là ;)

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
if ($sexe == "fille" OR $sexe == "garçon")
{
    echo "Salut Terrien !";
}
else
{
    echo "Euh, si t'es ni une fille ni un garçon, t'es quoi alors ?";
}
?>


Le cas des booléens



Si vous regardez bien le dernier code source (avec $autorisation_entrer), vous trouvez pas qu'il serait plus adapté d'utiliser des booléens ?

On a parlé des booléens dans le chapitre sur les variables. Vous vous souvenez ?
Ce sont ces variables qui valent soit true (vrai) soit false (faux). Eh bien, les booléens sont particulièrement utiles avec les conditions ! Voici comment on teste une variable booléenne :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
if ($autorisation_entrer == true)
{
    echo "Bienvenue petit Zér0 :o)";
}
elseif ($autorisation_entrer == false)
{
    echo "T'as pas le droit d'entrer !";
}
?>


Voilà, jusque-là rien d'extraordinaire. Vous avez vu que je n'ai pas mis de guillemets pour true et false (comme je vous l'ai dit dans le chapitre sur les variables).

Mais un des avantages des booléens, c'est qu'ils sont particulièrement adaptés aux conditions.
Pourquoi ? Parce qu'en fait vous n'êtes pas obligés d'ajouter le == true. Quand vous travaillez sur une variable booléenne, PHP comprend très bien ce que vous avez voulu dire :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
if ($autorisation_entrer)
{
    echo "Bienvenue petit Zér0 :o)";
}
else
{
    echo "T'as pas le droit d'entrer !";
}
?>


PHP comprend qu'il faut qu'il vérifie si $autorisation_entrer vaut true. Avantages :
En effet, si vous "lisez" la première ligne, ça donne : "SI on a l'autorisation d'entrer...".
C'est donc un raccourci à connaître quand on travaille sur des booléens.

Oui mais ta méthode "courte" ne marche pas si on veut vérifier si le booléen vaut faux. Comment on fait avec la méthode courte hein ?

Il y a un symbole qui permet de vérifier juste si la variable vaut false : le point d'exclamation !. On écrit : if (! $autorisation_entrer)...
C'est une autre façon de faire. Si vous préférez mettre if ($autorisation_entrer == false) c'est tout aussi bien, mais moi je trouve que c'est plus lisible d'utiliser la méthode "courte" ;)

L'astuce bonus



Avec les conditions, il y a une astuce à connaître.
Sachez que les deux codes ci-dessous donnent exactement le même résultat :

Code : PHP
1
2
3
4
5
6
<?php
if ($variable == 23)
{
    echo "<strong>Bravo !</strong> Vous avez trouvé le nombre mystère !";
}
?>


Code : PHP
1
2
3
4
5
6
7
8
9
<?php
if ($variable == 23)
{
?>
<strong>Bravo !</strong> Vous avez trouvé le nombre mystère !
 
<?php
}
?>


Comme vous le voyez, dans la seconde colonne on n'a pas utilisé de echo. En effet, il vous suffit d'ouvrir l'accolade ({), puis de fermer la balise php (?>), et vous pouvez mettre tout le texte à afficher que vous voulez en HTML !
Rudement pratique quand il y a de grosses quantités de texte à afficher, et aussi pour éviter d'avoir à se prendre la tête avec les backslash devant les guillemets (").
Il vous faudra toutefois penser à refermer l'accolade après (à l'intérieur d'une balise PHP bien entendu).

Et après ça, ma foi, il n'y a rien de particulier à savoir. Vous allez rencontrer des conditions dans la quasi-totalité des exemples que je vous donnerai par la suite.
Vous ne devriez pas avoir de problèmes normalement pour utiliser des conditions, il n'y a rien de bien difficile. Contentez-vous de reprendre le schéma que je vous ai donné pour la structure If... Else, et de l'appliquer à votre cas. Nous aurons d'ailleurs bientôt l'occasion de pratiquer un peu, et vous verrez que les conditions sont souvent indispensables.

Une alternative pratique : Switch

En théorie, les if... elseif... else que je viens de vous montrer suffisent pour traiter n'importe quelle condition.

Mais alors pourquoi tu viens nous compliquer la vie avec encore un nouveau truc ? Image utilisateur

Pour vous faire comprendre l'intérêt de Switch, je vais vous donner un exemple un peu lourd avec les if et elseif que vous venez d'apprendre :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
if ($note == 0)
{
    echo "Tu es vraiment un gros Zér0 !!!";
}

elseif ($note == 5)
{
    echo "Tu es très mauvais";
}

elseif ($note == 7)
{
    echo "Tu es mauvais";
}

elseif ($note == 10)
{
    echo "Tu as pile poil la moyenne, c'est un peu juste...";
}

elseif ($note == 12)
{
    echo "Tu es assez bon";
}

elseif ($note == 16)
{
    echo "Tu te débrouilles très bien !";
}

elseif ($note == 20)
{
    echo "Excellent travail, c'est parfait !";
}

else
{
    echo "Désolé, je n'ai pas de message à afficher pour cette note";
}
?>


Je ne peux pas vous le cacher, cet exemple est tiré du script PHP que j'ai écrit pour les Q.C.M. en fin de chapitre (bon c'est un peu simplifié bien entendu ;) ).
Comme vous le voyez, c'est lourd, long, et répétitif. Dans ce cas, on peut utiliser une autre structure plus souple : c'est Switch.

Voici le même exemple avec Switch (le résultat est le même, mais le code est plus adapté) :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
$note = 10;

switch ($note) { // on indique sur quelle variable on travaille

case 0: // dans le cas où $note vaut 0
echo "Tu es vraiment un gros Zér0 !!!";
break;

case 5: // dans le cas où $note vaut 5
echo "Tu es très mauvais";
break;

case 7: // dans le cas où $note vaut 7
echo "Tu es mauvais";
break;

case 10: // etc etc
echo "Tu as pile poil la moyenne, c'est un peu juste...";
break;

case 12:
echo "Tu es assez bon";
break;

case 16:
echo "Tu te débrouilles très bien !";
break;

case 20:
echo "Excellent travail, c'est parfait !";
break;

default:
echo "Désolé, je n'ai pas de message à afficher pour cette note";

}
?>


Testez donc ce code !
Essayez de changer la note (dans la première instruction) pour voir comment PHP réagit ! Et si vous voulez apporter quelques modifications à ce code (vous allez voir qu'il n'est pas parfait), n'hésitez pas ça vous fera de l'entraînement !


Tout d'abord, il y a beaucoup moins d'accolades (elles marquent seulement le début et la fin du switch).
"case" signifie "cas". Dans le switch, on indique au début sur quelle variable on travaille (ici $note). On dit à PHP : Je vais analyser la valeur de $note. Après, on utilise des "case" pour analyser chaque cas (case 0, case 10 etc etc...). Cela signifie : Dans le cas où la valeur est 0... Dans le cas où la valeur est 10...

Avantage : on n'a plus besoin de mettre le double égal ! Défaut : ça ne marche pas avec les autres symboles (< > <= >= !=). En clair, le switch ne peut tester que l'égalité.

Le mot-clé "default" à la fin est un peu l'équivalent du "else". C'est le message qui s'affiche par défaut quelle que soit la valeur de la variable.

Il y a cependant une chose importante à savoir : supposons dans notre exemple que la note soit de 10. PHP va lire : case 0 ? Non. Je saute. case 5 ? Non plus. Je saute. case 7 ? Non plus. Je saute. case 10 ? Oui, j'exécute les instructions. Mais contrairement aux elseif, PHP ne s'arrête pas là et continue à lire les instructions des case qui suivent ! :waw: case 12, case 16 etc...

Pour empêcher cela, utilisez l'instruction break;. L'instruction "break" demande à PHP de sortir du switch. Dès que PHP tombe sur break, il sort des accolades et donc il ne lit pas les "case" qui suivent. En pratique, on utilise très souvent un break car sinon PHP lit des instructions qui suivent et qui ne conviennent pas.
Essayez d'enlever les break dans le code 1.6.7, vous allez comprendre pourquoi ils sont indispensables !

Quand doit-on choisir If, et quand doit-on choisir Switch ?

C'est surtout un problème de présentation et de clarté. Pour une condition simple et courte, on utilise le If, et quand on a une série de conditions à analyser, on préfère utiliser Switch pour rendre le code plus clair :)

Q.C.M.

Les conditions permettent...
Lequel de ces mots signifie "Sinon" ?
Lequel de ces symboles signifie "Est différent de" ?
Que va afficher ce code ?Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
$resultat = 25 - 10;
if ($resultat < 15)
{
    echo "Perdu";
}
else
{
    echo "Gagné";
}
?>
Ce code peut-il afficher "Jour" ?Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<?php
if ($texte != "Menu")
{
    echo "Nuit";
}
elseif ($texte == "Menu")
{
    echo "Soir";
}
else
{
    echo "Jour";
}
?>
Que vaut $animal à la fin de ce bout de code ?Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<?php
$longueur = 145;
$largeur = 73;


if ($longueur > $largeur AND $largeur > 100)
{
    $animal = "Perroquet";
}
elseif ($longueur > $largeur OR $largeur != 73)
{
    $animal = "Serpent";
}
else
{
    $animal = "Renard";
}
?>
Qu'affiche ce Switch ?Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<?php
$pays = "Espagne";
switch ($pays)
{
    case "France":
        echo "Salut";
    break;
    case "Royaume-Uni":
        echo "Hello";
    break;
    case "Espagne":
        echo "Hola";
   break;
}
?>


Vous êtes en train d'assimiler sans le savoir les fondements de la programmation PHP qui détermineront avec quel "style" vous allez coder par la suite.
En effet, on peut parler de "style" de programmation car chaque programmeur va présenter son code différemment (le résultat est le même mais la façon de faire est parfois différente). Ici, je vous présente ma manière de faire, donc au début vous allez avoir un peu mon style, mais rassurez-vous petit à petit vous allez vous créer le vôtre ^^

Quoiqu'il en soit, c'est en ce moment-même que vous apprenez le plus de choses, et il ne faut surtout pas décrocher, d'autant plus qu'on en a presque fini avec les bases !
Chapitre précédent Sommaire Chapitre suivant
Auteur : M@teo21
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 57 Zéros connectés | Requêtes SQL 10 requêtes | Temps de génération de la page : Total (SQL) 0.1582s (0.1458s)