Tuto+source #1 : espace membre sans mysql

Contenu du snippet

Bienvenue dans ce tutorial de création d'une zone membre sans MySQL.
Je vais vous montrer comment créer une section membre en php sans utiliser les bases de données. Cet exemple est basique et doit être améliorer, notament si vous souhaitez empêcher l'enregistrement intempestif de membres ou le test de mot de passe par des robots, mais il fonctionne bien.
Ce n'est pas non plus l'espace membre le plus sécurisé du monde, notamment si le membre se connecte à partir d'un espace public mais le niveau de sécurité reste tout de même très acceptable.

Théoriquement, le copié-collé des sources marche très bien (tout fonctionne chez moi).
Attention, tous les fichiers doivent être placés dans un même dossier.

Découpage de ce tutorial

Partie #1 : Inscription du membre et configuration du script
Partie #2 : Construire la section réservé au membre
Partie #3 : Options réservées au membre + explications des fonctions PHP utilisés dans ce script

Cette partie est la partie #1.

Source / Exemple :


<?

/*
 *

  • --------------
  • | ACTION 1 | (partie #1)
  • --------------
* *
  • Fichier : .htaccess
*
  • C'EST TRES IMPORTANT.
  • Si vous ne le faîtes pas, n'importe qui aura accès aux pseudo et mots de passe des membres.
  • Si vous le faîtes, le fichier contenant les paramètres des membres sera caché.
*
  • Pour créer un fichier .htaccess sous windows, utilisez le bloc-notes et enregistrez sous
  • .htaccess. Vous ne pouvez pas enregistrer de fichier .htaccess à partir de l'explorateur
  • Windows
*
  • A mettre dans le fichier .htaccess :
<files membres.txt> deny from all </files> *
  • /
?> <? /* *
  • --------------
  • | ACTION 2 | (partie #1)
  • --------------
  • Fichier : configuration.php
  • Fichier qui contient la fonction de cryptage du mot de passe et la valeur de différentes constantes
  • Je vous conseille d'aller faire un tour dans ce fichier de configuration
  • Vous pouvez personnaliser ce fichier en ajoutant des constantes que je n'ai pas choisies comme constantes,
  • par exemple la taille maximale des pseudo et mots de passes, etc.
*
  • A mettre dans le fichier configuration.php : */ ?>
<? // On définit comme constantes le pseudo et le mot de passe envoyés par l'internaute define("PSEUDO",$pseudo); define("CLEF",$clef); /*
  • Modifiez les valeurs des constantes A, B, C et D à votre guise (fortement recommandé)
  • Les nouvelles valeurs doivent obligatoirement être comprises entre 256 et 999
  • Dans le cas contraire et avec un peu de malchance, attendez vous à quelques méchants bugs...
*
  • /
define("A",876); define("B",478); define("C",147); define("D",691); // Fonctions nécessaires à l'exécution du script function cache() { // Tenter de désactiver l'insertion en cache de la page courante // Facultatif mais offre plus de sécurité au niveau de la navigation dans l'espace membre header("Expires: Mon, 1 Jan 2000 00:00:00 GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); } function crypter($clef) { // Crypter le mot de passe for($i = 0; $i < strlen($clef); $i++) { // On applique cet algorithme de cryptage au caractère $i $mot .= (ord($clef[$i])*((A+B+C+D)%(256+$i+1))+($clef[strlen($clef)-$i-1]+$i*C+A)*B)%D; if($i != strlen($clef)-1) { $mot .= "/"; } } return $mot; } function vérification($pseudo,$clef) { // Vérifier si un mot de passe et un pseudo correspondent bien if(!empty($pseudo) && !empty($clef)) { if(file_exists("membres.txt")) { $fichier = fopen("membres.txt","r"); while(!feof($fichier)) { $ligne = fgets($fichier,300); if(trim(substr($ligne,0,20)) == $pseudo && trim(substr($ligne,19,80)) == $clef) { $ok = 1; break; } } } } return $ok; } ?> <? /* *
  • --------------
  • | ACTION 3 | (partie #1)
  • --------------
* *
  • Fichier : inscription.php
*
  • Faîtes un copié-collé de la source.
  • Cette phase permet à l'internaute de s'inscrire à la section membre.
*
  • A mettre dans le fichier inscription.php : */ ?>
<? include("configuration.php"); echo "<html> <head> <title>Section membre / Inscription</title> </head> <body> "; /*
  • On récupère la valeur des variables passées dans le formulaire,
  • tout en s'assurant que ces variables n'ont pas étés passées frauduleusement.
*
  • /
$nom = trim($HTTP_POST_VARS[nom]); $prénom = trim($HTTP_POST_VARS[prénom]); $mail = trim($HTTP_POST_VARS[mail]); $pseudo = trim($HTTP_POST_VARS[pseudo]); $clef = trim($HTTP_POST_VARS[clef]); $validation = $HTTP_POST_VARS[validation]; /*
  • Validation des paramètres passés par le formulaire. On vérifie que tous les
  • champs sont remplis correctement, car l'internaute à de facheuses tendances
  • à raconter n'importe quoi... En cas d'erreur, on lui demande de la corriger.
*
  • /
if($validation) { if(empty($nom)) { $erreur[nom] = 1; } elseif(!ereg("[a-z]",$nom) || strlen($nom) > 50) { $erreur[nom] = 2; unset($nom); } if(empty($prénom)) { $erreur[prénom] = 1; }elseif(!ereg("[a-z]",$prénom) || strlen($prénom) > 50) { $erreur[prénom] = 2; unset($prénom); } if(empty($mail)) { $erreur[mail] = 1; } elseif(!eregi("^(.+)\@[^ ]+\.[a-z]{2,5}$",$mail) || strlen($mail) > 75) { $erreur[mail] = 2; unset($mail); } if(empty($pseudo)) { $erreur[pseudo] = 1; } elseif(strlen($pseudo) > 20) { $erreur[pseudo] = 2; unset($pseudo); } else { // On vérifie que personne n'utilise déjà le pseudo ou l'adresse e-mail if(file_exists("membres.txt")) { $fichier = fopen("membres.txt","r"); while(!feof($fichier)) { $ligne = fgets($fichier,300); if(trim(substr($ligne,0,20)) == $pseudo) { $erreur[pseudo] = 3; unset($pseudo); break; } elseif(trim(substr($ligne,199,50)) == $mail) { $erreur[pseudo] = trim(substr($ligne,0,20)); unset($mail); break; } } } } if(empty($clef)) { $erreur[clef] = 1; } elseif(strlen($clef) > 20 || strlen($clef) < 6) { $erreur[clef] = 2; unset($clef); } } /*
  • S'il n'y a aucune erreur, on enregistre le membre dans le fichier des membres
  • (membres.txt par défaut). Les différents paramètres sont complétés par des espaces
  • jusqu'à leur taille maximale.
*
  • /
if($validation && !$erreur) { if(!file_exists("membres.txt")) { $fichier = fopen("membres.txt","w+"); fclose($fichier); } $paramètres = $pseudo.str_repeat(" ",20-strlen($pseudo)); $mot = crypter($clef); $paramètres .= $mot.str_repeat(" ",80-strlen($mot)); $paramètres .= $nom.str_repeat(" ",50-strlen($nom)); $paramètres .= $prénom.str_repeat(" ",50-strlen($prénom)); $paramètres .= $mail.str_repeat(" ",75-strlen($mail)); $paramètres .= "\n"; $fichier = fopen("membres.txt","a"); fputs($fichier,$paramètres); fclose($fichier); $ok = 0; if(file_exists("membres.txt")) { $fichier = fopen("membres.txt","r"); while(!feof($fichier)) { $ligne = fgets($fichier,20); if(trim($ligne) == $pseudo) { $ok = 1; break; } } } if(!$ok) { $erreur[serveur] = 1; } } /*
  • On demande à l'internaute de remplir un formulaire d'inscription
  • Vous pouvez ajouter, modifier ou supprimer certains champs de ce formulaire
  • à votre guise mais vous devrez effectuer des modifications correspondantes
  • dans certaines parties du script en PHP.
*
  • /
if($validation && !$erreur) { echo "Vous êtes désormais inscrit !<br><br>Votre pseudo est $pseudo..."; } else { echo "Formulaire d'inscription :<br><br>"; // On affiche les éventuelles erreurs détectées if($erreur) { echo "Merci de corriger les erreurs suivantes :<br>"; switch($erreur[nom]) { case 1 : echo "- Vous n'avez pas donné votre nom<br>"; break; case 2 : echo "- Vous avez donné un nom erroné (plus de 50 caractères ou pas de lettres)<br>"; break; } switch($erreur[prénom]) { case 1 : echo "- Vous n'avez pas donné votre prénom<br>"; break; case 2 : echo "- Vous avez donné un prénom erroné (plus de 50 caractères ou pas de lettres)<br>"; break; } switch($erreur[mail]) { case 1 : echo "- Vous n'avez pas donné votre adresse e-mail<br>"; break; case 2 : echo "- Vous avez donné une adresse e-mail erronée (plus de 75 caractères ou syntaxe incorrecte)<br>"; break; } switch($erreur[pseudo]) { case 1 : echo "- Vous n'avez pas donné de pseudo<br>"; break; case 2 : echo "- Vous avez donné un pseudo erroné (plus de 20 caractères)<br>"; break; case 3 : echo "- Ce pseudo est déjà utilisé, choisissez-en un autre<br>"; break; default : if($erreur[pseudo]) { echo "- Vous êtes déjà inscrit (même adresse e-mail) sous le pseudo $erreur[pseudo]<br>"; break; } } switch($erreur[clef]) { case 1 : echo "- Vous n'avez pas donné de mot de passe<br>"; break; case 2 : echo "- Vous avez donné un mot de passe erroné (moins de 6 ou plus de 20 caratères)<br>"; break; } if($erreur[serveur]) { echo "- Erreur interne, veuillez revalider votre inscription<br>"; } } echo "<form method='post'> <input type='hidden' name='validation' value=1> Nom : <input type='text' name='nom' style='border : 1px solid' size=20 value='$nom' maxlength=50><br> Prénom : <input type='text' name='prénom' style='border : 1px solid' size=20 value='$prénom' maxlength=50><br> Adresse e-mail : <input type='text' name='mail' style='border : 1px solid' size=30 value='$mail' maxlength=75><br><br> Choisissez un pseudo : <input type='text' name='pseudo' style='border : 1px solid' size=15 value='$pseudo' maxlength=20><br> Choisissez un mot de passe (6 caractères minimum) : <input type='password' name='clef' style='border : 1px solid' size=15 value='$clef' maxlength=20><br><br> <input type='submit' value='Inscription'>"; } echo " </body> </html>"; ?>

Conclusion :


Voilà, c'est tout pour la partie #1.
Théoriquement, votre membre est inscrit, avec le pseudo et le mot de passe qu'il a choisis.
Dans la partie #2, nous verrons comment il peut accéder à l'espace qui lui est réservé.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.