logo du langage PHP Les bases du langage PHP

Chapitre 6 - Les conditions (if/elseif/else et switch/case)

Documentation officielle

Les conditions sont incontournables dans le fonctionnement d'un site dynamique

J'en aurai par exemple besoin pour vérifier que le mot de passe inséré dans le formulaire de connexion est bien le même que celui enregistré en BDD (base de données)

Si (if) le mot de passe est similaire, alors l'utilisateur sera connecté. Sinon (else), je l'en avertis, et ce processus de connexion ne sera pas validé

Pour un site qui fait de la vente, je pourrai aussi vérifier la quantité commandée par rapport au stock disponible en BDD

Si (if) mon stock est inférieur à la quantité commandée, la vente ne pourra etre validée. Je pourrai alors proposer à l'utilisateur une nouvelle quantité (égale ou inférieure au stock) qui permettra de continuer le processus de vente

Il ne faut pas oublier qu'entre le moment où le produit aura été mis dans le panier et sa validation pour le paiement (plusieurs minutes, heures voire jours auront pu s'écouler), le stock aura pu décroitre


$a = 22;
$b = 27;
$c = 35;
$d = 48;
$e = 55;

if($a < $b){
echo "Vrai, a est bien inférieur à b";
}else{
echo "Faux, a n'est pas supérieur à b";
}

Vrai, a est bien inférieur à b

Les deux conditions doivent etre respectées


if($a < $b && $b > $c){
echo "Vrai, les deux conditions sont respectées";
}else{
echo "Faux, une des deux conditions n'est pas respectée";
}

Faux, une des deux conditions n'est pas respectée

Respecter une des deux conditions suffira


if($a < $b || $b > $c){
echo "Vrai, une des deux conditions est respectée";
}else{
echo "Faux, aucune condition n'est respectée";
}

Vrai, une des deux conditions est respectée

Seule une des deux conditions doit etre respectée


if($a < $b XOR $b < $c){
echo "Vrai, une seule condition est respectée";
}else{
echo "Faux, trop de conditions sont respectées";
}

Faux, trop de conditions sont respectées

Documentation officielle

Elseif permet de vérifier plusieurs cas de figure

Ici, deux (puis le else), avec introduction de l'élément de comparaison != (différent de)


if($a > $b){
echo "Vrai, a est bien supérieur à b";
}elseif($a != 22){
echo "Vrai, a n'est pas égal à 22";
}else{
echo "Faux, aucune condition n'est vraie";
}

Faux, aucune condition n'est vraie

Aussi appelée Ternaire. Le ? remplaçant if et : remplaçant else


($d < $e)? "Vrai, d est bien inférieur à e" : "Faux"

Vrai, d est bien inférieur à e

Documentation officielle

Pour vérifier si une variable existe, a déjà été declarée, définie etc...

Très utile pour vérifier si une valeur a bien été fournie dans un formulaire (d'inscription, par exemple), avant de le valider (couplée a isset($_POST['indice_a_verifier']), dans le cas présent)

Même chose avec isset($_GET['indice_a_verifier']), pour s'assurer que des informations ont bien transité par l'URL (ou isset($_SESSION['indice_a_verifier']) pour vérifier si la session existe)

Dans ces trois cas de figures, isset() pourra etre remplacé par array_key_exists ( syntaxe légèrement différente -> if(array_key_exists('indice_a_verifier', $_POST)))


if(isset($test)){
echo "La variable test existe";
}else{
echo "La variable test n'a pas été declarée";
}

La variable test n'a pas été declarée

A titre indicatif, pour se familiariser avec, voici sa forme contractée/ternaire


(isset($test)) ? "La variable test existe" : "La variable test n'a pas été declarée"

Notez que isset() ne fonctionne pas pour une constante (voir chapitre suivant). Il faudra utiliser defined()

Documentation officielle

En plus de != (différent de), < (ou <=), > (ou >=), deux autres opérateurs de comparaison seront très utiles

Le == (double égalité) et le === (triple égalité)

Attention le = n'est pas un opérateur de comparaison. Il sert a affecter une valeur, pas à comparer

Pour reprendre l'exemple de la connexion, c'est le == qui va me permettre de comparer le mot de passe inséré dans le formulaire avec le mdp stocké en BDD


$var = 100;
$var2 = "100";

if($var == $var2){
echo "Les deux variables ont la même valeur";
}else{
echo "Les deux variables ont une valeur différente";
}

Les deux variables ont la même valeur


$var = 100;
$var2 = "100";

if($var === $var2){
echo "Les deux variables ont la même valeur et le même type";
}else{
echo "Les deux variables ont un type différent";
}

Les deux variables ont un type différent

Je peut conclure que == compare les valeurs, alors que === compare la valeur, mais aussi le type (différents dans le dernier cas de figure; un integer vs un string)

Documentation officielle

Un peu moins fréquente que if/elseif/else tout en étant aussi efficace.


$couleur = "bleu";

switch($couleur){
  case "vert":
    echo "La couleur est bien vert";
    break;
  case "bleu":
    echo "La couleur est bien bleu";
    break;
  default:
    echo "Pas la bonne couleur";
    break;
}

La couleur est bien bleu

La même condition, avec un if/elseif/else


$couleur = "bleu";

if($couleur == "vert"){
  echo "La couleur est bien vert";
}elseif($couleur == "rouge"){
  echo "La couleur est bien rouge";
}else{
  echo "Pas la bonne couleur";
}

Pas la bonne couleur