Les langages de programmation du Web

Précédent Sommaire 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Suivant

14. Application : Création d'un compte

Beaucoup de sites demandent la création d'un compte pour pouvoir utiliser un espace personnel (Facebook...).
Nous nous contenterons ici de fournir un nom d'utilisateur et un mot de passe.
Il faudra vérifier que le formulaire a été correctement rempli, que le nom d'utilisateur n'est pas déjà pris...
Comme dans le chapitre précédent, toutes les informations seront enregistrées dans un fichier dédié.

Remarque Dans le chapitre 17, nous verrons une technique plus efficace pour stocker des informations : les bases de données.

Formulaire HTML

wampserver

Localisation c:/wamp/www/isn/compte_formulaire.html

<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title>Formulaire d'inscription</title>
    </head>

    <body>
        <h2>Nouveau compte : formulaire d'inscription</h2>
        <form method="post" action="compte_enregistrement.php">
            Utilisateur :<br><br><input type="text" name="User" size="15" maxlength ="20" autofocus required><br><br>
            Mot de passe :<br><br><input type="password" name="Password" size="15" maxlength ="20" required><br><br>
            <input type="submit" value="Envoyer">
        </form>
    </body>
</html>

php Validation et enregistrement du compte avec un script PHP

Localisation c:/wamp/www/isn/compte_enregistrement.php

Commencez par créer le répertoire c:/wamp/www/isn/login
Dans ce répertoire, un fichier qui contient l'ensemble des logins sera automatiquement créé (data_login.txt) :

<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title>Inscription</title>
    </head>

    <body>
        <h2>Création d'un nouveau compte</h2>

<?php

// emplacement du fichier qui contient le tableau des logins
$fichier "c:/wamp/www/isn/login/data_login.txt";

function nouvelleinscription($fichier,$data)
{
    print "<p>Vous êtes maintenant inscrit !</p>";
    // mise à jour du fichier des logins
    // le fichier est créé s'il n'existe pas encore
    $fp fopen($fichier'w');
    fwrite($fpserialize($data)); // sérialisation
    fclose($fp);
}

if (file_exists($fichier))
{
    // le fichier existe
    // ouverture du fichier
    $fp fopen($fichier'r');
    // récupération du tableau des logins
    $data unserialize(fread($fp,filesize($fichier)));  // désérialisation
    fclose($fp);
}

if (isset($_POST["User"]) && isset($_POST["Password"]))
{
    $utilisateur $_POST["User"];
    $motdepasse $_POST["Password"];

    if ($utilisateur == "" || $motdepasse == "")
    {
        print "<p>Erreur : Formulaire incomplet !</p>";
    }

    // test du format des données du formulaire
    elseif (preg_match("#[^a-zA-Z0-9_]#",$utilisateur) || preg_match("#[^a-zA-Z0-9_]#",$motdepasse))
    {
        print "<p>Erreur : les caractères autorisés sont : a-z A-Z 0-9 _</p>";
    }
    else
    {
        // formulaire valide
        if (file_exists($fichier))
        {
            if (array_key_exists($utilisateur,$data))
            {
                print "<p>Erreur : le nom d'utilisateur <strong>$utilisateur</strong> existe déjà !</p>";
            }
            else
            {
                // on ajoute une entrée dans le tableau des logins
                $data[$utilisateur] = $motdepasse;
                nouvelleinscription($fichier,$data);
            }
        }
        else
        {
            // le fichier n'existe pas encore
            // création du tableau
            $data array();
            $data[$utilisateur] = $motdepasse;
            nouvelleinscription($fichier,$data);
        }
    }
}
else
{
    print "<p>Valeurs invalides !</p>";
}

if (file_exists($fichier))
{
    print "<p>Liste des utilisateurs :<br>";

    foreach ($data as $cle => $valeur)
    {
        print $cle."<br>";
    }
    print "</p>";
}

?>
    </body>
</html>

Voir le fichier de données
Voir la page Web

python Validation et enregistrement du compte avec un script CGI-Python

wampserver

Le formulaire HTML

Localisation c:/wamp/www/isn/compte_formulaire2.html

Par rapport à la page compte_formulaire.html, il faut modifier l'adresse URL de destination du formulaire :

<form method="post" action="../cgi-bin/compte_enregistrement.py">

Le script CGI-Python

Localisation c:/wamp/bin/apache/apache2.2.22/cgi-bin/compte_enregistrement.py

Commencez par créer le répertoire c:/wamp/www/isn/login1
Dans ce répertoire, un fichier qui contient l'ensemble des logins sera automatiquement créé (data_login.txt) :

#! c:/Python27/python.exe
# -*- coding: utf-8 -*-
# (C) Fabrice Sincère

import cgi
import cgitb
cgitb.enable()
import re
import os
import pickle

# emplacement du fichier qui contient le dictionnaire des logins
fichier "c:/wamp/www/isn/login1/data_login.txt"

def nouvelleinscription():
    print "<p>Vous êtes maintenant inscrit !</p>"
    # mise à jour du fichier des logins
    # le fichier est créé s'il n'existe pas encore
    fp open(fichier,'w')
    pickle.dump(data,fp)    # sérialisation
    fp.close()

print "Content-Type: text/html\n"

form cgi.FieldStorage()

print """<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title>Inscription</title>
    </head>

    <body>
        <h2>Création d'un nouveau compte</h2>"""

if os.path.exists(fichier) == True:
    # le fichier existe
    # ouverture du fichier
    fp open(fichier,'r')
    # récupération du dictionnaire des logins
    data pickle.load(fp)    # désérialisation
    fp.close()

if form.has_key("User"and form.has_key("Password"):
    # formulaire complet
    utilisateur str(form["User"].value)
    motdepasse str(form["Password"].value)

    # test du format des données du formulaire
    if re.compile("[^a-zA-Z0-9_]").search(utilisateuror re.compile("[^a-zA-Z0-9_]").search(motdepasse):
        print "<p>Erreur : les caractères autorisés sont : a-z A-Z 0-9 _</p>"

    else:
        # formulaire valide
        if os.path.exists(fichier) == True:
            if utilisateur in data.keys():
                print "<p>Erreur : le nom d'utilisateur <strong>" utilisateur "</strong> existe déjà !</p>"
            else:
                # on ajoute une entrée dans le dictionnaire
                data[utilisateur] = motdepasse
                nouvelleinscription()
        else:
            # le fichier n'existe pas encore
            # création du dictionnaire
            data = {utilisateur motdepasse}
            nouvelleinscription()

else:
    print "<p>Erreur : Formulaire incomplet !</p>"

if os.path.exists(fichier) == True:
    print "<p>Liste des utilisateurs :<br>"
    for item in data:
        print item "<br>"
    print "</p>"

print """</body>
</html>"""