Cours PHP-MySQL

Partie 1 : Généralités sur PHP

Matthias Meusburger
www.meusburger.net/matthias


Sommaire :

  1. Généralités sur PHP
    1. PHP?
    2. Un bloc PHP
    3. Les chaînes de caractères
    4. PHP et HTML
    5. Retours à la ligne : <br> ou \n?
    6. Indentation
    7. Les inclusions

  2. Transmettre des valeurs d'une page à une autre
    1. Les formulaires HTML
    2. Le passage par URL

  3. Les sessions
    1. L'identifiant de session
    2. Démarrage d'une session
    3. Les variables de session
    4. Fin d'une session



  1. Généralités sur PHP

    1. PHP?

      PHP (PHP Hypertext Preprocessor) est un langage open source permettant de créer dynamiquement des pages HTML, et ce, notamment grâce à sa capacité à s'interfacer avec des bases de données.

    2. Un bloc PHP

      Un bloc PHP commence par "<?php" et finit par "?>"
    3. <?php
      // Instructions php
      ?>

      Vous pouvez ouvrir et fermer des blocs autant de fois que vous le désirez dans une page PHP.
      Quand vous vous situez en dehors d'un bloc PHP, vous pouvez taper directement du HTML.

      <!-- Code HTML -->

      <?php
      // Instructions php
      ?>

      <!-- Code HTML -->

      De plus, le fait de fermer un bloc PHP ne détruit pas l'environnement.

      <?php
      $test = "toto";
      ?>

      <!-- Code HTML -->

      <?php
      echo $test;
      ?>

      Plus fort encore, fermer un bloc PHP ne rompt pas les conditions et itérations :

      <?php
      $test = true;
      if ($test) {
      ?>
      <!-- Code HTML -->
      <?php
      }
      ?>



    4. Les chaînes de caractères

      Les chaînes de caractères sont entourées par des délimiteurs qui indiquent leur début et leur fin. Vous pouvez utiliser au choix la simple-quote ( ' ) ou la double-quote : ( " ).

      Quel délimiteur choisir?

      Si la chaîne de caractère va comporter des double-quotes, utilisez les simple-quotes.
      A l'inverse, si la chaîne de caractères va comporter des simple-quotes, utilisez des double-quotes.
      Veillez simplement a utiliser le même délimiteur pour le début et pour la fin d'une chaîne.

      <?php

      // Instructions valides :
      echo "La table toto a bien été supprimée!";
      echo 'La table toto a bien été supprimée!';
      echo "La table 'toto' a bien été supprimée!";
      echo 'La table "toto" a bien été supprimée!';

      // Instructions invalides :
      echo "La table toto a bien été supprimée!';
      echo 'La table 'toto' a bien été supprimée!';
      echo "La table "toto" a bien été supprimée!";

      ?>

      Si vous devez utiliser en même temps des simple-quotes et des double-quotes au sein d'une chaîne de caractères, choisissez un délimiteur que vous devrez protéger avec le caractère "\" au sein de la chaîne pour qu'il ne soit pas interprété.

      <?php

      // Ces deux instructions sont équivalentes :

      echo "Le champ 'titi' de la table \"toto\" a bien été supprimé!";

      // ou

      echo 'Le champ \'titi\' de la table "toto" a bien été supprimé!';

      ?>


      Insérer des variables dans des chaînes de caractères :

      Vous pouvez insérer des variables dans une chaîne de caractères, à condition que le délimiteur choisi soit les double-quotes ( " ).

      <?php

      $champ = "titi";

      echo "Le champ $champ a bien été supprimé!";

      ?>

      Affichera :

      Le champ titi a bien été supprimé!


      Par contre, vous ne pouvez pas de cette manière accoler la valeur d'une variable à du texte :

      <?php

      /*
      Déclaration valide, mais incorrecte :
      PHP ne sait pas où s'arrête le nom de variable et où commence le texte.
      Il cherchera à afficher la valeur de la variable "jourème", qui n'existant pas, sera vide.
      */

      $jour = "7";

      echo "Et le $jourème jour, il se reposa.";

      Pour cela, il faut utiliser l'opérateur de concaténation de chaînes de caractères : "."

      <?php

      // Déclaration valide :
      $jour = "7";

      echo "Et le ".$jour."ème jour, il se reposa.";



    5. PHP et HTML

      On peut envisager deux cas différents pour faire cohabiter PHP et HTML suivant le cas dans lequel on se trouve :
      - Produire du HTML dans du PHP

      <?php

      $nom = "Vers l'index!";
      $page = "index.php";

      echo ("<a href=\"$page\">$nom</a>");

      ?>

      - Utiliser du PHP dans du HTML

      <?php

      $nom = "Vers l'index!";
      $page = "index.php";

      ?>

      <a href="<?php echo $page ?>"><?php echo $nom ?></a>


      Quelle méthode choisir?

      En fait, les deux méthodes sont valides. Le choix portera sur le contenu du bloc dans lequel vous vous trouvez.
      Si vous êtes dans un bloc comportant beaucoup de HTML, comme un formulaire, il vaudra mieux utiliser du PHP au sein du HTML.
      Par contre, si vous vous trouvez dans un bloc où vous effectuez beaucoup de traitements en PHP, il vaudra mieux produire du HTML au sein du PHP.

    6. Retours à la ligne : <br> ou \n ?

      On peut considérer PHP comme un générateur de pages HTML, qui affiche des données PHP traitées.
      Ainsi, <br> est une information purement HTML alors que \n sera interprété lors de la création du fichier de sortie (le fichier HTML).
      <br> permet d'aller à la ligne dans l'affichage de la page HTML, alors que \n permet d'aller à la ligne lors de la création du code source HTML.

      Exemple :

      Vous écrivez ceci dans votre code PHP :

      echo ("un<br>deux<br>trois");

      Votre page HTML ressemblera à ceci :

      un
      deux
      trois

      mais son code source ressemblera à ça :

      un<br>deux<br>trois

      Par contre, si vous écrivez ceci dans votre code PHP :

      echo ("un\ndeux\ntrois");

      Votre page HTML ressemblera à ceci :

      un deux trois

      et votre code source à ceci :

      un
      deux
      trois

      Finalement, la bonne solution consiste à mélanger <br> et \n :

      En PHP :

      echo ("un<br>\ndeux<br>\ntrois");

      A l'affichage de la page HTML :

      un
      deux
      trois

      Le code source HTML :

      un<br>
      deux<br>
      trois


    7. Indentation :

      Il est aussi important d'indenter le code HTML produit que le source PHP.
      En effet, lors de certains débugages, vous serez sûrement amené à relire le source des pages HTML produites.

      Ainsi, ce code PHP :

      <?php

      echo ("<table>\n");
      echo ("<tr>\n");
      echo ("<td>\n");
      echo ("Hello \n");
      echo ("</td>\n");
      echo ("<td>\n");
      echo ("World!\n");
      echo ("</td>\n");
      echo ("</tr>\n");
      echo ("</table>\n");

      ?>

      Donnera le code source HTML suivant, peu lisible :

      <table>
      <tr>
      <td>
      Hello
      </td>
      <td>
      World!
      </td>
      </tr>
      </table>


      Vous pouvez pour remédier à cela utiliser le caractère spécial "\t" ou tabulation à chaque fois que vous ouvrez une nouvelle balise HTML.

      <?php

      echo ("<table>\n");
      echo ("\t<tr>\n");
      echo ("\t\t<td>\n");
      echo ("\t\t\tHello \n");
      echo ("\t\t</td>\n");
      echo ("\t\t<td>\n");
      echo ("\t\t\tWorld!\n");
      echo ("\t\t</td>\n");
      echo ("\t</tr>\n");
      echo ("</table>\n");

      ?>

      Le code HTML produit aura cette apparence :

      <table>
            <tr>
                  <td>
                        Hello
                  </td>
                  <td>
                        World!
                  </td>
            </tr>
      </table>

      Si vous trouvez que les tabulations créent des espaces trop importants, vous pouvez utiliser des espaces :

      <?php

      echo ("<table>\n");
      echo ("  <tr>\n");
      echo ("    <td>\n");
      echo ("      Hello \n");
      echo ("    </td>\n");
      echo ("    <td>\n");
      echo ("      World!\n");
      echo ("    </td>\n");
      echo ("    </tr>\n");
      echo ("</table>\n");

      ?>

      Cela donnera :

      <table>
        <tr>
          <td>
            Hello
          </td>
          <td>
            World!
          </td>
        </tr>
      </table>



    8. Les inclusions

    9. Les pages comportent souvent des éléments communs entre elles. Dans ce cas, il peut être intéressant de mettre ces parties communes dans des fichiers séparés, et de les appeler dans les pages qui en ont besoin. C'est le rôle des fonctions d'inclusion.

      1. La fonction include
      2. Pour appeler une page à inclure, utilisez la fonction include :

        include ('nom_du_fichier');

        Attention, le fichier à inclure doit également comporter les balises de début et de fin de bloc PHP.

        Ceci aura pour effet de remplacer cette instruction d'inclusion par le fichier en lui-même.
        Dans la mesure où PHP effectue un "copier-coller", toutes variables déclarées dans la page d'inclusion avant l'instruction d'inclusion seront connues dans la page à inclure.

      3. La fonction include_once


      4. La fonction include_once se comporte comme sa soeur include, à la différence près que PHP veillera dans ce cas à ce que la page à inclure ne soit incluse qu'une et une seule fois.

      5. Les fonctions require et require_once


      6. Les fonctions require et require_once se comportent de la même manière que leurs cousines include et include_once... quand tout se passe bien!
        En effet, c'est lors d'une erreur d'inclusion que leur comportement diffère.
        En utilisant include ou include_once, si PHP ne peut trouver le fichier à inclure il affichera éventuellement une erreur, et le traitement de la page continuera.
        Pour éviter ce genre de désagrément dans le cas où les informations contenues dans la page à inclure sont vitales pour la bonne exécution de la page d'inclusion, vous pouvez utiliser require ou require_once.
        En effet, avec ces fonctions la survenue d'une erreur lors de l'inclusion sera fatale et PHP arrêtera le traitement de la page d'inclusion.


  2. Transmettre des valeurs d'une page à une autre

    Il existe deux méthodes simples pour passer des valeurs d'une page à une autre.

    1. Les formulaires HTML

      Tout élément nommé d'un formulaire HTML envoyé vers une page PHP se voit référencé en tant que variable dans la page de destination.

      Dans la page de départ :

      <input type="text" name="nom_utilisateur">

      Dans la page de destination, on pourra écrire :
    2. echo $nom_utilisateur;

    3. Le passage par URL

      Il est possible de passer des valeurs vers une page PHP via l'url de celle-ci. Cette méthode peut donc s'appliquer sur un simple lien hyper-texte.

      Syntaxe :

      nom_de_la_page.php?variable_1=valeur_1&variable_2=valeur_2[...]&variable_n=valeur_n

    Les valeurs sont alors accessibles dans la page de destination par :

    echo $variable_n;



    Exemple sur un lien hypertexte :
    Dans la page de départ :

    <a href="afficher_champs.php?nomdelabase=mabase&nomdelatable=matable> Afficher les tables </a>

    Dans la page de destination :

    echo $nomdelabase;
    echo $nomdelatable;

    Attention cependant à prendre quelques précautions :
    Dès lors que les valeurs sont susceptibles de comporter des caractères autres que les caractères alpha-numérique et "_", il faut encoder la chaîne avec une des fonctions d'encodage de PHP.

    Exemple :
    Si la valeur à transmettre comporte un "&", il faut encoder la chaîne pour que ce caractère ne soit pas interprété comme étant la fin de la valeur mais bien comme partie de celle-ci.

    <?php
    $valeur = "mielpops&chocobiscuits";
    ?>

    <a href="petit_dej.php?petit_dej="<?php echo urlencode($valeur) ?>"> En avant pour le petit déjeuner! </a>




  3. Les sessions

    Il peut être parfois nécessaire de conserver des valeurs (nom d'utilisateur, mot de passe) sur un ensemble de pages sans avoir à les passer sans arrêt d'une page à une autre. C'est ici qu'intervient le concept de session, introduit dans PHP4.


    1. L'identifiant de session :

      Chaque visiteur se voit attribué un numéro unique, l'identifiant de session.
      Cet identifiant va permettre à php de recréer l'environnement précédent d'un visiteur.
      Il peut être propagé soit par cookies, soit par l'URL.

      Les cookies :
      Utiliser les cookies est déconseillé, au vu du manque de fiabilité de cette méthode (l'utilisateur peut très bien les rejeter).

      L'URL :
      On peut connaître l'identifiant de session avec la variable $PHPSESSID.
      Il faut alors l'ajouter aux paramètres des pages que l'on appelle:
    2. page.php?var_1=val_1...&PHPSESSID=$PHPSESSID

      La méthode par URL présente un avantage indéniable : si PHP a été compilé avec l'option "enable-trans-sid", celui-ci se chargera de transmettre l'identifiant à toutes les pages concernées de manière complètement transparente! L'identifiant n'apparaîtra même pas dans la barre d'adresses! De cette manière, vous n'aurez à vous préoccuper ni de son utilisation, ni même de sa valeur!

    3. Démarrage d'une session :

      Une session commence avec l'instruction :
    4. session_start();

      Cette fonction ouvre une nouvelle session, ou si la session existe déjà, l'environnement précédent sera recrée.

    5. Les variables de session :

      Lorsqu'une session est créée, il est possible d'enregistrer des variables, dites "de session", et qui seront alors connues dans n'importe quelle page faisant partie de la session.
      Les variables de sessions sont enregistrées sur le serveur, ce qui évite la contrainte des cookies.


      1. Ajout d'une variable de session :

        Pour enregistrer une variable de session, utilisez la fonction :

        session_register("nom_de_la_variable");

        Exemple :

        Dans page.php :

        session_start();
        $ma_variable = toto;
        session_register("ma_variable");

        Dans page2.php :

        session_start();
        echo $ma_variable; // Affichera toto


        Attention :
        Quand vous modifiez une variable de session, la modification est locale. C'est à dire que la variable de session ne sera pas modifiée tant que vous ne l'aurez pas ré-enregistrée avec session_register("ma_variable");.

      2. Suppression d'une variable de session :

        Pour supprimer une variable de session, utilisez la fonction :

        session_unregister("nom_de_la_variable");

         

      3. Suppression de toutes les variables de sessions :

        Pour supprimer toutes les variables de session, utilisez la fonction :

        session_unset();


    6. Fin d'une session :


    7. Pour terminer une session en sauvegardant les données :

      session_write_close();

      Pour terminer une session sans rien sauvegarder :

      session_destroy();