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
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.
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>
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($fp, serialize($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
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">
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(utilisateur) or 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>"""
Contenu sous licence CC BY-NC-SA 3.0
Fabrice Sincère ; version 1.5.5
Contacter l'auteur