Aller au contenu principal

Examen blanc Niveau 1 - PHP Fondamentaux

Formation PHP-Laravel – Dresseur de Code


Objectif de l'examen

Vérifier que vous maîtrisez les bases du Web avec PHP : cycle requête/réponse, syntaxe de base, tableaux et chaînes, formulaires et sécurité minimale (XSS).
Conditions de passage au Niveau 2 : réussir cet examen (14/20 minimum).


Modalités

  • Format : questions théoriques + exercices pratiques (code ou réponses courtes).
  • Durée indicative : 45 min à 1 h.
  • Correction : détaillée pour chaque question (disponible après passage ou en annexe).

Partie 1 – Théorie (cycle Web, PHP, HTTP)

Question 1.1 (2 points)

Décrivez le cycle requête → réponse en 4 étapes. Précisez le rôle du navigateur, du serveur et de PHP.

Réponse attendue (correction)
  1. Le navigateur (client) envoie une requête HTTP (URL, méthode GET ou POST, en-têtes, éventuellement corps pour POST).
  2. Le serveur web reçoit la requête. Si l’URL pointe vers un fichier .php, il exécute ce script PHP.
  3. PHP s’exécute côté serveur : il peut lire $_GET/$_POST, accéder à une base, et génère une réponse (souvent du HTML).
  4. Le serveur renvoie une réponse HTTP (code statut, en-têtes, corps = HTML). Le navigateur affiche cette réponse.

PHP ne s’exécute que sur le serveur ; le client ne voit jamais le code PHP, seulement le résultat.

Question 1.2 (1 point)

Quelle est la différence principale entre HTTP et HTTPS ? Pourquoi utilise-t-on HTTPS en production ?

Réponse attendue

HTTPS chiffre les échanges (protocole TLS/SSL) ; HTTP envoie les données en clair.
En production on utilise HTTPS pour protéger les mots de passe, les données personnelles et l’intégrité des pages.

Question 1.3 (1 point)

Où s’exécute le code PHP : sur le serveur ou dans le navigateur ? Le navigateur peut-il voir le code PHP ?

Réponse attendue

Le code PHP s’exécute sur le serveur. Le navigateur ne voit jamais le code PHP, uniquement le résultat (HTML, etc.) renvoyé par le serveur.


Partie 2 – Syntaxe et structures (variables, conditions, boucles, fonctions)

Question 2.1 (2 points)

Qu’affiche le code suivant ? Expliquez brièvement.

$n = 7;
echo match ($n % 2) {
0 => "even",
1 => "odd",
};
Réponse attendue

Affiche : odd
Explication : $n % 2 vaut 1 (reste de 7 par 2). La branche 1 => "odd" du match est donc exécutée et la valeur retournée est "odd".

Question 2.2 (2 points)

Écrire une fonction isAdult(int $age): bool qui retourne true si $age >= 18, sinon false.

Correction
function isAdult(int $age): bool {
return $age >= 18;
}

Question 2.3 (2 points)

Écrire une boucle for qui affiche les entiers de 1 à 10 (inclus), séparés par un espace.

Correction
for ($i = 1; $i <= 10; $i++) {
echo $i . " ";
}

Partie 3 – Tableaux et chaînes

Question 3.1 (2 points)

Que retournent les expressions suivantes ?

  • explode(",", "a,b,c")
  • implode("-", [1, 2, 3])
Réponse attendue
  • explode(",", "a,b,c")["a", "b", "c"]
  • implode("-", [1, 2, 3])"1-2-3"

Question 3.2 (2 points)

Écrire une fonction average(array $values): float qui calcule la moyenne des valeurs du tableau (supposé non vide).

Correction
function average(array $values): float {
return array_sum($values) / count($values);
}

Partie 4 – Formulaires et sécurité

Question 4.1 (2 points)

Pour un formulaire d’inscription (prénom, email, mot de passe), quelle méthode HTTP faut-il utiliser : GET ou POST ? Donnez deux raisons.

Réponse attendue

POST.
Raisons possibles : (1) les données (mot de passe) ne doivent pas apparaître dans l’URL ni dans l’historique ; (2) on modifie des données côté serveur (création de compte) ; (3) pas de limite de taille comme avec GET.

Question 4.2 (2 points)

Pourquoi doit-on toujours utiliser htmlspecialchars() (ou équivalent) avant d’afficher en HTML une donnée provenant de l’utilisateur ou de la base de données ? Quel risque évite-t-on ?

Réponse attendue

Pour échapper les caractères spéciaux HTML (<, >, ", etc.) afin qu’ils ne soient pas interprétés comme du code.
Cela évite le risque XSS (Cross-Site Scripting) : un attaquant ne peut pas injecter du JavaScript ou du HTML exécuté dans le navigateur des autres utilisateurs.

Question 4.3 (2 points)

En PHP, comment récupérer sans erreur la valeur du champ email envoyé en POST, en donnant la chaîne vide "" si le champ est absent ?

Réponse attendue
$email = $_POST["email"] ?? "";

L’opérateur null coalescing ?? retourne la valeur de droite si la clé n’existe pas ou vaut null, ce qui évite une notice.


Barème indicatif (total 20 points)

PartiePoints
1 – Théorie (Web, HTTP, PHP)4
2 – Syntaxe (match, fonction, boucle)6
3 – Tableaux et chaînes4
4 – Formulaires et sécurité6
Total20

Barème : 20 points. Passage au Niveau 2 à partir de 14/20.


Après l'examen

  • Réussi : accès au Niveau 2 – PHP avancé (Module 5 : POO).
  • Échec : revoir les modules 1 à 4 et la correction détaillée, puis repasser l’examen.