QCM : Bases de PHP et applications web (27 questions)

Questions et réponses du QCM

1. Lorsqu’un navigateur demande une page PHP, que reçoit-il généralement après l’exécution du programme ?

Une réponse HTML produite par le navigateur après l’envoi du code au serveur
Une réponse HTML produite par le serveur, sans recevoir directement le code PHP source
Une réponse contenant le code PHP et le HTML, que le navigateur sépare lui-même
Le fichier PHP complet, que le navigateur exécute ensuite pour produire du HTML

Une réponse HTML produite par le serveur, sans recevoir directement le code PHP source

Explication

Le serveur exécute principalement PHP et renvoie généralement une réponse HTML au navigateur, sans lui transmettre directement le code PHP source. Le navigateur ne reçoit donc pas normalement le fichier PHP pour l’exécuter lui-même.

2. Quel enchaînement décrit correctement le traitement d’une requête vers une page PHP ?

PHP demande une URL au serveur, le navigateur exécute le programme et le serveur affiche la réponse
Le navigateur demande une URL, PHP affiche le programme au serveur, puis celui-ci transmet une réponse au navigateur
Le serveur demande une URL au navigateur, PHP transmet le programme, puis le navigateur produit une réponse au serveur
Le navigateur demande une URL, le serveur transmet la requête à PHP, le programme s’exécute et une réponse est affichée

Le navigateur demande une URL, le serveur transmet la requête à PHP, le programme s’exécute et une réponse est affichée

Explication

Le cycle commence par une demande d’URL du navigateur, suivie de la transmission de la requête à PHP par le serveur web, de l’exécution du programme et de l’affichage de la réponse. Dans la proposition qui inverse le début du cycle, c’est le navigateur, et non le serveur, qui demande l’URL.

3. Quelle règle de nommage respecte la syntaxe d’une variable PHP ?

Son nom commence par un souligné, puis $, et ne peut contenir aucune lettre
Son nom commence par $, puis une lettre ou un souligné, et ne débute pas par un chiffre
Son nom commence par une lettre, puis $, et peut débuter par un chiffre après le symbole
Son nom commence par $, puis un chiffre ou une lettre, et se termine par un souligné

Son nom commence par $, puis une lettre ou un souligné, et ne débute pas par un chiffre

Explication

Une variable PHP commence par le symbole $, suivi d’une lettre ou d’un souligné, et son nom ne peut pas commencer par un chiffre. Une variable dont le premier caractère après $ est un chiffre ne respecte donc pas cette règle.

4. Quel type PHP convient pour stocker une valeur logique vraie ou fausse ?

float
bool
string
int

bool

Explication

Le type `bool` sert à représenter des valeurs logiques, comme vrai et faux. `int` représente des entiers, tandis que `float` sert aux nombres décimaux.

5. Une comparaison doit vérifier que deux valeurs sont identiques et qu’elles ont aussi le même type : quel opérateur convient ?

==, car il compare les types sans tenir compte des valeurs
===, car il compare la valeur et le type
===, car il compare la valeur sans tenir compte du type
==, car il compare la valeur et le type

===, car il compare la valeur et le type

Explication

L’opérateur `===` exige que les valeurs et leurs types soient identiques. L’opérateur `==` compare les valeurs de façon souple, sans exiger que les types correspondent.

6. Dans quel cas le bloc associé à une condition est-il exécuté ?

Lorsque le programme atteint la fin du fichier
Lorsque l’expression évaluée est vraie
Lorsque l’expression évaluée est fausse
Lorsque l’expression évaluée produit une valeur numérique

Lorsque l’expression évaluée est vraie

Explication

Une condition permet d’exécuter un bloc si l’expression qui la gouverne est vraie. Une valeur numérique produite par une expression ne décrit pas à elle seule la règle d’exécution du bloc.

7. Quelle caractéristique distingue `match` de `switch` en PHP ?

`match` traite ses cas avec comparaison souple et passe au cas suivant sans `break`
`switch` renvoie une valeur et compare strictement sans passer au cas suivant
`switch` traite plusieurs cas sans qu’un `break` puisse être nécessaire
`match` renvoie une valeur, compare strictement et ne passe pas au cas suivant

`match` renvoie une valeur, compare strictement et ne passe pas au cas suivant

Explication

`match`, disponible depuis PHP 8, renvoie une valeur, compare strictement et ne passe pas au cas suivant. À l’inverse, `switch` peut nécessiter un `break` pour éviter de poursuivre l’exécution dans le cas suivant.

8. Une application doit parcourir tous les éléments d’un tableau sans fixer à l’avance le nombre d’éléments : quelle boucle est la mieux adaptée ?

`switch`, qui traite plusieurs cas distincts
`while`, qui répète le traitement selon une condition
`foreach`, qui parcourt les éléments du tableau
`for`, qui convient à un nombre d’itérations connu

`foreach`, qui parcourt les éléments du tableau

Explication

`foreach` est conçue pour parcourir les éléments d’un tableau. `for` est plutôt adaptée à un nombre d’itérations connu, tandis que `while` dépend de l’évaluation d’une condition.

9. Quel est le rôle principal d’une fonction dans un programme ?

Déclarer des variables globales accessibles automatiquement dans tout le programme
Stocker durablement les données reçues dans une base de données
Regrouper du code réutilisable, recevoir des paramètres et éventuellement renvoyer un résultat
Transformer automatiquement chaque instruction en une valeur affichée à l’écran

Regrouper du code réutilisable, recevoir des paramètres et éventuellement renvoyer un résultat

Explication

Une fonction permet de regrouper du code réutilisable, peut recevoir des paramètres et peut renvoyer une valeur avec `return`. La déclaration de variables globales ne constitue pas son rôle principal.

10. Une fonction a besoin d’une valeur calculée ailleurs dans le programme ; quelle pratique respecte le mieux la portée des variables ?

Rendre la variable locale visible partout en lui donnant un nom identique aux paramètres
Transmettre cette valeur à la fonction comme paramètre plutôt que de dépendre d’une variable globale
Remplacer la fonction par une variable locale accessible depuis toutes les autres fonctions
Déclarer la valeur dans la fonction en supposant qu’elle reprend automatiquement sa valeur externe

Transmettre cette valeur à la fonction comme paramètre plutôt que de dépendre d’une variable globale

Explication

Une variable créée dans une fonction est locale ; il est préférable de transmettre les valeurs nécessaires au moyen de paramètres. Une variable locale ne reprend pas automatiquement la valeur d’une variable définie ailleurs.

11. Pour compter les caractères d’un texte UTF-8, quelle fonction est adaptée lorsque l’extension mbstring est disponible ?

`explode()`, car elle renvoie directement le nombre de caractères du texte
`mb_strlen()`, car elle convient au comptage des caractères UTF-8
`implode()`, car elle mesure le nombre de caractères d’une chaîne assemblée
`strlen()`, car elle compte nécessairement chaque caractère multioctet comme une unité

`mb_strlen()`, car elle convient au comptage des caractères UTF-8

Explication

`mb_strlen()` est adaptée au comptage des caractères d’un texte UTF-8 lorsque mbstring est disponible. `strlen()` compte les octets, ce qui peut différer du nombre de caractères en UTF-8.

12. Dans un tableau numérique contenant plusieurs éléments, quel schéma d’indexation est généralement utilisé ?

Des clés nommées qui commencent par le premier élément
Des indices numériques qui commencent à 0
Des indices numériques qui commencent à 1
Des clés textuelles générées à partir des valeurs

Des indices numériques qui commencent à 0

Explication

Les indices d’un tableau numérique commencent généralement à 0, tandis qu’un tableau associatif emploie des clés nommées. Les clés nommées correspondent donc à l’autre type de tableau.

13. Quelle distinction décrit correctement la transmission des données d’un formulaire par GET et par POST ?

GET chiffre les données dans l’URL, tandis que POST les chiffre automatiquement dans le corps
GET et POST placent les données dans l’URL, mais POST masque leur nom
GET transmet les données dans le corps, tandis que POST les place généralement dans l’URL
GET place généralement les données dans l’URL, tandis que POST les transmet dans le corps sans les chiffrer à lui seul

GET place généralement les données dans l’URL, tandis que POST les transmet dans le corps sans les chiffrer à lui seul

Explication

GET place généralement les données du formulaire dans l’URL, tandis que POST les transmet dans le corps de la requête. Le recours à POST ne chiffre pas à lui seul les données.

14. Un formulaire HTML utilise l’attribut `required` ; que doit encore faire l’application pour protéger le traitement des données ?

Se fier à l’attribut HTML, puisque le navigateur garantit que les données sont valides
Valider les données côté serveur, même si le navigateur impose le champ comme requis
Échapper les données côté serveur, ce qui vérifie à lui seul leur format attendu
Supprimer la validation, puisque le protocole POST contrôle les champs obligatoires

Valider les données côté serveur, même si le navigateur impose le champ comme requis

Explication

La validation côté serveur reste obligatoire, car l’attribut `required` du formulaire ne remplace pas le contrôle effectué par l’application. L’échappement protège un contexte de sortie, mais ne vérifie pas à lui seul le format des données.

15. Quelle distinction faut-il faire entre validation et échappement lors du traitement d’une donnée utilisateur ?

La validation associe un champ à sa clé, tandis que l’échappement rend le champ obligatoire
La validation protège l’affichage HTML, tandis que l’échappement vérifie le format attendu de la donnée
La validation vérifie le format attendu, tandis que l’échappement protège le contexte de sortie, notamment le HTML
La validation chiffre la donnée reçue, tandis que l’échappement la transmet dans le corps de la requête

La validation vérifie le format attendu, tandis que l’échappement protège le contexte de sortie, notamment le HTML

Explication

La validation contrôle si une donnée respecte le format attendu, tandis que l’échappement protège son contexte d’affichage, notamment en HTML. Échapper une donnée ne permet donc pas de vérifier son format.

16. Une application doit afficher en HTML le contenu saisi par un utilisateur ; quelle fonction faut-il utiliser pour échapper les caractères spéciaux ?

`htmlspecialchars()`
`htmlspecialchars_decode()`
`strlen()`
`explode()`

`htmlspecialchars()`

Explication

`htmlspecialchars()` échappe les caractères spéciaux avant l’affichage d’une entrée utilisateur dans du HTML. `htmlspecialchars_decode()` effectue l’opération inverse et ne convient donc pas à cette protection.

17. Une application doit rechercher un compte à partir d’une valeur saisie par l’utilisateur. Comment transmettre cette valeur à la requête SQL pour éviter l’injection ?

La convertir en minuscules avant de l’ajouter à la requête
La placer directement dans la chaîne SQL entre guillemets
La concaténer après avoir supprimé les espaces
La transmettre séparément à une requête préparée

La transmettre séparément à une requête préparée

Explication

Une requête préparée sépare les données utilisateur du code SQL et reçoit la valeur comme paramètre. Supprimer certains caractères ne remplace pas cette séparation et ne garantit pas la sécurité.

18. Un bouton d’administration est masqué aux utilisateurs ordinaires, mais l’URL de l’action reste accessible. Que doit faire le serveur lorsqu’une requête sensible arrive ?

Vérifier que le bouton correspondant était visible dans la page
Vérifier l’identité, les permissions et la propriété de la ressource
Contrôler que la requête provient d’un navigateur déjà utilisé
Vérifier que l’adresse demandée n’a pas été communiquée à l’utilisateur

Vérifier l’identité, les permissions et la propriété de la ressource

Explication

Le serveur doit contrôler l’identité, les permissions et la propriété de la ressource pour chaque requête sensible. Masquer le bouton améliore l’interface, mais ne protège pas l’action accessible directement.

19. Un formulaire modifie des données et doit être protégé contre les requêtes forgées. Quel mécanisme convient ?

Un contrôle JavaScript qui bloque les envois depuis un autre site
Un cookie persistant qui confirme que le navigateur est connu
Un jeton CSRF lié à la session, vérifié côté serveur
Un paramètre caché contenant l’adresse de la page précédente

Un jeton CSRF lié à la session, vérifié côté serveur

Explication

Un jeton CSRF associé à la session doit être vérifié par le serveur avant d’accepter l’action modificatrice. Un contrôle JavaScript côté client ne remplace pas cette vérification serveur.

20. Quelle méthode PHP convient pour enregistrer un mot de passe puis vérifier un mot de passe fourni lors de la connexion ?

Utiliser `password_hash()` pour le hachage et SHA-1 pour la vérification
Enregistrer le mot de passe en clair et le comparer lors de la connexion
Utiliser `password_hash()` pour le hachage et `password_verify()` pour la vérification
Utiliser MD5 pour le hachage et `password_verify()` pour la vérification

Utiliser `password_hash()` pour le hachage et `password_verify()` pour la vérification

Explication

PHP fournit `password_hash()` pour hacher un mot de passe et `password_verify()` pour vérifier une saisie. MD5 et SHA-1 ne sont pas les fonctions dédiées au stockage sécurisé des mots de passe.

21. Un fichier requis par un script est introuvable. Quelle différence de comportement distingue `require` de `include` ?

`require` provoque une erreur bloquante, tandis que `include` émet un avertissement et peut laisser continuer le script
Les deux provoquent une erreur bloquante, mais `include` affiche aussi un avertissement
`include` provoque une erreur bloquante, tandis que `require` émet un avertissement et peut laisser continuer le script
Les deux émettent un avertissement et laissent le script continuer normalement

`require` provoque une erreur bloquante, tandis que `include` émet un avertissement et peut laisser continuer le script

Explication

En cas de fichier manquant, `require` bloque le script par une erreur, alors que `include` émet un avertissement et peut permettre la poursuite de l’exécution. L’idée que `include` serait la forme bloquante inverse leurs comportements.

22. Après une connexion réussie, quel enchaînement contribue à gérer correctement une session PHP ?

Appeler `session_start()` avant toute sortie HTML, puis régénérer l’identifiant avec `session_regenerate_id(true)`
Appeler `session_regenerate_id(true)` avant `session_start()`, puis afficher la page
Appeler `session_start()` avant la sortie HTML, puis régénérer l’identifiant avant la connexion
Afficher la page HTML, appeler `session_start()`, puis conserver le même identifiant

Appeler `session_start()` avant toute sortie HTML, puis régénérer l’identifiant avec `session_regenerate_id(true)`

Explication

`session_start()` doit précéder toute sortie HTML, et l’identifiant doit être régénéré après une connexion réussie. Le régénérer avant la connexion ne correspond pas au moment requis par cette règle.

23. Quelle description distingue correctement PDO, MySQL et SQL dans une application PHP ?

PDO fournit une interface PHP vers une base de données, MySQL est un langage de requête et SQL est un SGBD relationnel
PDO est un SGBD relationnel, MySQL est une interface PHP et SQL sert à établir les connexions
PDO fournit une interface PHP vers une base de données, MySQL est un SGBD relationnel et SQL sert à manipuler les données
PDO est le langage de requête, MySQL est une interface PHP et SQL est un SGBD relationnel

PDO fournit une interface PHP vers une base de données, MySQL est un SGBD relationnel et SQL sert à manipuler les données

Explication

PDO est l’interface PHP de communication avec une base, MySQL est un système de gestion de base relationnelle et SQL permet de créer, lire, modifier et supprimer des données. Confondre MySQL avec le langage de requête inverse les rôles de MySQL et SQL.

24. Avec PDO, comment réaliser une insertion sécurisée en transmettant les données séparément du code SQL ?

Construire la requête complète par concaténation, puis la transmettre à PDO
Préparer la requête, puis l’exécuter en fournissant les valeurs dans un tableau de paramètres
Exécuter une requête vide, puis ajouter les valeurs au résultat récupéré
Échapper les valeurs dans une chaîne SQL, puis les envoyer sans préparation

Préparer la requête, puis l’exécuter en fournissant les valeurs dans un tableau de paramètres

Explication

Une insertion sécurisée avec PDO consiste à préparer la requête puis à transmettre les valeurs séparément dans un tableau de paramètres lors de l’exécution. L’échappement manuel suivi d’un envoi sans préparation ne suit pas ce processus.

25. Une application choisit dynamiquement le nom d’une colonne à trier dans une requête préparée. Quelle approche est appropriée ?

Sélectionner le nom de colonne dans une liste blanche, car les paramètres ne représentent pas les noms de colonnes
Transmettre le nom de colonne comme un paramètre, comme une valeur ordinaire
Remplacer les espaces du nom de colonne avant de le transmettre comme paramètre
Concaténer le nom de colonne après l’avoir entouré de guillemets SQL

Sélectionner le nom de colonne dans une liste blanche, car les paramètres ne représentent pas les noms de colonnes

Explication

Les paramètres d’une requête préparée protègent les valeurs, mais ne permettent pas de paramétrer les noms de colonnes ou de tables; un choix dynamique doit donc provenir d’une liste blanche. Traiter un nom de colonne comme une valeur paramétrable confond ces deux catégories.

26. Dans une application en production, quel rôle le bloc `try` et le bloc `catch` remplissent-ils lorsqu’une exception survient ?

Le bloc `try` masque toutes les erreurs PHP et `catch` remplace automatiquement les valeurs invalides.
Le bloc `try` consigne l’exception dans les journaux et `catch` affiche son message technique aux visiteurs.
Le bloc `try` encadre le code susceptible d’échouer et `catch` traite l’exception sans exposer les détails techniques aux visiteurs.
Le bloc `try` valide les données reçues et `catch` relance l’exception pour interrompre la requête.

Le bloc `try` encadre le code susceptible d’échouer et `catch` traite l’exception sans exposer les détails techniques aux visiteurs.

Explication

Le code susceptible de provoquer une exception est placé dans `try`, puis `catch` permet de la traiter. En production, les détails techniques de l’erreur ne doivent pas être montrés aux visiteurs, contrairement à ce que propose l’option qui les affiche.

27. Pour réaliser le mini-projet d’une liste de contacts, quelle suite d’étapes permet d’enregistrer correctement un nouveau contact ?

Recevoir le nom et l’e-mail, les placer dans les journaux, puis créer une table à partir des données validées.
Créer une table, recevoir le nom et l’e-mail, les enregistrer directement, puis valider les données après l’insertion.
Créer une table, valider le nom et l’e-mail, puis les enregistrer en construisant une requête SQL non préparée.
Créer une table, recevoir le nom et l’e-mail, valider les données, puis les enregistrer avec une requête PDO préparée.

Créer une table, recevoir le nom et l’e-mail, valider les données, puis les enregistrer avec une requête PDO préparée.

Explication

Le projet prévoit de créer une table, de recevoir et valider le nom et l’e-mail, puis de les enregistrer à l’aide d’une requête PDO préparée. Valider après l’insertion inverse l’ordre nécessaire et risque d’enregistrer des données invalides.

Révisez avec les flashcards

Mémorisez les réponses avec 78 flashcards sur Bases de PHP et applications web.

Où PHP s’exécute-t-il principalement ?

Côté serveur.

Que reçoit généralement le navigateur après l’exécution de PHP ?

Une réponse HTML.

Quel élément le navigateur ne reçoit-il pas directement de PHP ?

Le code source PHP.

Voir les flashcards →

Approfondir avec la fiche

Consultez la fiche de révision complète sur Bases de PHP et applications web.

Voir la fiche →

Cours similaires

Crée tes propres QCM

Importe ton cours et l'IA génère des QCM avec corrections en 30 secondes.

Générateur de QCM