20.Exemples de scripts PHP

20.3.Section membre

20.3.1.Introduction

Nous allons voir avec ce script comment mettre à profit nos connaissances sur la mise en place d'un formulaire, la gestion d'une base de données et des sessions pour identifier les personnes se connectant à votre site et leur donner des droits d'accès différents ou en tout cas une présentation personnalisée.

20.3.2.Inscription

20.3.2.1.Formulaire d'inscription

Commençons par étudier le formulaire d'inscription. A titre d'exemple et dans un premier temps, nous invitons l'utilisateur à saisir son identifiant, son nom, prénom, adresse (vous aurez certainement envie de lui demander également son email et un tas d'autres informations) ainsi qu'un mot de passe pour les connexions futures (dans la pratique vous aurez tout interêt à demander deux fois le mot de passe et ainsi vérifier qu'il n'y a pas eu de faute de frappe). Il suffit en fait d'appliquer ici ce que nous avons vu dans le cours sur les formulaires.
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
    <form action="sectionmembre_ajout.php" method="post">
        Identifiant: <input type="text" name="id" maxlength="32"/><br/>
        Nom: <input type="text" name="nom" maxlength="32"/><br/>
        Prénom: <input type="text" name="prenom" maxlength="32"/><br/>
        Adresse: <input type="text" name="adresse" maxlength="128"/><br/>
        Mot de passe: <input type="password" name="motdepasse" maxlength="16"/>
        <br />
        <input type="submit" value="Enregistrer"/>
    </form>
</body>
</html>

20.3.2.2.Enregistrement des données

Vous devrez au préalable créer une nouvelle table dans votre base de données avec une requête du type
CREATE TABLE table_utilisateurs (id VARCHAR(32), nom VARCHAR(32), prenom VARCHAR(32), adresse VARCHAR(128), motdepasse VARCHAR(16), UNIQUE(id))
Une fois la table table_utilisateurs créée vous pourrez utiliser le script suivant sectionmembre_ajout.php pour enregistrer les données de votre nouveau membre:
<?php
    // Parametres de connexion à la base de données
    $BD_serveur     = "localhost";
    $BD_utilisateur = "root";
    $BD_motDePasse  = "";
    $BD_base        = "mabase";
	
    // Récupération des paramètres POST
    $id      = $_POST["id"];
    $prenom  = $_POST["prenom"];
    $nom     = $_POST["nom"];
    $adresse = $_POST["adresse"];
    $motDePasse = $_POST["motdepasse"];
	
    echo "Bonjour ".stripSlashes($prenom)." ".stripSlashes($nom).",<br/>";
    
    @mysql_pconnect($BD_serveur, $BD_utilisateur, $BD_motDePasse)
        or die("Impossible de se connecter au serveur de bases de données.");
    @mysql_select_db($BD_base)
        or die("Impossible de se connecter à la base de données.");
    
    $requete = "INSERT INTO table_utilisateurs (id, nom, prenom, adresse, motdepasse)
                  VALUES ('$id','$nom','$prenom','$adresse', '$motDePasse')";
    $result = @mysql_query($requete);
    if (!$result) {
        echo "L'enregistrement de vos données a échoué. Essayez plus tard.".
             "Et demandez à l'administrateur de vérifier l'existence de la ".
             "table table_utilisateurs ;-)<br />";
    } else {
        echo "Félicitations. Vous êtes desormais un nouveau membre de PHP Facile!".
             "<br />";
    }
?>
rem
  • Les paramètres étant passés par la méthode POST, par défaut, les caractères spéciaux sont "échappés" (i.e. précédé d'un anti-slash. Ce qui est en particulier vrai pour l'apostrophe). Ceci permet de ne pas avoir à ce soucier de se problème lors de l'insertion en base de données. Par contre, cela peut être ennuyeux pour un affichage "brut". Dans ce cas, il faut supprimer ces caractères d'échappement en faisant appel à stripSlashes().
  • La table ayant été créé avec une contrainte d'unicité sur le champ id cela implique que dans le cas où l'utilisateur choisi un identifiant qui existe déjà, l'enregistrement échouera (sans que l'utilisateur soit informé de la raison du problème).

20.3.3.Accès aux données

Maintenant qu'il nous est possible d'autoriser de nouveaux utilisateurs à s'inscrire, voyons comment leur permettre d'accéder à leurs données. Pour cela, nous commencerons par créer un formulaire de connexion (où l'utilisateur est invité à préciser son identifiant et mot de passe).
<html>
<body>
    <form action="sectionmembre_visualise.php" method="post">
        Identifiant: <input type="text" name="id" maxlength="32"/>
        <br/>
        Mot de passe: <input type="password" name="motdepasse" maxlength="16"/>
        <br />
        <input type="submit" value="Se connecter"/>
    </form>
</body>
</html>

Une fois, les paramètres de connexion saisis c'est le script suivant qui est exécuté:
<?php
    // Paramètres de connexion à la base de données
    $BD_serveur     = "localhost";
    $BD_utilisateur = "root";
    $BD_motDePasse  = "";
    $BD_base        = "mabase";

    $id         = $_POST["id"];
    $motDePasse = $_POST["motdepasse"];

    @mysql_pconnect($BD_serveur, $BD_utilisateur, $BD_motDePasse)
        or die("Impossible de se connecter au serveur de bases de données.");
    @mysql_select_db($BD_base)
        or die("Impossible de se connecter à la base de données.");
 
    $requete = "SELECT * FROM table_utilisateurs ".
                       " WHERE id='$id' AND motdepasse='$motDePasse'";
                       
    $result = mysql_query($requete);
    
    if ($enreg = mysql_fetch_array($result)) {
        // Si une ligne a été trouvé c'est que le couple
        // (identifant, mot de passe) est valide
        echo "NOM : " . $enreg["nom"] . "<br/>";
        echo "PRENOM : " . $enreg["prenom"] . "<br/>";
        echo "ADRESSE : " . $enreg["adresse"] . "<br/>";
    } else {
        echo "Paramètres de connexion invalides<br/>";
    }
?>
Cela consiste simplement à demander la liste des utilisateurs ayant pour identifiant id et pour mot de passe motDePasse (autrement-dit les informations données via le formulaire). Il y a de toutes façons au plus un enregistrement qui correspond. Et s'il y en a au moins un, c'est que le mot de passe est bien celui attendu.
L'accès aux données (autorisant éventuellement une modification comme nous le verrons plus loin) est donc bien limité au seul utilisateur autorisé.