PHP : Le tutoriel pour grands débutants pressés

Image non disponible


précédentsommairesuivant

VI. PHP ETAPE 6

VI-1. Les bases de données : introduction

VI-1-a. A quoi ça sert ?

Pour rappel, le code HTML ne sert qu'à l'affichage.
Le code PHP sert à créer un HTML dynamique jusqu'à un certain point, en tout cas, PHP peut organiser à chaque chargement de votre page web le HTML de façon différente.

Cependant, PHP n'a pas le "pouvoir" de mémoriser des données entre deux chargements de page (en dehors de celles que vous transmettez à chaque fois d'une page web à l'autre, via un formulaire HTML !)...

Alors si vous voulez conserver sur la durée les données entrées par les visiteurs de votre site via votre formulaire, de façon automatique et sans plus vous occuper de rien, il va falloir encore intégrer de bonnes notions des bases de données.

VI-1-b. Comment ça marche ?

Cliquez sur l'icône de WampServer, puis cliquez sur phpMyAdmin.

Image non disponible
Accès à phpMyAdmin


C'est le troisième et dernier lien que nous suivrons sur wampServer, après wwwdirectory (le code) et localhost (le test comme si on était sur le web).

C'est ici, sur phpMyAdmin, que vous allez gérer tout ce qui concerne les bases de données.

Une base de données, qui possède un nom, c'est l'ensemble des tables qui recensent vos données.
Une table, qui a un nom également, c'est une structure qui organise vos données de la façon citée en exemple ci-dessous.

Nous allons commencer par une base qui ne comporte qu'une seule table, pour faire simple.

Cliquez le bouton "Créer une base", nommez-la MaBase, puis cliquez "Créer".
Créez une nouvelle table "Utilisateurs" avec 5 champs...
Ils se découperont ainsi (ce qui nous intéresse surtout, c'est le type des champs)...

Nos 5 champs et leur type respectif
  • ID, qui est un INT (integer : entier), cochez AI (auto-incrémenté pour que phpMyAdmin gère ce champ tout seul)
  • pseudo qui est un VARCHAR (caractères dont le nombre varie), entrez 15 à taille/longueur (nombre maximum de carcactères autorisés)
  • sexe qui est un CHAR (caractères dont le nombre est fixe), entrez 1 à taille/longueur (nous mettrons simplement G ou F)
  • age qui est un INT, entrez 3 à taille (le nombre de chiffres). Pour un âge, c'est sympa de penser aux centenaires...
  • et enfin dateInscription (sélectionnez date)...

Ca y est ? Votre table est créée avec sa structure ?

Maintenant, on va la remplir "à la main", enfin, pour les 5 premières personnes.

A gauche dans votre arborescence, sélectionnez votre table 'inscriptions'.
Vous voyez la structure de votre table qui s'affiche... sous forme de tableau.
Cliquez 'Insérer' dans le menu du haut... Par défaut, phpMyAdmin vous donne un formulaire d'insertion deux entrées par deux entrées...

Laissez toujours le champ ID vide. On a dit qu'il se remplirait automatiquement.
Et remplissez ainsi vos 5 insertions :
Si les dates vous paraissent bizarres, c'est qu'elles sont à l'anglaise (année/mois/jour)...

Nos 5 premiers enregistrements
  • Lili F 18 2009-01-02
  • Toto G 13 2008-01-02
  • Loulou G 25 2008-12-30
  • Zézette F 20 2009-01-02
  • Mimi F 15 2009-01-10

On dira que dans votre table Utilisateurs (qui compte donc 5 champs), il y a 5 enregistrements, 5 personnes enregistrées autrement dit, avec toutes leurs données.
La seule façon certaine de les distinguer, c'est leur ID (identification data).

Pour le reste, deux personnes peuvent avoir le même pseudo, le même sexe, ou la même date d'inscription...

Pour convoquer un enregistrement, ou un morceau d'enregistrement, on passera donc toujours par l'ID.

Image non disponible
Ma première table



Le langage qu'on va maintenant utiliser, pour faire des requêtes ou des insertions ou des suppressions dans notre base, se nomme SQL.
Il est assez intuitif et pour l'étude sommaire que nous allons en faire, il consistera en cinq-six mots d'anglais de base...

Je veux récupérer le jour d'inscription de Zézette ?

La requête sera la suivante :

Sélectionne le champ dateInscription dans la table Utilisateurs qui correspond à l'ID 4 :
Sélectionnez

SELECT dateInscription FROM Utilisateurs WHERE ID="4"



Je veux récupérer toutes les infos sur les filles ?

Sélectionne tous les enregistrements dans la table Utilisateurs qui correspondent au sexe F :
Sélectionnez

SELECT * FROM Utilisateurs WHERE sexe="F"



Je ne veux récupérer que les pseudos des filles ?

Sélectionne tous les pseudos dans la table Utilisateurs qui correspondent au sexe F :
Sélectionnez

SELECT pseudo FROM Utilisateurs WHERE sexe="F"



Voilà pour l'essentiel des requêtes de base en SQL, nous verrons au cours de la suite quelques syntaxes supplémentaires...

VI-2. Alimenter sa base via PHP

De même que PHP vous permet de créer un langage HTML plus dynamique et personnalisé, PHP vous permet maintenant de créer vos requêtes SQL de façon à automatiser l'alimentation de vos bases.

Voici un exemple très concret :

Vous allez créer un formulaire qui permettra de continuer à remplir automatiquement votre base de données MaBase, plus précisément sur votre table Utilisateurs, table que pour l'instant vous avez commencé à remplir à la main, via l'interface PHPMyAdmin.

En voici les étapes :

VI-2-a. Présenter le formulaire

Sur un fichier form.php, entrez ce code :

Notre formulaire de saisie utilisateur
Sélectionnez
<html>
    <head><title>Formulaire de saisie utilisateur </title></head>
    <body>
        <h1>Inscrivez-vous !</h1>
        <h2>Entrez les données demandées :</h2>
        <form name="inscription" method="post" action="form.php">
            Entrez votre pseudo : <input type="text" name="pseudo"/> <br/>
            Garçon ou fille ? 	<input type="radio" name="sexe" value="G"/>Garçon<input type="radio" name="sexe" value="F"/>Fille<br/>
            Entrez votre age : <input type="text" name="age"/><br/>
            <input type="submit" name="valider" value="OK"/>
        </form>
    </body>
</html>



Vous remarquerez que nous ne demandons que 3 éléments d'identification à l'utilisateur, alors que la base en comporte 5 par enregistrement :
C'est normal, le premier champ de notre base est rempli automatiquement par mysql et le dernier, la date d'inscription, nous allons le remplir aussi automatiquement, via PHP cette fois, en entrant la date du jour dès que l'utilisateur clique 'OK'.

Vous remarquerez que pour des données aussi peu variées que le sexe de la personne, nous avons préféré contrôler la saisie en proposant à l'utilisateur deux boutons radio.
Pour limiter les erreurs dans la base SQL, bien songer à proposer des listes déroulantes ou des cases à cocher quand le champ s'y prête...

Qu'allons-nous faire ensuite quand l'utilisateur va cliquer "ok" ?

VI-2-b. Se connecter à notre base via PHP

A chaque fois que nous voulons que PHP se connecte à notre base, on lui donnera une série d'instructions...
Donc on va commencer par coller les paramètres de connexion dans une fonction pour ne pas trop rabâcher dans notre code...

On crée donc un fichier fonctions.php, dans lequel (entre autres) on insère la fonction suivante :

Ma fonction de connection
Sélectionnez
<?php
function connectMaBase(){
    $base = mysql_connect ('localhost', 'root', '');  
    mysql_select_db ('MaBase', $base) ;
}
?>



Vous n'avez rien à modifier...
Sachez simplement que '' est votre mot de passe, laissé vierge ici comme il l'est par défaut dans votre configuration de départ.

Pour expliquer maintenant, cette fonction crée une variable $base qui prépare la commande de connection à votre base avec le nom du serveur (ici localhost), le nom de l'utilisateur (ici root qui signifie administrateur de votre propre base locale, en d'autres termes, root, c'est le patron) et enfin le mot de passe.

La ligne suivante lance la commande de sélection de votre base (où l'on entre donc le nom de votre base), puis on reprend la variable qui contient toute la commande de connexion...

Bien entendu, pour convoquer la fonction que vous venez de créer sur fonctions.php, il vous faudra sur form.php faire un include de ce fichier fonctions.php, puis lancer la fonction au moment opportun par la ligne suivante :

 
Sélectionnez
<?php
connectMaBase();
?>

VI-2-c. Pour travailler proprement (Généralités)

Retenez bien ceci :
Quand on rédige une commande d'insertion SQL via PHP, on préfère procéder ainsi, qui paraît un peu compliqué au début, mais simplifie toute la compréhension ensuite.

Insérer une donnée SQL via PHP, l'ossature
  1. On se connecte à la base (en utilisant notre fonction de connexion toute prête).
  2. On prépare la commande sql en la stockant dans une variable PHP du type $sql (pour langage sql);
  3. On la lance.
  4. On ferme la connexion.

VI-2-d. Insérer des données dans notre base via PHP

Bien entendu, le code suivant ira sur le fichier form.php dans notre condition => si l'utilisateur a cliqué OK

Insérer une donnée sql via PHP, le code
Sélectionnez
<?php
//On récupère les valeurs entrées par l'utilisateur :
$pseudo=$_POST['pseudo'];
$age=$_POST['age'];
$sexe=$_POST['sexe'];
 
//On créée une variable date du jour grâce à la fonction date() de PHP
$today = date("d.m.y");
 
//On se connecte
connectMaBase();
 
//On prépare la commande sql d'insertion
$sql = 'INSERT INTO Utilisateurs VALUES("","'.$pseudo.'","'.$sexe.'","'.$age.'","'.$today.'")';
 
/*on lance la commande (mysql_query) et au cas où, 
on rédige un petit message d'erreur si la requête ne passe pas (or die) 
(Message qui intègrera les causes d'erreur sql)*/
mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
 
// on ferme la connexion
mysql_close();
?>


C'est probablement cette partie qui vous semble la plus complexe :

 
Sélectionnez
<?php
//On prépare la commande sql d'insertion
$sql = 'INSERT INTO Utilisateurs VALUES("","'.$pseudo.'","'.$sexe.'","'.$age.'","'.$today.'")';
?>


La première valeur est laissée en blanc car c'est l'ID auto-incrémenté...
Si vous l'oubliez, ce blanc, il vous renverra un message d'erreur sql disant que le nombre de données insérées ne coïncident pas avec le nombre de champs... en anglais.

Ensuite il faut gérer au sein des guillemets simples (apostrophes) tout ce qui est PHP
et au sein des guillemets doubles tout ce qui est sql...

On place les guillemets au sein des apostrophes pour les afficher dans le sql, on place les variables 'nues' dans PHP.

VI-2-e. On récapitule le code ?

fonctions.php
Sélectionnez
<?php
function connectMaBase(){
    $base = mysql_connect ('localhost', 'root', '');  
    mysql_select_db ('MaBase', $base) ;
}
?>
form.php
Sélectionnez
<?php
include("fonctions.php");
?>
<html>
    <head><title>Formulaire de saisie utilisateur </title></head>
    <body>
        <h1>Inscrivez-vous !</h1>
        <h2>Entrez les données demandées :</h2>
        <form name="inscription" method="post" action="form.php">
            Entrez votre pseudo : <input type="text" name="pseudo"/> <br/>
            Garçon ou fille ? 	<input type="radio" name="sexe" value="G"/>Garçon<input type="radio" name="sexe" value="F"/>Fille<br/>
            Entrez votre age : <input type="text" name="age"/><br/>
            <input type="submit" name="valider" value="OK"/>
        </form>
        <?php
        if (isset ($_POST['valider'])){
            //On récupère les valeurs entrées par l'utilisateur :
            $pseudo=$_POST['pseudo'];
            $age=$_POST['age'];
            $sexe=$_POST['sexe'];
            //On construit la date d'aujourd'hui
            //strictement comme sql la construit
            $today = date("y-m-d");
            //On se connecte
            connectMaBase();
 
            //On prépare la commande sql d'insertion
            $sql = 'INSERT INTO Utilisateurs VALUES("","'.$pseudo.'","'.$sexe.'","'.$age.'","'.$today.'")'; 
 
            /*on lance la commande (mysql_query) et au cas où, 
            on rédige un petit message d'erreur si la requête ne passe pas (or die) 
            (Message qui intègrera les causes d'erreur sql)*/
            mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
 
            // on ferme la connexion
            mysql_close();
        }
        ?>
    </body>
</html>


Je vous laisse le plaisir de tester et d'alimenter votre base en saisissant des données dans votre formulaire...

Magique non ? Mieux encore, informagique...

Ne vous étonnez pas si quand vous cliquez sur OK, il semble ne rien se passer.
Ne cliquez pas trois fois et allez voir votre table utilisateurs.

Ca a très bien fonctionné. S'il semble ne rien se passer, c'est que nous avons simplement géré dans notre code l'insertion de données, sans penser à avertir l'utilisateur que son action a bien eu l'effet escompté.

Nous verrons cela plus tard... dans le TP par exemple ?

VI-3. TP6

SANS COPIER COLLER et en ne regardant que ça et là des parties du cours :

Vous proposerez un formulaire d'abonnement (abonnement.php) du type

Votre formulaire
Sélectionnez
POUR VOUS ABONNER :
 
Veuillez saisir vos données d'identité :
Bouton radio : Monsieur Madame ou Mademoiselle
Nom :
Prénom :
Age :
Adresse :
Code Postal :(Bloquer via HTML la saisie à 5 chiffres)
Ville : Numéro de téléphone (Bloquer via HTML la saisie à 10 chiffres)
 
 
Veuillez cocher le magazine choisi (un seul choix possible donc bouton radio) :
 
- J'ai la main verte.
- J'ai le pied marin.
- J'ai l'oeil vif.
- J'ai la rate qui se dilate.
 
Valider


Au clic sur valider de la part de l'utilisateur, vous ferez deux choses simultanées :

1) Afficher ceci

'Pour rappel, vous avez saisi :'
toutes les données entrées par l'utilisateur, présentées proprement, du genre

'VOUS ETES :'
'VOUS AVEZ CHOISI :'
'Merci de vous être abonné à ce magazine !'

2) Insérer dans une table Abonnes que vous aurez créée auparavant via phpMyAdmin toutes les données entrées par l'utilisateur.

PS : vous placerez dans le fichier fonctions.php la fonction de connexion bien entendu.

Bon courage !

VI-4. Correction du TP6

Veuillez cliquer sur le symbole à droite pour découvrir la solution quand vous aurez fini.

fonctions.php
CacherSélectionnez


Dans phpMyAdmin, voici à quoi doit ressembler votre structure (de plus, il faut cocher AI (auto-incrémentation) pour l'ID).

Image non disponible
La structure de votre table abonnes



Au passage, c'est un hasard si les valeurs de nos publications sont toujours de 4 lettres (oeil, main etc.), mais autant en profiter pour mettre un CHAR 4 plutôt qu'un VARCHAR.
Mais attention aux valeurs qu'on leur affecte si l'on intègre de nouveaux magazines !

Dans abonnement.php enfin :

(Peut-être vous êtes vous cassé la tête avec cette histoire de nouvel écran quand l'utilisateur clique...
et ce damné formulaire qui restait en ligne, vos commentaires de rappel ne faisant que s'ajouter au HTML...)

Voici une solution à retenir : Dans vos if, commencer par mettre la condition d'affichage la plus "avancée" en premier, contrairement à ce que l'on a envie de faire spontanément :
remontez le temps à l'envers, si vous voulez...


Veuillez cliquer sur le symbole à droite pour découvrir la solution quand vous aurez fini.

abonnement.php
CacherSélectionnez

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 VAUTHIER Sylvie. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.