Il est de bon ton de se souhaiter la bonne année. Mais vous, et vous seul, pourrez faire en sorte que cette année soit bonne, meilleure que celle qui vient de s'écouler. Apprenez à ne compter que sur vous, car personne n'est plus qualifié que vous-même pour bâtir, réparer ou améliorer votre propre vie. Personne ne fera les choses à votre place. D'ailleurs, tout ce que les autres peuvent faire, c'est souhaiter que vous le fassiez. Et ne croyez pas que tout ceux qui vous entourent vous apporteront des solutions : certains font juste partie de vos problèmes. Transformez vos résolutions en actes, et dans douze mois, retournez-vous et souriez-vous fièrement : C'était long. C'était difficile. Mais ça y est : 2017 était une bonne année, merci Moi.

PHP - MySQL [Retour au menu]
Petite application

Nous allons faire une petite application de gestion de base de données : Un tout petit carnet d'adresses qui va se contenter de stocker les noms, les prénoms et les adresses E-Mail de nos amis, et de les visualiser

Description technique

Il va donc y avoir un menu principal menu.htm, qui va se contenter de nous donner 2 choix :

Lorsqu'on clique sur "Ajouter une nouvelle personne", on est envoyé sur la page ajouternouveau.htm, qui est une page HTML pourvue d'un formulaire qui va nous demander d'entrer le Nom, le Prénom et l'E-Mail de la nouvelle personne. Il y aura un bouton SUBMIT qui va permettre d'envoyer les données à la page de confirmation confirmationajout.php

confirmationajout.php va réellement ajouter les données dans la table, et proposer un seul lien vers le menu principal menu.htm

Dans menu.htm, quand on clique sur "Voir les enregistrements", on est transféré sur la page visualisation.php qui va lister tous les enregistrements de la table dans la page.

Schéma

Prérequis, création et nommage des objets

Il est donc bien entendu nécessaire de disposer d'une base de données chez son fournisseur internet. C'est donc mon cas chez Infomaniak.

Objets Commentaires
Base de données info3000
Emplacement localhost (http://www.info-3000.com)
Table ZZ_CarnetAdresse
Champs NomClient
Adresse
EMail
Tous vides
Pages - Certaines pages nécessitent du code PHP, aussi, elles doivent être en .php
Menu principal menu.htm
Ajout d'un nouvel enregistrement ajouternouveau.htm
Confirmation de l'ajout, et ajout proprement dit confirmationajout.php
Visualisation des enregistrements visualisation.php

Etape 1 : Création de la table T_Client dans la base de données info3000

Cette opération peut se faire facilement avec PHPmyAdmin. Voici l'équivalent MySQL :

CREATE TABLE `T_Client`
  (
  `NomClient` VARCHAR(50) NOT NULL,
  `Prenom`    VARCHAR(50) NOT NULL,
  `EMail`     VARCHAR(50) NOT NULL
  );

Etape 2 : Conception du menu principal menu.htm

C'est la plus simple des pages : 2 liens hypertextes tout bêtes vers l'ajout d'un nouveau client, ou l'affichage des clients existants.

<html>
  <head>
    <title>Menu principal</title>
  </head>
  <body>
    <h1>Faites votre choix</h1>
    <p>
      <a href="ajouternouveau.htm">Ajouter une nouvelle personne</a><br>
      <a href="visualisation.php" >Voir les enregistrements     </a>

    </p>
  </body>
</html>

Cliquez ici pour aller directement sur menu.htm

Etape 3 : Conception du formulaire d'entrée des données ajouternouveau.htm

J'ai appelé les champs EDIxxx (j'ai donc ajouté EDI) pour préciser qu'il s'agit de zones d'EDItion, et pour éviter les confusions avec les champs eux-mêmes.

<html>
  <head>
    <title>Ajout d'un nouveau client</title>
  </head>
  <body>
    <h1>Entrez les coordonnées de la nouvelle personne</h1>
    <form method="post" action="confirmationajout.php">
      Nom :    <input type="text"   name  ="EDINomClient" > <br>
      Prénom : <input type="text"   name  ="EDIPrenom"    > <br>
      E-Mail : <input type="text"   name  ="EDIEMail"     > <br>
               <input type="submit" value = "Ajoutez moi" >
    </form>
  </body>
</html>

Etape 4 : Conception de la page de confirmation de nouvelle entrée confirmationajout.php

Comme cette page est appelée depuis le bouton SUBMIT de la page ajouternouveau.htm, nous disposons dès lors de 3 variables : EDINomClient, EDIPrenom et EDIEMail, qui vont pouvoir être directement exploitables dans PHP en ajoutant un $ devant.

Nous pourrions simplement écrire :
echo $EDIPrenom , " " , $EDINomClient , " (" , $EDIEMail , ") a bien été ajouté";

Mais bien sûr, ce qui est intéressant, ce n'est pas de l'afficher, mais bien de l'ajouter dans la table :

<body>
  <?
    // Ouverture de la connexion :  
    $Connexion = mysql_connect("localhost", "info3000", "MonMotDePasse");
    // Ouverture de la base de données :
    mysql_select_db("info3000" , $Connexion);
    // Ligne SQL d'entrée des données du formulaire de la page d'avant (ajouternouveau.htm)
    mysql_query("INSERT INTO ZZ_CarnetAdresse VALUES('$EDINomClient' , '$EDIPrenom' , '$EDIEMail');");
    // Fermeture de la connexion
    mysql_close();
    // Message de confirmation de l'ajout :
    echo $EDIPrenom , " " , $EDINomClient , " (" , $EDIEMail , ") a été ajouté";
  ?>
  <p>
    <a href="menu.htm">Retourner au menu</a>
  </p>

</body>

Ce code va fonctionner, et la base de données info3000 va bien être trouvée, même si cette page confirmationajout.php est dans un sous-sous-sous dossier de www.info-3000.com

Attention : Si on essaie d'écrire dans la table des variables qui sont accidentellement vides, aucune erreur ne surgira, mais aucune ligne ne sera ajoutée dans la table, même pas des lignes vides. Je dis ça parce que je me suis trompé, j'ai écrit : 
mysql_query("INSERT INTO ZZ_CarnetAdresse VALUES($EDINomClient , $EDIPrenom , $EDIEMail);");

au lieu de
mysql_query("INSERT INTO ZZ_CarnetAdresse VALUES('$EDINomClient' , '$EDIPrenom' , '$EDIEMail');");

Et je n'ai pas eu d'erreur, mais rien n'a été rajouté dans la base de données. Il faut donc bien penser à :

Etape 5 : Conception de la page de visualisation de la table visualisation.php

Cette page va simplement :

  1. Informer du nombre d'enregistrements actuels, par exemple :
    Voici les 2 personnes
  2. Lister les gens, par exemple :
    Marcel Dupont (mdupont@supermail.com)
    Julien Machin (julien334@aol.com)
  3. Proposer un lien vers le menu principal

<body>
  <?
    // Initialisation :
    // ==============

    mysql_connect("localhost", "info3000", "MonMotDePasse");
    mysql_select_db("info3000");
    // Comptage des personnes :
    $Resultat = mysql_query("SELECT * FROM ZZ_CarnetAdresse;");
    $NombrePersonne = mysql_numrows($Resultat);

    // Affichage des gens :
    // ==================

    echo "Voici les " , $NombrePersonne , " personnes : <BR>";
    for ($Compteur=0 ; $Compteur<mysql_numrows($Resultat) ; $Compteur++)
      {
      $NomClient = mysql_result($Resultat , $Compteur , "NomClient");
      $Prenom = mysql_result($Resultat , $Compteur , "Prenom");
      $EMail = mysql_result($Resultat , $Compteur , "EMail");
      echo $Prenom , " " , $NomClient , " (" , $EMail , ")<BR>";
      }

    // Fin du travail :
    // ==============

    mysql_close();
  ?>
  <p><a href="menu.htm">Retour au menu</a></p>
</body>

---