Devoir Surveillé ISET de Bizerte - Département TI - Année universitaire 2015-2016

Exercice 1 : Questions à Choix Multiples (QCM) Question 1 - Que veut dire PHP ? Réponses correctes : a et c Explication : Historiquement, à sa création en 1994, PHP signifiait "Personal Home Page" (réponse a, malgré la faute d'orthographe sur "Personal" dans l'énoncé). Aujourd'hui, il s'agit d'un acronyme récursif qui signifie "PHP: Hypertext Preprocessor".

D'après le document Devoir Surveillé ISET de Bizerte - Département TI - Année universitaire 2015-2016

Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Devoir Surveillé ISET de Bizerte - Département TI - Année universitaire 2015-2016

Document source

Devoir Surveillé ISET de Bizerte - Département TI - Année universitaire 2015-2016

Development côté serveur (Server-Side Development) · Institut Supérieur des Études Technologiques · DOCX · 3 pages · 2015

Consulter le document original →

Exercice 1 : Questions à Choix Multiples (QCM)

Question 1 - Que veut dire PHP ?

Réponses correctes : a et c

Explication : Historiquement, à sa création en 1994, PHP signifiait "Personal Home Page" (réponse a, malgré la faute d'orthographe sur "Personal" dans l'énoncé). Aujourd'hui, il s'agit d'un acronyme récursif qui signifie "PHP: Hypertext Preprocessor". La réponse c ("Hypertext Processor") est l'option qui s'en rapproche le plus dans le contexte actuel. Selon l'ancienneté du cours, l'une ou l'autre (ou les deux) sont considérées comme justes.

Question 2 - PHP est un produit ?

Réponse correcte : c

Explication : PHP n'appartient ni à Sun Microsystems (historiquement propriétaire de Java, racheté par Oracle), ni à Microsoft. C'est un langage sous licence libre (Open source).

Question 3 - Qu’est-ce qu’un serveur ?

Réponse correcte : b

Explication : Un serveur est avant tout un système informatique (matériel et/ou logiciel) dont le rôle est de fournir des services (web, base de données, fichiers) à des clients (les utilisateurs ou d'autres ordinateurs). La réponse a est une description physique incomplète et la réponse c confond serveur et protocole.

Question 4 - A quoi peut servir la fonction unSet() ?

Réponse correcte : c

Explication : En PHP, la fonction unset() détruit la variable spécifiée, libérant ainsi l'espace qu'elle occupait dans la mémoire. Elle ne la met pas à zéro ni ne la remplit d'espaces.

Question 5 - Si l'on a <?php $a=5 ; unset($a); ?>, quelles propositions sont justes ?

Réponses correctes : b et c

Explication : L'instruction unset($a) détruit la variable $a. Par conséquent, l'évaluation de son existence via isset($a) renvoie le booléen false (ce qui correspond à l'énoncé de la réponse c). Logiquement, sa négation !isset($a) renvoie le booléen true (réponse b). Note de mise au point : en PHP pur, un echo isset($a); n'affiche pas le texte "false" mais une chaîne vide, cependant dans le contexte d'un QCM logique, on évalue la valeur booléenne sous-jacente.

Question 6 - $a vaut 8 ; que retourne l'instruction <?php echo $a-- ?> ?

Réponse correcte : c

Explication : L'opérateur -- placé après la variable est une post-décrémentation. PHP va d'abord retourner et afficher la valeur actuelle de $a (soit 8), et seulement ensuite décrémenter la valeur de la variable en mémoire à 7.

Question 7 - Quelle est syntaxe correcte ?

Réponse correcte : c (avec réserve sur la ponctuation de l'énoncé)

Explication : L'option c est la seule qui utilise l'opérateur de comparaison correct ==. L'option a utilise l'opérateur d'affectation = dans la condition (ce qui écraserait la valeur et renverrait toujours vrai ici). L'option b utilise le mot-clé then, qui n'existe pas en PHP pour les blocs if. Attention : Dans la réponse c telle qu'imprimée dans le sujet (if ($a==5) {$b=4}; else {$b=2};), la présence du point-virgule juste avant le else génère en réalité une erreur de syntaxe fatale en PHP. La syntaxe rigoureusement exacte devrait omettre ce point-virgule : if ($a==5) {$b=4} else {$b=2};. Nous sélectionnons la c car c'est l'intention pédagogique évidente (l'usage du double égal).

Question 8 - Qu'arrive-t-il si la seconde expression est laissée vide (for($a=0;;$a++)..) ?

Réponses correctes : a et c

Explication : Dans une boucle for, la deuxième expression est la condition de maintien. Si elle est vide, PHP l'évalue implicitement à true. La boucle ne s'arrêtera donc jamais d'elle-même, ce qui provoque une boucle infinie (réponse c). La seule façon logicielle de sortir de cette boucle est d'utiliser une instruction d'interruption comme break à l'intérieur du bloc (réponse a).

Question 9 - La première instruction d'un programme en PHP est <? $name[]="Ahmed" ?> que se passe-t-il ?

Réponse correcte : c

Explication : L'utilisation de crochets vides [] après le nom d'une variable indique à PHP de créer un tableau (s'il n'existe pas déjà) et d'ajouter la valeur à l'index numérique suivant disponible. Comme c'est la première instruction, le tableau est créé et le premier index numérique, en commençant par 0, est attribué.

Question 10 - Quelles sont les instructions valides pour le chargement d'un tableau ?

Réponses correctes : a et b

Explication :

  • La réponse a utilise un index entier valide.
  • La réponse b utilise une chaîne de caractères valide ("Name") comme clé associative.
  • La réponse c ($User[name] = "Ahmed";) n'est pas recommandée. Sans guillemets, PHP cherche d'abord une constante appelée name. S'il n'en trouve pas, il convertit name en chaîne de caractères, mais cela génère un avertissement (Warning/Notice) de la part du moteur PHP.

Question 11 - Soit l'instruction <?php $moisFrancais = array(1=>"Janvier", "Février", "Mars") ; ?> Quelles sont les affirmations vraies ?

Réponse correcte : b

Explication : En forçant la première clé à l'index numérique 1 (1=>"Janvier"), PHP assignera automatiquement les index entiers suivants aux éléments qui n'ont pas de clé explicite. Ainsi, "Février" reçoit la clé 2, et "Mars" reçoit la clé 3. La réponse b est donc exacte.

Question 12 - Qu'appelle-t-on tableau de tableau en PHP ?

Réponse correcte : c

Explication : Un tableau multidimensionnel (ou tableau de tableaux) est défini lorsqu'une des valeurs (un élément) contenues dans le tableau principal est elle-même de type array.

Exercice 2 : Schéma du fonctionnement d'un site web dynamique

Explication du fonctionnement : Lorsqu'un utilisateur demande une page web dynamique, le processus implique plusieurs acteurs : le navigateur (client), le serveur web (ex: Apache), le moteur d'interprétation (PHP), et souvent un serveur de base de données (ex: MySQL).

Schéma de l'architecture :

[1. Navigateur Web]
       |
       | (A) Requête HTTP (ex: GET index.php)
       v
[2. Serveur Web] (Apache / Nginx)
       |
       | (B) Transmission de la page PHP pour traitement
       v
[3. Moteur PHP]
       |
       | (C) Exécution du script (Si requêtes SQL nécessaires)
       | --------------------------------------> [4. Base de Données] (MySQL)
       | <--------------------------------------
       |     (D) Renvoi des résultats SQL
       |
       | (E) Génération du code HTML final
       v
[2. Serveur Web]
       |
       | (F) Réponse HTTP (Envoi du document HTML généré)
       v
[1. Navigateur Web] -> Affichage de la page à l'utilisateur

Étapes détaillées :

  1. L'utilisateur clique sur un lien ou valide un formulaire ; le navigateur envoie une requête HTTP (A) au serveur.
  2. Le serveur web identifie qu'il s'agit d'un fichier dynamique (ex: .php) et le confie au moteur PHP (B).
  3. Le moteur PHP exécute le code. S'il a besoin de données persistantes, il interroge la base de données (C et D).
  4. Une fois l'exécution terminée, PHP génère une page en pur HTML (E) qu'il renvoie au serveur web.
  5. Le serveur web transmet ce code HTML au client (F) qui l'affiche. Le client ne voit jamais le code source PHP.

Exercice 3 : Application Web PHP

Cette section fournit le code complet des quatre fichiers demandés, répondant strictement aux consignes (notamment l'usage imposé des boucles foreach, for et while).

Question 1 - Fichier entete.html

Ce fichier contient l'en-tête réutilisable avec un titre. Pour simuler l'image demandée dans l'énoncé, nous y plaçons une balise d'image standard.

<!-- Fichier : entete.html -->
<header style="text-align: center; margin-bottom: 20px;">
    <img src="logo_citations.png" alt="Logo Citations" width="150" />
    <h1>Dictionnaire de citations en ligne</h1>
    <hr />
</header>

Question 2 - Fichier mesTab.php

Ce fichier ne contient que les déclarations des trois tableaux demandés.

<?php
// Fichier : mesTab.php

$listAuteurs = array(
    "Oscar Wilde", 
    "Victor Hugo", 
    "Confucius", 
    "Albert Einstein", 
    "Coluche", 
    "Pierre Desproges"
);

$listSiecles = array(
    "16ème siècle", 
    "17ème siècle", 
    "18ème siècle", 
    "19ème siècle", 
    "20ème siècle", 
    "21ème siècle"
);

$listTheme = array(
    "Amitié", 
    "Amour", 
    "Bonheur", 
    "Confiance", 
    "Courage", 
    "Education", 
    "Fierté"
);
?>

Question 3 - Fichier formulaire.php

Ce fichier importe les deux fichiers précédents et génère le formulaire en utilisant les structures itératives imposées.

<?php
// Fichier : formulaire.php
// Importation des tableaux
require_once 'mesTab.php';
?>
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>Recherche de citation</title>
</head>
<body>
    <?php 
    // Inclusion de l'en-tête
    include 'entete.html'; 
    ?>

    <form action="resRech.php" method="POST">
        <!-- Liste 1 : foreach imposé -->
        <label for="auteur">Auteur :</label>
        <select name="auteur" id="auteur">
            <?php
            foreach ($listAuteurs as $auteur) {
                echo "<option value=\"$auteur\">$auteur</option>";
            }
            ?>
        </select>
        <br><br>

        <!-- Liste 2 : for imposé -->
        <label for="siecle">Siècle :</label>
        <select name="siecle" id="siecle">
            <?php
            $nbSiecles = count($listSiecles);
            for ($i = 0; $i < $nbSiecles; $i++) {
                echo "<option value=\"" . $listSiecles[$i] . "\">" . $listSiecles[$i] . "</option>";
            }
            ?>
        </select>
        <br><br>

        <!-- Liste 3 : while imposé -->
        <label for="theme">Thème :</label>
        <select name="theme" id="theme">
            <?php
            $j = 0;
            $nbThemes = count($listTheme);
            while ($j < $nbThemes) {
                echo "<option value=\"" . $listTheme[$j] . "\">" . $listTheme[$j] . "</option>";
                $j++;
            }
            ?>
        </select>
        <br><br>

        <input type="submit" value="Rechercher">
    </form>
</body>
</html>

Question 4 - Fichier resRech.php

Ce fichier réceptionne les données du formulaire envoyées en POST et les affiche sous forme de tableau HTML.

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>Résultat de la recherche</title>
    <style>
        table, th, td {
            border: 1px solid black;
            border-collapse: collapse;
            padding: 10px;
        }
    </style>
</head>
<body>
    <?php include 'entete.html'; ?>

    <h2>Résultats de votre recherche</h2>

    <?php
    // Vérification que les données ont bien été soumises
    if (isset($_POST['auteur']) && isset($_POST['siecle']) && isset($_POST['theme'])) {
        // Nettoyage des données pour la sécurité (bonnes pratiques)
        $auteurChoisi = htmlspecialchars($_POST['auteur']);
        $siecleChoisi = htmlspecialchars($_POST['siecle']);
        $themeChoisi = htmlspecialchars($_POST['theme']);

        echo "<table>";
        echo "<tr>";
        echo "<th>Auteur</th>";
        echo "<th>Siècle</th>";
        echo "<th>Thème</th>";
        echo "</tr>";
        
        echo "<tr>";
        echo "<td>" . $auteurChoisi . "</td>";
        echo "<td>" . $siecleChoisi . "</td>";
        echo "<td>" . $themeChoisi . "</td>";
        echo "</tr>";
        echo "</table>";
    } else {
        echo "<p>Erreur : Veuillez soumettre le formulaire proprement.</p>";
    }
    ?>
</body>
</html>

Méthode

Pour réussir ce type d'examen portant sur le développement côté serveur :

  1. La précision de la syntaxe compte : L'exercice 1 montre que de simples détails comme un point-virgule mal placé ou le choix entre guillemets et absence de guillemets pour une clé de tableau peuvent changer le résultat d'une instruction. Soyez rigoureux sur la syntaxe PHP de base.
  2. Bien distinguer les structures de contrôle : Dans l'exercice 3, la difficulté ne réside pas dans le HTML mais dans la capacité à prouver sa maîtrise des trois types de boucles (for, while, foreach). Il est essentiel de comprendre que count() (ou sizeof()) est requis pour les boucles for et while appliquées aux tableaux, là où foreach gère la taille dynamiquement.
  3. Architecture et cycle de vie : Conservez en tête que PHP s'exécute avant que la page ne soit envoyée au navigateur. Tout schéma (comme celui de l'exercice 2) doit clairement montrer cette séparation temporelle et physique entre le serveur (qui génère) et le client (qui affiche).

Partager

Commentaires

Aucun commentaire pour le moment. Posez la première question.

Les commentaires sont relus avant publication. Votre e-mail n'est jamais affiché.

← Toutes les révisions