Module 2Programmer en PHP
Chapitre 4 sur 11
Maîtriser le langage PHP
Variables, types, conditions, boucles, fonctions, formulaires GET et POST, redirections, chaînes et dates.
- ≈ 180 min
- 8 leçons
- 8 vidéos
- 3 exercices
Module 2Programmer en PHP
Chapitre 4 sur 11
Variables, types, conditions, boucles, fonctions, formulaires GET et POST, redirections, chaînes et dates.
Objectifs
Avec ce chapitre, tu sauras…
echo ;global, static), les constantes et les superglobales ;if, switch, match) et les boucles ;$_GET et $_POST ;$_SERVER et rediriger avec header() ;Leçon 1
<?php
// commentaire sur une ligne
# commentaire sur une ligne (style shell)
/* commentaire
sur plusieurs lignes */
echo 'Bonjour'; // affiche une chaîne
echo 'Bonjour', ' ', 'Sara'; // echo accepte plusieurs arguments
print 'Bonjour'; // print : un seul argument, renvoie 1
printf("%s a %d ans et une moyenne de %.2f\n", 'Ali', 20, 14.5); // affichage formaté| Fonction | Particularité |
|---|---|
echo | n'a pas de valeur de retour, accepte plusieurs arguments, légèrement plus rapide |
print | renvoie 1, un seul argument |
printf(format, valeurs…) | affichage formaté : %s chaîne, %d entier, %.2f nombre à 2 décimales |
print_r($x), var_dump($x) | affichent le contenu d'une variable (tableau, objet) pour déboguer ; var_dump donne aussi les types |
Vidéo · À regarder
ENPHP Full Course 2025 - Learn PHP from Scratch
Dani Krossing · YouTube
Leçon 2
| Opérateur | Exemple | Effet |
|---|---|---|
= | $a = 2; | affectation |
+=, -=, *=, /=, %=, **= | $c += 4; | $c = $c + 4; |
.= | $e .= ' les stagiaires'; | concaténation et affectation |
??= |
Leçon 3
| Famille | Types | Exemples |
|---|---|---|
| scalaires | bool, int, float, string | true, 42, 0x1A (26), 0b1111 (15), 1_000_000, 3.14, 1.2e3, 'texte' |
| composés | array, object, callable, iterable | [1, 2, 3], new DateTime() |
| spéciaux | null, resource | null, un fichier ouvert avec fopen |
Leçon 4
| Opérateur | Signification | Exemple | Résultat |
|---|---|---|---|
== | égal en valeur (avec conversion) | 5 == '5' | true |
=== | égal en valeur et en type | 5 === '5' | false |
!=, !== | différent |
Leçon 5
Vidéo · À regarder
ENPHP Full Course 2025 - Learn PHP from Scratch
Dani Krossing · YouTube
Leçon 6
| GET | POST | |
|---|---|---|
| où sont les données ? | dans l'URL, visibles | dans le corps de la requête |
| taille | limitée (quelques milliers de caractères) | grande (fichiers) |
| favoris, historique | l'URL complète est enregistrée |
Leçon 7
Clé de $_SERVER | Contenu |
|---|---|
REQUEST_METHOD | GET, POST… |
PHP_SELF, SCRIPT_NAME | le chemin du script courant |
SERVER_NAME, HTTP_HOST | le nom du serveur |
REMOTE_ADDR | l'adresse IP du visiteur |
HTTP_USER_AGENT | le navigateur du visiteur |
Leçon 8
| Fonction | Rôle | Exemple | Résultat |
|---|---|---|---|
strlen($s) / mb_strlen($s) | longueur (octets / caractères) | mb_strlen('été') | 3 |
strtoupper, strtolower | majuscules, minuscules (ASCII) | strtoupper('ofppt') | OFPPT |
mb_strtoupper | majuscules avec accents |
1En PHP, la concaténation s'écrit avec…
2echo 'Bonjour $nom'; affiche…
35 === '5' vaut…
4Pour lire le champ email d'un formulaire POST sans avertissement :
5Pour afficher une saisie de l'utilisateur sans risque XSS :
6header('Location: ...') doit être appelé…
7match compare avec…
8(bool) '0' vaut…
L'essentiel du chapitre
<?php … ?>, <?= … ?>, ; ; commentaires //, #, /* */ ; echo, print, printf, var_dump, print_r.$nom (sensibles à la casse, sans déclaration) ; . concatène ; "…$x…" interprète, '…' non ; global, static ; constantes const / define ; constantes magiques __DIR__, __LINE__.bool, int, float, string, array, object, null ; conversions (int), intval ; faux : 0, '', '0', [], null.===, ??, <=> ; if/elseif/else, switch, match ; while, do-while, for, foreach ($t as $k => $v) ; syntaxe alternative if (): … endif;.fn($x) => ….$_GET (URL, lecture), $_POST (corps, modification), $_SERVER['REQUEST_METHOD'] ; ?? '', validation serveur, htmlspecialchars.header('Location: …'); exit; avant tout affichage ; modèle PRG.$ville ??= 'Rabat';affecte seulement si la variable est null ou n'existe pas |
& | $b = &$a; | affectation par référence : $b et $a désignent la même valeur |
| Constante magique | Valeur |
|---|---|
__LINE__ | le numéro de la ligne courante |
__FILE__, __DIR__ | le chemin complet du fichier, de son dossier |
__FUNCTION__, __CLASS__, __METHOD__ | le nom de la fonction, de la classe, de la méthode courante |
__NAMESPACE__ | l'espace de noms courant |
Vidéo · À regarder
ENPHP Full Course 2025 - Learn PHP from Scratch
Dani Krossing · YouTube
Règle
Les valeurs considérées comme false
| Fonction | Rôle |
|---|---|
isset($x) | la variable existe et n'est pas null |
empty($x) | la variable n'existe pas ou vaut une valeur « fausse » |
is_numeric($x), is_int, is_string, is_array, is_null | tester un type |
unset($x) | détruire une variable |
intval, floatval, strval | convertir |
5 !== '5'true |
<=> | « vaisseau spatial » : -1, 0 ou 1 | 3 <=> 7 | -1 |
?? | fusion null | $_GET['page'] ?? 1 | la valeur, ou 1 si elle n'existe pas |
&&, and, ! | ET, NON | $age >= 18 && $inscrit |
Vidéo · À regarder
ENPHP Full Course 2025 - Learn PHP from Scratch
Dani Krossing · YouTube
switch | match | |
|---|---|---|
| comparaison | == (avec conversion) | === (stricte) |
| résultat | exécute des instructions | renvoie une valeur |
break | obligatoire | inutile |
| aucun cas ne correspond | rien ne se passe (sans default) | erreur UnhandledMatchError |
Vidéo · À regarder
ENPHP Full Course 2025 - Learn PHP from Scratch
Dani Krossing · YouTube
Vidéo · À regarder
ENPHP Full Course 2025 - Learn PHP from Scratch
Dani Krossing · YouTube
| non |
| usage | lire : recherche, filtre, pagination | modifier : inscription, connexion, ajout, paiement |
Vidéo · À regarder
ENPHP Full Course 2025 - Learn PHP from Scratch
Dani Krossing · YouTube
HTTP_ACCEPT_LANGUAGE| les langues préférées du visiteur |
HTTPS | non vide si la page est en HTTPS |
REQUEST_URI | l'URL demandée (chemin et paramètres) |
mb_strtoupper('été') |
ÉTÉ |
ucfirst, ucwords | première lettre en majuscule | ucwords('sara benali') | Sara Benali |
trim, ltrim, rtrim | supprimer les espaces | trim(' ok ') | ok |
str_contains, str_starts_with | contient / commence par (PHP 8) | str_contains('Cours PHP', 'PHP') | true |
strpos($s, $x) | position (ou false) | strpos('Cours PHP', 'PHP') | 6 |
substr($s, $debut, $long) | sous-chaîne | substr('Bonjour', 0, 3) | Bon |
str_replace($a, $b, $s) | remplacer | str_replace('JS', 'PHP', 'Cours JS') | Cours PHP |
explode($sep, $s) / implode($sep, $t) | chaîne → tableau / tableau → chaîne | explode(',', 'a,b,c') | ['a', 'b', 'c'] |
number_format($n, 2, ',', ' ') | formater un nombre | number_format(1234.5, 2, ',', ' ') | 1 234,50 |
str_pad, sprintf | compléter, formater | sprintf('%05d', 42) | 00042 |
Caractère de date() | Signification | Exemple |
|---|---|---|
d, j | jour sur 2 chiffres, sans zéro | 01, 1 |
m, n | mois sur 2 chiffres, sans zéro | 11, 11 |
Y, y | année sur 4, sur 2 chiffres | 2026, 26 |
H, i, s | heures (0-23), minutes, secondes | 10, 42, 05 |
l, D | jour de la semaine en toutes lettres, abrégé (en anglais) | Sunday, Sun |
N | jour de la semaine, de 1 (lundi) à 7 (dimanche) | 7 |
Vidéo · À regarder
ENPHP Full Course 2025 - Learn PHP from Scratch
Dani Krossing · YouTube
mb_strlen, trim, str_contains, explode, implode, number_format ; dates : date(), strtotime, DateTime, diff.Le résumé cite <? … ?>, <script language="php"> et <% … %>. Les deux dernières ont été supprimées en PHP 7, et <? … ?> dépend d'un réglage (short_open_tag) souvent désactivé. Utilise uniquement <?php (et <?= pour afficher), qui fonctionnent partout. Attention aussi à <? php avec une espace, qui provoque une erreur.
La syntaxe de base de PHP (en anglais).
En PHP, une variable commence par $, suivi de son nom. Il n'y a pas de déclaration : la variable est créée à sa première affectation, et son type est déterminé par sa valeur.
<?php
$nom = 'Sara'; // valide
$_age = 20; // valide
$moyenneGenerale = 14.5;
// $2eme = 'x'; // invalide : commence par un chiffre
// $nom-complet = 'x'; // invalide : le tiret est l'opérateur moins
// $nom complet = 'x'; // invalide : espace
$Nom = 'Ali'; // $Nom et $nom sont deux variables DIFFÉRENTES (sensible à la casse)<?php
var_dump(42, 3.5, 'abc', true, null, [1, 2]);
// int(42) float(3.5) string(3) "abc" bool(true) NULL array(2) {...}
echo gettype(3.5); // double
echo (int) '12abc'; // 12
echo (int) 7.9; // 7 (arrondi vers zéro)
echo (float) '3.14'; // 3.14
echo intdiv(17, 5); // 3 (division entière)
echo 17 % 5; // 2 (modulo)
var_dump((bool) '0'); // bool(false) : la chaîne "0" est fausse !Tableau: Les comparaisons
<?php
declare(strict_types=1); // en tête de fichier : les types sont vérifiés strictement
function moyenne(array $notes): float // paramètre typé, type de retour
{
if (count($notes) === 0) {
return 0.0;
}
return array_sum($notes) / count($notes);
}
function saluer(string $nom, string $formule = 'Bonjour'): string // valeur par défaut
{
return "$formule $nom";
}
echo moyenne([12, 15, 18]); // 15
echo saluer('Sara'); // Bonjour Sara
echo saluer(formule: 'Salam', nom: 'Ali'); // arguments nommés (PHP 8) : Salam Ali
$carre = fn($x) => $x * $x; // fonction fléchée (PHP 7.4)
echo $carre(5); // 25Les fonctions écrites par le développeur, puis la portée des variables (en anglais).
Les superglobales sont des tableaux prédéfinis, accessibles partout dans le script :
| Superglobale | Contenu |
|---|---|
$_GET |
les paramètres de l'URL (?nom=Sara&page=2) |
$_POST |
les champs d'un formulaire envoyé en POST |
$_REQUEST |
$_GET + $_POST + $_COOKIE (à éviter : on ne sait plus d'où vient la donnée) |
$_SERVER |
informations sur la requête et le serveur |
$_FILES |
les fichiers envoyés (chapitre 5) |
$_SESSION, $_COOKIE |
la session et les cookies (chapitre 8) |
$_ENV, $GLOBALS |
variables d'environnement, toutes les variables globales |
GET : les données dans l'URL
<form action="action.php" method="get">
<p>Votre nom : <input type="text" name="nom"></p>
<p>Votre prénom : <input type="text" name="prenom"></p>
<p><input type="submit" value="OK"></p>
</form>Au clic, le navigateur demande action.php?nom=Lerdorf&prenom=Rasmus : les paramètres suivent le ?, séparés par &.
<?php
$nom = $_GET['nom'] ?? '';
$prenom = $_GET['prenom'] ?? '';
echo 'Bonjour ' . htmlspecialchars("$prenom $nom") . ' et bienvenue';Tableau: POST : les données dans le corps de la requête
Crée inscription.php : un formulaire (nom, prénom, e-mail, date de naissance, filière dans une liste, cours du jour ou du soir). À l'envoi : valide chaque champ côté serveur (nom et prénom d'au moins 2 lettres, e-mail valide, âge entre 15 et 35 ans calculé avec DateTime, filière parmi la liste) ; en cas d'erreur, réaffiche le formulaire avec les messages et les valeurs saisies ; sinon, redirige vers confirmation.php?prenom=... qui affiche « Merci Sara, ton inscription en Développement digital est enregistrée. ».
<?php
$a = '7';
$b = 3;
echo $a + $b, ' ', $a . $b, ' ', $a * $b, "\n";
echo intdiv(17, 4), ' ', 17 % 4, ' ', 2 ** 5, "\n";
$x = null;
echo $x ?? 'vide', ' ', isset($x) ? 'oui' : 'non', "\n";
echo match (true) { $b > 5 => 'grand', $b > 1 => 'moyen', default => 'petit' }, "\n";
echo ucwords(strtolower('SARA BENALI')), ' ', strlen('PHP'), "\n";Les guillemets simples et doubles
<?php
$prenom = 'Sara';
echo 'Bonjour $prenom\n'; // Bonjour $prenom\n (rien n'est interprété)
echo "Bonjour $prenom\n"; // Bonjour Sara + retour à la ligne
echo "Bonjour {$prenom}s"; // Bonjour Saras : les accolades délimitent le nom
echo 'Bonjour ' . $prenom; // Bonjour Sara : le POINT concatène en PHPLa portée des variables
<?php
$taux = 0.2;
function prixTTC($ht) {
global $taux; // sans global, $taux n'existerait pas ici
return $ht * (1 + $taux);
}
function compteur() {
static $n = 0; // initialisée une seule fois, garde sa valeur entre les appels
$n++;
return $n;
}
echo prixTTC(100); // 120
echo compteur(), compteur(), compteur(); // 123Les variables dynamiques
<?php
$a = 'Bonjour';
$$a = 'stagiaire'; // crée la variable $Bonjour
echo "$a {$$a}"; // Bonjour stagiaireLes constantes
<?php
const TVA = 0.20; // au niveau principal du script
define('NOM_SITE', 'Espace stagiaires'); // utilisable partout, même dans un if
echo NOM_SITE; // pas de $ devant une constante
echo defined('TVA') ? 'définie' : 'non définie';require __DIR__ . '/config.php'; inclut un fichier à partir du dossier du fichier courant : c'est la façon fiable d'écrire les chemins.
Les variables et les types de données (en anglais).
false, 0, 0.0, la chaîne vide '', la chaîne '0', le tableau vide [] et null. Toutes les autres valeurs sont vraies.
Le OU logique s'écrit avec deux barres verticales ou avec le mot-clé or. Comme en JavaScript, préfère === à ==.
Les opérateurs en PHP (en anglais).
Les conditions
<?php
$note = 13;
if ($note >= 16) {
$mention = 'Très bien';
} elseif ($note >= 14) {
$mention = 'Bien';
} elseif ($note >= 10) {
$mention = 'Passable';
} else {
$mention = 'Ajourné';
}
echo $mention; // Passable<?php
$jour = 3;
switch ($jour) {
case 1:
$nom = 'Lundi';
break;
case 2:
$nom = 'Mardi';
break;
default:
$nom = 'Autre jour';
}
// match (PHP 8) : renvoie une valeur, compare avec ===, pas de break
$nom = match ($jour) {
1 => 'Lundi',
2 => 'Mardi',
3, 4 => 'Milieu de semaine',
default => 'Autre jour',
};
echo $nom; // Milieu de semaineLa syntaxe alternative pour les gabarits
Dans un fichier qui mélange HTML et PHP, on remplace les accolades par : et endif;, endforeach;, endwhile;… Le code reste lisible au milieu du HTML.
<?php $connecte = true; $stagiaires = ['Sara', 'Ali', 'Imane']; ?>
<?php if ($connecte): ?>
<ul>
<?php foreach ($stagiaires as $s): ?>
<li><?= $s ?></li>
<?php endforeach; ?>
</ul>
<?php else: ?>
<p>Connecte-toi pour voir la liste.</p>
<?php endif; ?>Les boucles
<?php
$i = 1;
while ($i <= 3) {
echo $i++; // 123
}
do {
echo 'au moins une fois';
} while (false);
for ($i = 0; $i <= 10; $i++) {
if ($i % 2) continue; // saute les impairs
echo "$i "; // 0 2 4 6 8 10
}
$notes = ['HTML' => 15, 'CSS' => 13, 'JS' => 17];
foreach ($notes as $module => $note) {
echo "$module : $note\n";
}break 2; sort de deux boucles imbriquées d'un coup ; continue 2; passe au tour suivant de la boucle extérieure.
Les structures de contrôle (en anglais).
Les boucles (en anglais).
<?php
$erreurs = [];
$nom = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') { // le formulaire a été envoyé
$nom = trim($_POST['nom'] ?? '');
$email = trim($_POST['email'] ?? '');
if ($nom === '') {
$erreurs[] = 'Le nom est obligatoire.';
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$erreurs[] = "L'adresse e-mail n'est pas valide.";
}
if (!$erreurs) {
echo '<p>Salut ' . htmlspecialchars($nom) . ', ton inscription est enregistrée.</p>';
}
}
?>
<?php foreach ($erreurs as $e): ?>
<p style="color: red"><?= $e ?></p>
<?php endforeach; ?>
<form method="post">
<input type="text" name="nom" value="<?= htmlspecialchars($nom) ?>" placeholder="Nom">
<input type="email" name="email" placeholder="E-mail">
<button type="submit">Envoyer</button>
</form>Les variables prédéfinies, puis le traitement des données de formulaire (en anglais).
header() : envoyer un en-tête HTTP
<?php
// ... enregistrement réussi ...
header('Location: liste.php?ajout=ok'); // statut 302 + nouvelle adresse
exit; // arrêter le script juste après
// autres usages
http_response_code(404); // envoyer un code d'état
header('Content-Type: application/json; charset=utf-8'); // type MIMELes dates
<?php
date_default_timezone_set('Africa/Casablanca');
echo date('d/m/Y H:i'); // 01/11/2026 10:42
echo date('l j F Y'); // Sunday 1 November 2026 (en anglais)
echo date('Y-m-d', strtotime('+21 days')); // la date de retour d'un prêt
var_dump(checkdate(2, 30, 2026)); // bool(false) : le 30 février n'existe pas
$debut = new DateTime('2026-09-15');
$fin = new DateTime('2027-06-30');
$duree = $debut->diff($fin);
echo $duree->days . ' jours'; // 288 jours
$debut->modify('+1 month');
echo $debut->format('d/m/Y'); // 15/10/2026Les fonctions intégrées de PHP : chaînes, nombres, dates (en anglais).
Crée une page calculatrice.php avec un formulaire (deux nombres, une liste d'opérations + − × ÷, un bouton). À l'envoi (POST), affiche le résultat sous le formulaire en gardant les valeurs saisies. Gère les erreurs : champ vide, valeur non numérique, division par zéro. Utilise match pour le calcul.