JeuWeb - Crée ton jeu par navigateur
[POO] Système d'inscription simple - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [POO] Système d'inscription simple (/showthread.php?tid=1862)



[POO] Système d'inscription simple - blackduty - 08-10-2007

Hello,

Comme promis, je donne ce script a la communauté. Il s'agit de mon tout premier script fait en Programmation Orienté Objet. Il comporte sûrement des lacunes, aussi, je suis ouvert a toute suggestion (en particulier pour la sécurité et l'optimisation) par PM ou sur le support, peut m'importe Wink

Archive du système d'inscription

Vous retrouverez dans l'archive tout les fichiers composant le script:
Inscription.php
TraitementInscription.php
Joueur.sql
AnalyseDonnees.class.php
TraitementDonnees.class.php

Ainsi qu'un petit fichier d'aide (et d'améliorations possibles du script) qui je l'espère, aidera quelqu'un...

Le script nécessite:
Un hébergement (local ou pas) avec une base de donnée mysql & php5

Le code est commenté et le nom des attributs & méthodes assez explicite (enfin, je pense).

Je remercie l'aide de la communauté pour m'avoir permis de fignoler ce script et de m'avoir aider a comprendre la POO. Smile

*************************************************
Je recopie ici les fichiers au cas où un jour, l'archive ne marche plus.[/quote][/php]

Joueur.sql
Code PHP :
<?php 
- phpMyAdmin SQL Dump
-- version 2.10.1
-- http://www.phpmyadmin.net
--
--
Serveur: localhost
-- Généré le : Lun 08 Octobre 2007 à 00:12
-- Version du serveur: 5.0.41
-- Version de PHP: 5.2.3

SET SQL_MODE
="NO_AUTO_VALUE_ON_ZERO";

--
--
Base de données: `ma_base`
--

-- --------------------------------------------------------

--
--
Structure de la table `joueur`
--

CREATE TABLE IF NOT EXISTS `joueur` (
`
id` int(11) NOT NULL auto_increment,
`
compte` varchar(20) NOT NULL default '',
`
mail` varchar(30) NOT NULL default '',
`
mot_de_passe_crypte` varchar(40) NOT NULL,
`
camp` varchar(15) NOT NULL,
`
nom_chef` varchar(45) NOT NULL,
`
compagnie` varchar(50) NOT NULL,
`
statut` varchar(5) NOT NULL default 'user',
PRIMARY KEY (`id`)
)
ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
--
Contenu de la table `joueur`
--

Inscription.php
Code PHP :
<?php 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
>
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">

<
head>
<
title>Mon Inscription</title>
<
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<
link rel="stylesheet" media="screen" type="text/css" title="design par defaut" href="style.css" />
</
head>

<
body>
<
h1>Bienvenue !</h1>

<
form method="post" action="TraitementInscription.php">

<
fieldset>
<
legend>Vos coordonnées</legend>
<
p>
<
label>Nom de compte <input type="text" name="compte" size="20" maxlength="20" tabindex="10" /></label>
<
br />
<
label>Adresse email <input type="text" name="mail" size="30" maxlength="25" tabindex="20" /></label>
<
br />
<
label>Mot de passe <input type="password" name="mot_de_passe" size="15" maxlength="15" tabindex="30" /></label>
</
p>
</
fieldset>
<
fieldset>
<
legend>Votre personnage</legend>
<
p>
Veuillez choisir votre Camp :<br />
<
label><input type="radio" name="camp" value="camp1" tabindex="40" />Les bleus</label><br />
<
label><input type="radio" name="camp" value="camp2" tabindex="50" />Les rouges</label><br />
</
p>

<
p><label>Nom de votre personnage <input type="text" name="nom_chef" size="50" maxlength="45" tabindex="80"/></label>
<
br />
<
label>Nom de votre compagnie <input type="text" name="compagnie" size="70" maxlength="50" tabindex="90" /></label>
</
p>
</
fieldset>
<
p>
<
input type="submit" value="Valider" />
</
p>
</
form>
</
body>

</
html>

TraitementInscription.php
Code PHP :
<?php

// on inclut les fichiers de nos classes pour pouvoir les utiliser.
include 'class/AnalyseDonnees.class.php';
include
'class/TraitementDonnees.class.php';

// On donne les identifiants pour une connexion a la base de donnée. Pensez a les adapter à votre serveur.
$host = 'localhost';
$user = 'root';
$password = '';
$database = 'ma_base';

$VerifInscriptionObj = new AnalyseDonnees($host, $user, $password, $database); // on construit l'objet pour la vérification des champs du formulaire.


// On utilise nos différentes méthodes contenu dans la classe VerifInscription pour vérifier le remplissage du formulaire.

$VerifInscriptionObj->VerificationRemplissageCompte($_POST['compte']);
$VerifInscriptionObj->VerificationRemplissageMail($_POST['mail']);
$VerifInscriptionObj->VerificationRemplissageMotdepasse($_POST['mot_de_passe']);
$VerifInscriptionObj->VerificationRemplissageCamp($_POST['camp']);
$VerifInscriptionObj->VerificationRemplissageNomChef($_POST['nom_chef']);
$VerifInscriptionObj->VerificationRemplissageCompagnie($_POST['compagnie']);


$EnvoiInscriptionObj = new TraitementDonnees($host, $user, $password, $database); // on construit l'objet pour l'envoi des données du formulaire.

//Cryptage du mot de passe a l'aide de la méthode de cryptage
$EnvoiInscriptionObj->CryptagePass($_POST['mot_de_passe']);
// On envoie les données dans la BDD à l'aide de la méthode d'envoi de donnée
$EnvoiInscriptionObj->EnvoiDonneeVerifie($_POST['compte'], $_POST['mail'], $EnvoiInscriptionObj->mot_de_passe_crypte, $_POST['camp'], $_POST['nom_chef'],
$_POST['compagnie']);

header("location: ../index.php"); // on renvoit l'utilisateur vers la page d'accueil (index.php, ici), une fois que l'inscription a été traitée.
?>

Ces deux fichiers sont a mettre dans un dossier 'Class'

AnalyseDonnees.class.php
Code PHP :
<?php
// Il s'agit d'une classe d'analyse des données.
class AnalyseDonnees
{
// Déclaration des attributs
public $compte;
public
$mail;
public
$mot_de_passe;
public
$camp;
public
$nom_chef;
public
$compagnie;
private
$link;

//Voici les méthodes
public function __construct($host, $user, $password, $database) // permet la connexion avec la base de donnée
{
// on va chercher les identifiants de connexion ou sinon on affiche un message d'erreur.
$this->link = mysql_connect($host, $user, $password) or die('impossible de se connecter a la base de donnée locale');
// On selectionne la base de donnée ou sinon on affiche un message d'erreur.
mysql_select_db($database, $this->link) or die('La base de donnée est introuvable');
}

public function
VerificationRemplissageCompte($compte) // Vérifie le remplissage du champ de formulaire: Compte
{
if(empty(
$compte)) // Si la variable est vide
{
echo
'Vous n\'avez pas renseigner votre nom de compte !<br />'; // On ecrit ce message a l'utilisateur
echo '<a href="inscription.php">Retour au formulaire d\'inscription</a>'; // on lui met un lien pour retourner au formulaire.
exit();
}
}

public function
VerificationRemplissageMail($mail) // Vérifie le remplissage du champ de formulaire: Mail. Ainsi que la validité de l'email donné.
{
if (isset(
$mail))
{
if (!
preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $mail))
{
echo
'L\'adresse email n\'est pas valide, veuillez recommencer !<br />';
echo
'<a href="inscription.php">Retour au formulaire d\'inscription</a>';
exit();
}
}
else
{
echo
'Vous n\'avez pas renseigner votre email !<br />';
echo
'<a href="inscription.php">Retour au formulaire d\'inscription</a>';
exit();
}
}

public function
VerificationRemplissageMotdepasse($mot_de_passe) // Vérifie le remplissage du champ de formulaire: Mot de Passe.
{
if(empty(
$mot_de_passe))
{
echo
'Vous n\'avez pas renseigner de mot de passe !<br />';
echo
'<a href="inscription.php">Retour au formulaire d\'inscription</a>';
exit();
}
}

public function
VerificationRemplissageCamp($camp) // Vérifie qu'un camp a bien été choisi.
{
if(empty(
$camp))
{
echo
'Vous n\'avez pas choisi votre camp !<br />';
echo
'<a href="inscription.php">Retour au formulaire d\'inscription</a>';
exit();
}
}

public function
VerificationRemplissageNomChef($nom_chef) // Vérifie que le champ de formulaire: Nom_Chef a bien été rempli par l'utilisateur.
{
if(empty(
$nom_chef))
{
echo
'Vous n\'avez pas renseigner le nom de votre personnage !<br />';
echo
'<a href="inscription.php">Retour au formulaire d\'inscription</a>';
exit();
}
}

public function
VerificationRemplissageCompagnie($compagnie) // Vérifie que le champ de formulaire: Compagnie a bien été rempli par l'utilisateur.
{
if(empty(
$compagnie))
{
echo
'Vous n\'avez pas renseigner le nom de votre compagnie !<br />';
echo
'<a href="inscription.php">Retour au formulaire d\'inscription</a>';
exit();
}
}
}
?>

TraitementDonnees.class.php
Code PHP :
<?php
// Il s'agit d'une classe de traitement des données.
class TraitementDonnees
{

//Déclaration des attributs
public $compte;
public
$mail;
public
$mot_de_passe;
public
$mot_de_passe_crypte;
public
$camp;
public
$nom_chef;
public
$compagnie;
public
$cle_cryptage = 'po1kuFz23ukDm4l'; // Pensez a modifier la clé de cryptage :-)
private $link;

//Voici les méthodes
public function __construct($host, $user, $password, $database) // Permet la connexion a la base de donnée.
{
// on va chercher les identifiants de connexion ou sinon on affiche un message d'erreur.
$this->link = mysql_connect($host, $user, $password) or die('impossible de se connecter a la base de donnée locale');
// On selectionne la base de donnée ou sinon on affiche un message d'erreur.
mysql_select_db($database, $this->link) or die('La base de donnée est introuvable');
}

public function
CryptagePass($mot_de_passe) // permet de crypté le résultat du champ de formulaire "mot de passe" a l'aide de la clé de cryptage défini plus haut.
{
$this->mot_de_passe_crypte = crypt($mot_de_passe, $cle_cryptage);
}


public function
EnvoiDonneeVerifie ($compte, $mail, $mot_de_passe_crypte, $camp, $nom_chef, $compagnie) // Permet d'insérer dans la base de donnée les données récupérés dans le formulaire d'inscription.
{
$this->compte = htmlentities($compte, ENT_QUOTES);
$this->mail = htmlentities($mail, ENT_QUOTES);
$this->mot_de_passe_crypte = htmlentities($mot_de_passe_crypte, ENT_QUOTES);
$this->camp = htmlentities($camp, ENT_QUOTES);
$this->nom_chef = htmlentities($nom_chef, ENT_QUOTES);
$this->compagnie = htmlentities($compagnie, ENT_QUOTES);

$query = mysql_query("INSERT INTO `joueur` (`id`, `compte` , `mail` , `mot_de_passe_crypte` , `camp` , `nom_chef`, `compagnie`, `statut` )
VALUES ('', '"
. $this->compte . "', '" . $this->mail . "', '" . $this->mot_de_passe_crypte . "', '" . $this->camp . "', '" . $this->nom_chef . "',
'"
. $this->compagnie . "', 'user' )") or die('impossible d\enregistrer les données dans la table'); // On insère les données dans la table 'joueur' sinon on affiche un message d'erreur.
}
}
?>

Enfin le ficher d'aide:
Citation :Bonjour,

Avant toute chose, pour pouvoir utiliser ce script, il vous faudra avoir un hebergement supportant le php5 et ayant une base de donnée.
Il vous faut aussi une page Index.php (pour le renvoi a la fin de l'inscription).
Sans ça, vous ne pourrez pas faire marcher le script.

J'ai fait en sorte de donner des noms assez clair aux methodes et attributs pour faciliter la comprehension du script.
Le code est commenté.

Contenu des différents fichiers:

Joueur.sql

Il s'agit du fichier comportant la table joueur.
Vous en aurez besoin pour pouvoir insérer les données que vous avez obtenu dans le formulaire.

Pour installer cette table dans votre base de donnée:

-Lancer phpMyAdmin
-Selectionnez votre base de donnée
-Cliquez sur importer
-Emplacement du fichier (cliquez sur parcourir puis selectionnez le fichier joueur.sql de l'archive)
-Executez

Vous devez, maintenant, avoir dans votre base de donnée une table qui se nomme 'joueur'.
Si c'est bien le cas, vous pouvez supprimer ce fichier, vous n'en aurez plus besoin.

inscription.php

Il s'agit du fichier comportant le formulaire d'inscription. Il ne devrait y avoir logiquement, aucune difficulté de compréhension.
Vous pouvez bien évidement rajouter ou retirer des champs. Si vous faites ceci, pensez a adapter les différents fichiers comportement l'archive.

L'utilisateur devra être envoyé sur cette page pour pouvoir s'inscrire.

AnalyseDonnees.class.php

Il s'agit du fichier comportant la classe d'analyse du formulaire.
Vous trouverez ici, les fonctions vérifiant le remplissage des champs du formulaire et la validité de l'eMail.

Si vous rajoutez des champs au formulaire, pensez a rajouter des methodes de vérifications (ce n'est pas obligatoire mais c'est mieux).

TraitementDonnees.class.php

Il s'agit du fichier comportant la classe de traitement du formulaire. Vous y retrouverez la fonction pour crypter le mot de passe et la fonction permettant l'intégration des données dans la table.
Vous y retrouverez aussi, la clé de cryptage. Pensez a la modifié (ecrivez ce que vous voulez a la place de 'po1kuFz23ukDm4l'.
Essayer cependant de garder, des lettres, chiffres, majuscules et minuscules.

Si vous rajoutez des champs au formulaire, pensez a adapter la methode 'EnvoiDonneeVerifie' (obligatoire).

TraitementInscription.php

Il s'agit de la page traitant le formulaire.
Pensez absolument a modifier les informations de connexion suivant votre configuration.

Si vous avez rajouter des champs, il faut modifier aussi cette page (Envoi de donnée est a changé obligatoirement. Si vous avez rajouté des methodes de verification, il faudra les utiliser ici).


A propos de la connexion après l'inscription

Vous allez avoir une petite difficulté.
Vous ne pourrez pas vous contenter de faire un formulaire avec en traitement une simple comparaison entre le mot de passe entré par l'utilisateur et celui que vous avez dans la base de donnée (BDD).
En effet, si vous avez bien suivi le script, le mot de passe est crypté puis insérer dans la BDD.
Par conséquent, le mot de passe entré par l'utilisateur ne peut pas être le même que celui de la BDD.
Il vous faut donc crypter aussi, le mot de passe entré par l'utilisateur. Ainsi, vous pourrez comparer les deux mots de passe et permettre (ou pas) la connexion de l'utilisateur.

Les améliorations possibles (liste non exhaustive)

Rajouter une confirmation par email.
Rajouter/Enlever des champs au formulaire
Vérifier que le nom de Compte/Personnage/Mail/Compagnie n'est pas déjà utilisé par un autre utilisateur.
Utiliser une classe sql pour se connecter a la Base de donnée et insérer/modifier etc... des données.
Si l'utilisateur oublie de renseigner un champ, renvoyer le formulaire pré-remplie avec ce qu'il a déjà donné comme information.
...



RE: [POO] Système d'inscription simple - orditeck - 08-10-2007

L'aide pour ce script ce trouve à cette adresse :
http://www.jeuweb.org/board/showthread.php?tid=2601