1. Que signifie "POO" en PHP ?
a) Programmation Orientale Ordonnée
b) Programmation Orientée Objet
c) Procédure Optimisée Objet
d) Programmation Ouverte Orientée
2. Comment définit-on une classe en PHP ?
a) define class Nom { ... }
b) function Nom { ... }
c) class Nom { ... }
d) new Nom { ... }
3. Comment crée-t-on un objet à partir d’une classe Voiture ?
a) obj = Voiture();
b) new Voiture();
c) $obj = new Voiture();
d) class Voiture();
4. Que signifie le mot-clé private dans une classe PHP ?
a) La méthode est visible par tous
b) La méthode ne peut être appelée que depuis l'extérieur
c) La méthode est inaccessible sauf dans la classe
d) La méthode est protégée par mot de passe
5. Que permet un constructeur (__construct) ?
a) Créer une base de données
b) Initialiser un objet automatiquement à sa création
c) Copier une classe
d) Détruire un objet
6. Le mot-clé extends permet en PHP :
a) De supprimer une classe
b) De créer une nouvelle classe
c) D’hériter d’une autre classe
d) De fermer une classe
7. Quelle est la bonne syntaxe pour définir une méthode publique ?
a) function public maMethode() {}
b) method public maMethode()
c) public function maMethode() {}
d) private method maMethode() {}
8. Qu’est-ce qu’un objet en PHP orienté objet ?
a) Un tableau de valeurs
b) Une instance d’une classe
c) Un fichier PHP
d) Une fonction réutilisable
9. Quel est le rôle d’un constructeur dans une classe ?
p. 1
a) Supprimer une instance automatiquement
b) Créer une nouvelle classe
c) Initialiser un objet lors de sa création
d) Déclarer des variables privées
10. Donnez la différence entre public, private et protected.
a) Ce sont des types de retour de fonction
b) Ils définissent les niveaux d’accès aux propriétés et méthodes
c) Ils servent à nommer des objets
d) Ce sont des types de classes
11. Comment appelle-t-on une méthode d’un objet $p de la classe Personne ?
a) Personne->$p()
b) $p.Personne()
c) $p->methode()
d) methode->$p()
12. Quelle est l’utilité de l’héritage dans la POO ?
a) Réduire la taille du code HTML
b) Partager des fichiers entre projets
c) Réutiliser des propriétés et méthodes d’une classe par une autre
d) Créer des bases de données
13. À quoi sert l’abstraction dans la programmation orientée objet en PHP ?
a) À créer des objets sans les instancier
b) À définir une interface graphique
c) À déclarer des classes avec des méthodes obligatoires pour les classes filles
d) À exécuter du code JavaScript dans une classe PHP
p. 2
8. Complétez la classe suivante pour qu’elle affiche "Bonjour, je suis un étudiant."
class Etudiant {
public function __construct() {
$e = new Etudiant();
………………………………………………………………………………………………………………………………
……………………………………………………
9. Créez une classe Animal avec une propriété $nom et une méthode parler() qui affiche "Je
suis un animal".
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
10. Créez une classe Chien qui hérite de Animal et redéfinit la méthode parler() pour afficher
"Ouaf
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
11. En PHP, quelle superglobale est utilisée pour récupérer les données envoyées par un
formulaire de type POST ?
a) $_GET
b) $_POST
p. 3
c) $_SESSION
d) $_SERVER
12. Quelle est la bonne commande SQL pour créer une clé primaire ?
a) ADD KEY PRIMARY
b) PRIMARY KEY (nom_colonne)
c) MAKE PRIMARY KEY
d) SET KEY PRIMARY
13. Pour sécuriser une session, on utilise :
a) $_COOKIES
b) session_start()
c) header_secure()
d) session_protect()
14. Quelle est la bonne syntaxe pour déclarer une variable en PHP ?
a) var nom = "Ali";
b) $nom = "Ali";
c) string nom = "Ali";
d) let nom = "Ali";
15. Quelle structure est utilisée pour parcourir un tableau ?
a) for
b) while
c) foreach
d) loop
16. Quelle fonction permet de compter le nombre d’éléments dans un tableau ?
a) count()
b) sizeof()
c) length()
d) nbr()
17. Que fait isset($var) ?
a) Vérifie si $var est définie et non nulle
b) Vide la variable
c) Affiche la variable
d) Compare deux variables
18. Quelle est la différence entre include et require ?
a) include arrête le script en cas d’erreur
b) require est optionnel
c) include continue le script
d) Aucune différence
19. Quelle est la bonne syntaxe d’une condition if ?
a) if { $a == $b }
b) if ($a == $b)
c) if $a == $b then
d) if $a = $b :
p. 4
20. Que va afficher ce code PHP :
$a = 5;
$b = "5";
if ($a === $b) {
echo "Identiques";
} else {
echo "Différents";
}
a) Identiques
b) Différents
c) Erreur
d) Aucun affichage
21. À quoi sert une clé primaire dans une table MySQL ?
a) À stocker des valeurs dupliquées dans une colonne
b) À identifier de manière unique chaque enregistrement dans la table
c) À définir une relation entre deux bases de données différentes
d) À augmenter la taille de la table automatiquement
22. Une relation entre deux tables dans une base de données est définie avec :
a) une clé primaire
b) un identifiant
c) une clé étrangère
d) un index
23. Quel est le rôle d’une table de liaison entre deux entités ?
a) Stocker les données principales de chaque entité
b) Assurer la relation many-to-many (plusieurs-à-plusieurs) entre deux tables
c) Sauvegarder les sauvegardes de la base de données
d) Optimiser les performances des requêtes SELECT
24. Quelle commande SQL permet d’ajouter une nouvelle ligne dans une table ?
a) ADD INTO
b) INSERT INTO
c) PUT INTO
d) APPEND TO
25. Quelle commande est utilisée pour modifier des données existantes dans une table ?
a) MODIFY
b) ALTER
c) UPDATE
d) CHANGE
26. Écrire une requête SQL pour créer une table Maladie avec deux champs :
num_maladie (clé primaire)
designation_maladie
a)
CREATE TABLE Maladie (
num_maladie INT PRIMARY KEY,
p. 5
designation_maladie VARCHAR(255)
);
b)
CREATE TABLE Maladie {
num_maladie INT,
designation_maladie VARCHAR(255),
PRIMARY KEY (num_maladie)
};
c)
CREATE TABLE Maladie (
designation_maladie VARCHAR(255),
num_maladie INT PRIMARY KEY
);
d)
CREATE Maladie TABLE (
num_maladie INT PRIMARY KEY,
designation_maladie VARCHAR(255)
);
27. Quelle clause permet de spécifier les conditions dans une requête UPDATE ?
a) SET
b) WHERE
c) HAVING
d) FROM
28. La commande CREATE TABLE est utilisée pour :
a) Modifier une table
b) Supprimer une table
c) Créer une table
d) Copier une table
p. 6
29. Soit le modèle relationnel :
client(id_client, cin, nom, prenom, email, password)
typeImmo(id_type, libelle)
immobilier(id_immobilier, titre, adresse, prixlocation, #id_type, disponible(oui-non))
location(id_location, #id_immobilier, #id_client, date_debut_location, date_fin_location)
Compléter la requête pour afficher la liste des locations effectuées entre deux dates
__________
i.titre,
c.nom,
c.prenom,
l.date_debut_location,
l.date_fin_location,
i.prixlocation
__________
location l
JOIN
immobilier i ON l.id_immobilier = i.id_immobilier
JOIN
________________________________________
WHERE
l.date_debut_location ____________ '2024-06-01' AND '2024-06-30';
p. 7
30. Que permet la commande SQL suivante ?
INSERT INTO clients (id, nom) VALUES (1, 'Ali');
a) Elle met à jour une ligne
b) Elle insère une ligne dans la table
c) Elle crée la table clients
d) Elle supprime une ligne
31. Pour modifier le nom d’un client dans la table clients, on utilise :
a) UPDATE clients SET nom = ...
b) SET clients.nom = ...
c) MODIFY clients
d) ALTER clients.nom
32. Complétez : la commande SQL CREATE TABLE est suivie de :
a) la liste des colonnes entre crochets [ ]
b) la liste des colonnes entre parenthèses ( )
c) la liste des colonnes entre accolades { }
d) aucune liste n’est nécessaire
33. Écrivez une requête SQL pour insérer un client avec id 5 et nom "Sara" dans la table
clients.
…………………………………………………………………………………………………………………………
…………………………………………………………
34. Donnez une requête SQL pour modifier le champ nom d’un client avec id = 2 dans la
table clients
.
………………………………………………………………………………………………………………………………
……………………………………………………
35. Donnez une requête SQL pour créer une table « produits » avec les champs id_produit
(clé primaire) et nom_produit.
…………………………………………………………………………………………………………………………
…………………………………………………………
36. Écrire le code HTML d’un formulaire simple de connexion avec deux champs :
matricule
mot de passe
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
………………………………………………………………………………………………………………………………
……………………………………………………
p. 8
37. Pourquoi faut-il sécuriser l’accès à une page PHP avec session_start() et une vérification
de session
…………………………………………………………………………………………………………………………
…………………………………………………………
38. La structure if en PHP s’écrit :
a) if { $a == $b }
b) if ($a == $b) { ... }
c) if $a = $b :
d) if $a == $b then
39. Que fait la fonction isset($var) ?
a) Elle vérifie si une variable est vide
b) Elle vérifie si une variable est définie et non nulle
c) Elle supprime la variable
d) Elle affiche la valeur de la variable
40. La boucle foreach sert à :
a) Répéter une instruction un nombre fixe de fois
b) Parcourir un tableau élément par élément
c) Lire un fichier ligne par ligne
d) Créer un tableau
41. Quelle est la différence entre include et require ?
a) include génère un warning, require une erreur fatale
b) require fonctionne mieux en local
c) include est plus rapide
d) Il n’y a aucune différence
42. Complétez pour afficher "Bonjour Admin" uniquement si $role vaut "admin" :
$role = "admin";
if (___________) {
echo "Bonjour Admin";
}
43. Que va afficher ce code ?
$tab = array("A", "B", "C");
foreach ($tab as $lettre) {
echo $lettre . " / "; }
………………………………………………………………………………………………………………………………
……………………………………………………
44. Écrire une fonction saluer($nom) qui affiche "Bonjour $nom".
………………………………………………………………………………………………………………………………
……………………………………………………
45. Comment inclure un fichier header.php dans une page PHP principale ?
………………………………………………………………………………………………………………………………
……………………………………………………
p. 9
46. Le champ suivant est obligatoire en HTML :
<input type="text" name="email" _____ >
a) check="true"
b) required
c) mustfill
d) compulsory
47. Quelle fonction PHP permet d’éviter les failles XSS en échappant les caractères spéciaux
dans les données utilisateur ?
a) htmlspecialchars()
b) strip_tags()
c) addslashes()
d) htmlentities()
48. Quelle est la bonne syntaxe pour récupérer la valeur d’un champ nommé "email" envoyé
par un formulaire en POST ?
a) $_POST['email']
b) $_GET['email']
c) $email->post
d) $POST['email']
49. Pour insérer les données d’un formulaire dans une base MySQL en PHP, il est conseillé
d’utiliser :
a) Des requêtes SQL écrites directement avec concaténation
b) Des requêtes préparées (prepared statements)
c) mysql_query() sans protection
d) file_put_contents()
50. Quel attribut HTML rend un champ obligatoire à remplir dans un formulaire ?
a) required
b) mandatory
c) validate
d) needed
p. 10
51. Compléter ce code :
<?php
// Connexion à la base
$__________= 'localhost';
$__________= 'ta_base';
$__________= 'user';
$__________= 'mdp';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $user, $pass);
$pdo->__________ (PDO:: __________PDO:: __________
// Récupérer tous les utilisateurs
$stmt = $pdo-> __________ ("SELECT id, username FROM users ORDER BY id ASC");
$users = $stmt-> __________ (PDO::FETCH_ASSOC);
} catch (PDOException $e) {
die("Erreur BDD : " . $e->getMessage());
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<title>Liste des utilisateurs</title>
</head>
<body>
<h2>Liste des utilisateurs</h2>
<ul>
<?php foreach ( __________as $user): ?>
<li>ID: <?= __________ ($user['id']) ?> - Nom: <?= __________ ($user['username']) ?
></li>
<?php __________; ?>
</ul>
</body>
</html>
p. 11
52. Compléter ce code : (nom de la base « testDB », nom utilisateur : « user » , mot de pass :
« pw123 »)
__________ __________couleurs (
id INT AUTO_INCREMENT PRIMARY KEY,
couleur VARCHAR(50) NOT NULL
);
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Exercice Select + BDD</title>
</head>
<body>
<form method="post" action="">
<label for="choix">Choisissez une couleur :</label>
<select name=" __________" id="choix" required>
<option value="">-- Choisir --</option>
<option value="rouge">Rouge</option>
<option value="bleu">Bleu</option>
<option value="vert">Vert</option>
</select>
<input type="submit" value="Valider">
</form>
<?php
// Paramètres de connexion (à adapter)
$host = "localhost";
$dbname = "__________";
$user = "__________";
$pass = "__________";
try {
______________________________________________________________________
______________________________________________________________________
if ($_SERVER["REQUEST_METHOD"] == "POST" && !empty($_POST['__________'])) { //
<-- Compléter ici
// Nettoyer la donnée reçue
$couleur = __________ ($_POST['couleur']); // <-- Compléter ici (sécuriser la donnée)
// Insérer la couleur dans la base
$sql = "INSERT INTO __________ (__________) VALUES (:couleur)";
$stmt = $pdo->prepare($sql);
$stmt->execute([':couleur' => $couleur]);
echo "<p style='color:green;'>Couleur enregistrée : " . $couleur . "</p>";
}
// Afficher toutes les couleurs enregistrées
echo "<h3>Couleurs enregistrées :</h3>";
$result = $pdo->query("SELECT couleur FROM couleurs ORDER BY id DESC");
echo "<ul>";
while ($row = $result->fetch( __________)) {
echo "<li>" . __________ ($row['couleur']) . "</li>";
p. 12
}
echo "</ul>";
} catch (PDOException $e) {
echo "Erreur connexion BDD : " . $e->getMessage();
}
?>
</body>
</html>
53. Compléter ce code :
<?php
// Définir une interface
interface __________ {
public function __________();
}
// Classe de base
class __________ __________ Animal {
__________ $nom;
public function __construct($nom) {
$this->nom = $nom;
p. 13
}
public function getNom() {
return $this->nom;
}
}
// Classe fille
class __________ extends __________ {
public function crier() {
echo $this->nom . " aboie : Wouf !<br>";
}
}
// Tester
$rex = new Chien("Rex");
echo "Nom de l'animal : " . $rex->getNom() . "<br>";
$__________ ->crier();
?>
p. 14
54. Compléter ce code :
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(50) NOT NULL -- mot de passe en clair (non recommandé)
);
__________________________________
__________________________________
__________________________________
__________________________________
__________________________________
__________________________________
__________________________________
<h2>Connexion utilisateur</h2>
<form method="post" action="">
<label for="username">Nom d'utilisateur :</label>
____________________________________________________________<br><br>
<label for="password">Mot de passe :</label>
____________________________________________________________<br><br>
<input type=__________ value="Se connecter" />
</form>
<?php
if (__________ ['__________'] === 'POST') {
// Connexion BDD
$host = 'localhost';
$dbname = 'ta_base';
$user = 'user';
$pass = 'mdp';
try {
________________________________________________________________________________
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Récupérer et nettoyer les données
$username = __________ ($_POST[__________]);
$password = __________ ($_POST[__________]);
// Préparer et exécuter la requête (mot de passe en clair)
$stmt = $pdo->__________ ("SELECT * FROM users WHERE username = :username
AND password = :password");
$stmt->__________ ([':username' => $username, ':password' => $password]);
$user = $stmt->__________(PDO::FETCH_ASSOC);
if ($user) {
p. 15
echo "<p style='color:green;'>Connexion réussie ! Bienvenue, " . __________
($username) . ".</p>";
} else {
echo "<p style='color:red;'>Nom d'utilisateur ou mot de passe incorrect.</p>";
}
} catch (PDOException $e) {
echo "Erreur BDD : " . $e->getMessage();
}
}
?>
</body>
</html>
p. 16
55. Compléter ce code :
<?php
class UserAuth {
private __________;
public function __________ (__________, __________, __________) {
try {
$this->pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8",
$user, $pass);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Erreur BDD : " . $e->getMessage());
}
}
public function login($username, $password) {
$sql = "SELECT * FROM users WHERE username = ? AND password = ?";
$stmt = __________->pdo->__________ ($sql);
$stmt->execute([__________ , __________]);
return __________->__________ (PDO::FETCH_ASSOC);
}?>
Page PHP complète avec formulaire et connexion via la classe
<?php
require_once __________;
$auth = __________ UserAuth('localhost', 'ta_base', 'user', 'mdp');
$message = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = htmlspecialchars($_POST['username']);
$password = htmlspecialchars($_POST['password']);
$user = $auth-> __________ ($username, $password);
if (__________) {
$message = "<p style='color:green;'>Connexion réussie ! Bienvenue, " .
htmlspecialchars($username) . ".</p>";
} else {
$message = "<p style='color:red;'>Nom d'utilisateur ou mot de passe
incorrect.</p>";
}
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
p. 17
<meta charset="UTF-8" />
<title>Connexion simple POO</title>
</head>
<body>
<h2>Connexion utilisateur (POO)</h2>
<form method="post" action="">
<label for="username">Nom d'utilisateur :</label>
<input type="text" id="username" name="username" required /><br><br>
<label for="password">Mot de passe :</label>
<input type="password" id="password" name="password" required /><br><br>
<input type="submit" value="Se connecter" />
</form>
__________
echo $message;
__________
</body>
</html>
p. 18