/Travaux Dirigés/TD1-PHP

Bases sur PHP

  

23 janvier 2014

Cette page est consacrée à l'accompagnement d'une séance de TD.

Objectifs

Il s'agit ici de parcourir les bases du langages PHP, et en particulier :

Visant un apprentissage autonome, les exercices cherchent à créer des situations sollicitant de s'appuyer sur la documentation technique officielle.

Les manipulations à faire s'appuient sur des petits exercices indépendants.

Exercices

Exercice 1 :

Organiser son espace de travail

  1. démarrer le serveur WAMP depuis le menu "Démarrer"
  2. visualiser la page http://localhost dans le navigateur (ou http://localhost:8080 si le serveur Apache de WAMP est configurer pour répondre sur le port 8080 au lieu du port plus classique 80)
  3. si un message d'erreur s'affiche, s'assurer que le service est bien démarré
  4. créer un fichier nommé index.php avec le contenu suivant :
    <?php
    echo "<HTML>";
    echo " <HEAD>";
    echo "  <TITLE>Hello world</TITLE>";
    echo " </HEAD>";
    echo " <BODY>";
    echo "   Salut !";
    echo " </BODY>";
    echo "</HTML>";
    ?>
  5. déplacer ce ficher pour qu'il soit dans le dossier WWW du dossier de WAMP (sur C:\...\WAMP\WWW) et visualiser la page dans une navigateur avec le protocole HTTP

Pour vous aider, consultez http://tiprof.fr/Aides/index.php?page=Windows/adapt-config%20WAMP qui contient un mémo de l'installation de WAMP sur les machines de l'école et du test de l'installation
et http://www.tiprof.fr/PHP-mySQL/ressources/heberg-instlocal/travail_local_et_distant.html

Exercice 2 :

Faire afficher des chaînes, en imbriquant le code PHP dans le code HTML,

  1. renommer le index.php en index.html et revisualiser la page obtenue avec le protocole HTTP
  2. trouver pourquoi l'affichage n'est pas identique au précédent
  3. faire afficher le code source HTML par le navigateur
  4. renommer à nouveau le index.html en index.php et remplacer son contenu par
    <HTML>
     <HEAD>
      <TITLE><?php echo "Hello world" ?></TITLE>
     </HEAD>
     <BODY>
       <?php echo "Bonjour..." ?>
     </BODY>
    </HTML>
    
  5. trouver pourquoi l'affichage est identique à l'affichage initial

Vous pouvez vous aider en lisant http://tiprof.fr/SitesWebDynamic/Techniques-swd/03_PremiersPas/init-PHP.html et http://www.tiprof.fr/SitesWebDynamic/Techniques-swd/mat%C3%A9riel/imbrications/

Exercice 3 :

manipuler des variables PHP contenant des chaînes de texte et l'opérateur de concaténation

  1. reprendre le fichier index.php précédent et remplacer la ligne
       <?php echo "Bonjour..." ?>
    par
    <?php
           $variable = "moi";
           echo "Bonjour...".$variable; 
    ?>
  2. afficher le résultat avec le protocole HTTP puis son code source HTML
  3. expliquer ce qu'est "devenu" $variable
  4. remplacer les lignes
    <?php
           $variable = "moi";
           echo "Bonjour...".$variable; 
    ?>
    par
    <?php
           $moi = "Archibald";
    ?>
       Bonjour <?php echo $moi; ?>
    
  5. expliquer ce que "fait" l'opérateur de concaténation : "."
  6. remplacer la ligne
       Bonjour <?php echo $moi; ?>
    par
       $salutation = "Salut";
       <?php echo $salutation.$moi; ?>
  7. expliquer pourquoi les 2 mots sont collés : Salut et Archibald
  8. observer le code source HTML et regarder si les 2 mots y sont aussi collés
  9. remplacer la ligne
       <?php echo $salutation.$moi; ?>
    par
       <?php echo $salutation." ".$moi; ?>
  10. observer le résultat affiché et le code source HTML et regarder si les 2 mots y sont aussi collés
  11. remplacer la ligne
       <?php echo $salutation." ".$moi; ?>
    par
       <?php echo $salutation." $moi"; ?>
  12. observer le résultat affiché et le code source HTML et regarder si les 2 mots y sont aussi collés
  13. remplacer la ligne
       <?php echo $salutation." $moi"; ?>
    par
       <?php echo $salutation.' $moi'; ?>
  14. observer le résultat affiché et le code source HTML et regarder si les 2 mots y sont aussi collés
  15. remplacer la ligne
       <?php echo $salutation.' $moi'; ?>
    par
       <?php echo $salutation.' 
         $moi'; ?>
  16. comparer le résultat affiché et le code source HTML et expliquer...
  17. remplacer la ligne
       <?php echo $salutation." $moi"; ?>
    par
       <?php echo $salutation." 
         $moi"; ?>
  18. comparer le résultat affiché et le code source HTML et expliquer...

Exercice 4 :

manipuler les tableaux et utiliser les boucles : for, while et foreach

  1. créer un nouveau fichier nommé test.php avec le contenu suivant :
    <HTML>
     <HEAD>
      <TITLE>Essais avec les tableaux et les structures de contrôle</TITLE>
     </HEAD>
     <BODY>
    <?php 
    $tableau[0] = "Premier";
    $tableau[1] = "Deuxième";
    $tableau[] = "Troisième";
    
    for($i = 0; $i < 3; $i++) {
    echo "<p>tableau[i=".$i. "] = ".$tableau[$i];
    }
    ?>
     </BODY>
    </HTML>
    
  2. comparer le résultat affiché et le code source HTML dans le navigateur expliquer ce que fait ++ quand il est placé juste après une variable
  3. remplacer la ligne
    for($i = 0; $i < 3; $i++) {
    par
    for($i = 0; $i < 3; ++$i) {
  4. comparer le résultat affiché et le code source HTML et expliquer...
  5. remplacer la ligne
    for($i = 0; $i < 3; ++$i) {
    par
    for($i = 3; $i > 0; $i--) {
  6. comparer le résultat affiché et le code source HTML et expliquer...
  7. remplacer la ligne
    for($i = 3; $i > 0; $i--) {
    par
    for($i = 3; $i > 0; --$i) {
  8. comparer le résultat affiché et le code source HTML et expliquer...
  9. utiliser l'instruction de contrôle while pour produire le même résultat
  10. utiliser l'instruction de contrôle foreach pour produire le même résultat
  11. remplacer le contenu compris entre <?php et ?> par le contenu suivant :
    $tableau['lundi'] = "Premier";
    $tableau['mardi'] = "Deuxième";
    $tableau['mercredi'] = "Troisième";
    $tableau[] = "Quatrième";
    
    for($i = 0; $i < 3; $i++) {
    echo "<p>tableau[i=".$i. "] = ".$tableau[$i];
    }
    
    et observer le résultat
  12. remplacer la ligne
    for($i = 3; $i > 0; $i--) {
    echo "<p>tableau[i=".$i. "] = ".$tableau[$i];
    }
    
    par
    foreach($tableau as $i => $v) {
    echo "<p>tableau[i=".$i. "] = ".$v;
    }
    
  13. comparer le résultat affiché et le code source HTML et expliquer...
  14. expliquer ce qu'est un tableau associatif

Pour vous aider, consulter http://www.tiprof.fr/PHP-mySQL/ressources/php/tableau-PHP.html

Exercice 5 :

définir une fonction

  1. la fonction suivante calcule une surface :
    function surface ($largeur, $longueur) {
      return ($largeur * $longueur);
    }
    et le code suivant appelle la fonction précédente et affiche le résultat
    echo surface ( 120, 40 ); 
    Répondre aux questions suivantes
    1. Peut-on utiliser les variables $largeur et $longueur en dehors de la définition de la fonction ?
    2. Que vallent $largeur et $longueur en dehors de la définition de la fonction ?
    3. Que se passe-t-il si on appelle la fonction en omettant un paramètre ? echo surface ( 120 );
  2. la fonction suivante calcule une surface :
    function surface ($largeur = 120, $longueur = 40) {
      return ($largeur * $longueur);
    }
    et le code suivant appelle la fonction précédente et affiche le résultat
    echo surface ( 80, 100 ); 
    Répondre aux questions suivantes
    1. La valeur affichée sera-t-elle 8000 ou 4800 ?
    2. Que se passe-t-il si on appelle la fonction en omettant un paramètre ? echo surface ( 120 );
    3. Que rend l'appel : echo surface ( ); ?
  3. la fonction suivante calcule le texte HTML d'une ligne de tableau à partir d'un tableau associatif :
    function ligneHTML ($tab = array('nom'=>'Fricottin','prenom'=>'Bibi','adresse'=>'3 rue du Bidon Percé','codepostal'=>'38000,'ville'=>'Grenoble')) {
      foreach($tab as $key => $value) {
         $str = @$str . "<td>$value</td>";
      }
      return ($str);
    }
    et le code suivant appelle la fonction précédente et affiche le résultat avec la valeur de $tab par défaut
    echo '<tr>'.ligneHTML().'</tr>'; 
    Répondre aux questions suivantes
    1. Quand la variable $str est-elle initialisée ?
    2. Que signifie le caractère @ ?
  4. Créer une fonction tableauHTML(), qui crée un tableau HTML complet pour afficher les valeurs d'une liste de tableaux associatifs :
    echo tableauHTML(array(array('nom'=>'Fricottin','prenom'=>'Bibi'),array('nom'=>'Hock','prenom'=>'Loup'))); 
    doit produire :
    FricottinBibi
    HockLoup
    <table>
    <tr><td>Fricottin</td><td>Bibi</td></tr>
    <tr><td>Hock</td><td>Loup</td></tr>
    </table>
  5. Modifier le code de la fonction tableauHTML(), pour afficher une première ligne d'entête , et ajuster le CSS pour obtenir un affichage un peu évolué :
    echo tableauHTML(array(array('nom'=>'Fricottin','prenom'=>'Bibi'),array('nom'=>'Hock','prenom'=>'Loup'))); 
    doit produire :
    nomprenom
    FricottinBibi
    HockLoup
    <table>
    <tr><th>nom</th><th>prenom</th></tr>
    <tr><td>Fricottin</td><td>Bibi</td></tr>
    <tr><td>Hock</td><td>Loup</td></tr>
    </table>
  • la fonction suivante calcule un texte avec la liste des valeurs d'un tableau associatif , séparées par des virgules :
    function strListe ($tab = array('nom'=>'Fricottin','prenom'=>'Bibi','adresse'=>'3 rue du Bidon Percé','codepostal'=>'38000,'ville'=>'Grenoble')) {
      foreach($tab as $key => $value) {
         $str = @$str . " $value,";
      }
      return ($str);
    }
    et le code suivant appelle la fonction précédente et affiche le résultat avec la valeur de $tab par défaut
    echo strListe(); 
    Répondre aux questions suivantes
    1. Modifier le code pour que le texte rendu ne se termine pas par le caractère , après le dernier élément ?
    2. Chercher dans la documentation en ligne sur PHP ce que fait la fonction implode(). Modifier le code en utilisant cette fonction.
    3. Modifier le code pour que certaines valeurs puissent contenir une apostrophe (par exemple si la ville est L'Isle d'Abeau)
      Indication : regarder la documentation en ligne sur strreplace() et addslash() et les essayer toutes les deux.
  • Exercice 6 :

    manipuler une variable globale PHP

    1. reprendre le fichier test.php précédent et remplacer le contenu du code PHP par le code suivant :
      foreach($_SERVER as $i => $v) {
        echo "<p> \$_SERVER[i=".$i. "] = ".$v;
      }
      
    2. chercher ce qu'est $_SERVER dans la documentation en ligne
    3. reprendre le fichier index.php précédent et le revisualiser avec le protocole HTTP, puis rajouter ?param=Bibi au bout de l'URL, lancer cette requête HTTP et observer le résultat
    4. remplacer la ligne
         <?php echo $salutation." 
           $moi"; ?>
      par
         <?php echo $salutation." " .$_GET['param']; ?>
    5. chercher les explications sur les variables super-globales $_GET (ou $_HTTP_GET_VARS), $_POST, $_SERVER et expliquer ce qu'a fait la manipulation précédente
    6. reprendre le fichier test.php précédent et le revisualiser avec le protocole HTTP, puis rajouter ?param=Bibi au bout de l'URL, lancer cette requête HTTP et observer le résultat
    7. comparer le résultat affiché avec le résultat sans ajouter ?param=Bibi au bout de l'URL, et expliquer...

    Exercice 7 :

    essayer les différents interacteurs des formulaires HTML

    1. à partir de l'exemple présenté dans http://www.tiprof.fr/PHP-mySQL/ressources/html/html-form.html, créer un formulaire "de contact" (seulement son affichage HTML)

    Exercice 8 :

    récupérer les valeurs renseignées dans un formulaire HTML lorsqu'il est "soumis" (="envoyé") et faire afficher les valeurs obtenues dans une page Web

    1. renommer le fichier du formulaire précédent avec l'extension .php et le modifier pour que la réponse à sa soumission soit l'affichage des valeurs renseignées par le visiteur
    2. ajouter à la balise <form ... > que son action soit (celle indiquée dans ...) <form action="<?= $_SERVER['PHP_SELF'] >" ?>
    3. ajouter un champ caché entre la balise <form> et sa balise fermante, qui transmet la valeur qu'il avait plus 1, et observer les valeurs transmises
    4. déplacer le code du champ caché pour qu'il soit sous la balise fermante </form>, et observer les valeurs transmises

    Pour vous aider, consulter : voir http://www.tiprof.fr/SitesWebDynamic/Zone%20d%27essais/formulaires/pas-d-action.php

    Quelques liens

    Quelques "références" minimales :

    remonter plus récent revenir
    LicPro - PAGORA