dans ce didacticiel je vais vous accompagné pas a pas sur la création d'un espace membre simple et sans fioriture .
On commence ?Allez on-y vas .
L'inscription c'est utile
Les pré requis
La base de données et les tables
Pour commencé on va faire la requette SQL qui nous servira a crée nos tables .
Je suis sur que 90% des personnes ici utilise l'outil graphique (phpmyadmin) donc je vais vous donnez la requette complète .
- Code: Tout sélectionner
CREATE TABLE IF NOT EXISTS `membres` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`utilisateur` varchar(255) NOT NULL,
`mot_de_passe` varchar(255) NOT NULL,
`mail` text NOT NULL,
`rang` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Étudions ensemble un peut cette table.
Elle contient 5 champs
- id
- utilisateur
- mot_de_passe
- mail
- rang
Pour commencé le champs id qui est le champs par excellence. En auto-incrémente , ce qu'il veut dire qu'il change de valeur a chaque insertion ( +1,+1,+1,+1,+1,etc etc ...)
Ensuite nous avons utilisateur qui stockera le nom d'utilisateur ou pseudo .
Ensuite mot_de_passe, vous devez surement vous demandé a quoi sert ce champ
a non vous savez
.Ensuite mail aussi compliqué que le mot_de_passe .
Et enfin rang, celui-ci stocke un int qui pouras avoir plusieurs valeur comme :
0=membre , 1=modérateur , 2=administrateur .
C'est vous qui décidez .
Le formulaire
Après cette légère étude de la table nous allons commencé ....... le html
et oui pour s'inscrire il faut un formulaire .J'ai l'habitude d'aligner mes formulaires pour une meilleur présentation donc je vais partir du principe que vous aussi .
Pour les aligner certain utilise des tableaux(beurk) mais c'est pas lisible du tout et puis les personnes qui utilise encore les tableaux pour la mises en forme de leurs page html sont vraiment de la vielle époque .
Pour la petite info a l'époque ou le css n'existai pas la seul façon de faire un peut de mise en forme étais d'utiliser les tableaux mais depuis l'aparition du css on n'est plus obligé de subir ceci .
Pourquoi je vous dis ça ?
Ben regardé j'ai réintégrés un design trouvé sur le net en tableaux
- Code: Tout sélectionner
<html>
<body>
<table width=1000 height=600 border=0 cellpadding=0 cellspacing=0>
<tr height=200>
<td width=20><img src="images\design01s1s.jpg"></td>
<td width=20><img src="images\design02s1s.jpg"></td>
<td width=20><img src="images\design03s1s.jpg"></td>
<td width=20><img src="images\design04s1s.jpg"></td>
<td width=20><img src="images\design05s1s.jpg"></td>
<td width=20><img src="images\design06s1s.jpg"></td>
<td width=20><img src="images\design07s1s.jpg"></td>
<td width=20><img src="images\design08s1s.jpg"></td>
<td width=20><img src="images\design09s1s.jpg"></td>
<td width=20><img src="images\design10s1s.jpg"></td>
<td width=20><img src="images\design11s1s.jpg"></td>
<td width=20><img src="images\design12s1s.jpg"></td>
<td width=20><img src="images\design13s1s.jpg"></td>
<td width=20><img src="images\design14s1s.jpg"></td>
<td width=20><img src="images\design15s1s.jpg"></td>
<td width=20><img src="images\design16s1s.jpg"></td>
<td width=20><img src="images\design17s1s.jpg"></td>
<td width=20><img src="images\design18s1s.jpg"></td>
<td width=20><img src="images\design19s1s.jpg"></td>
<td width=20><img src="images\design20s1s.jpg"></td>
<td width=20><img src="images\design21s1s.jpg"></td>
<td width=20><img src="images\design22s1s.jpg"></td>
<td width=20><img src="images\design23s1s.jpg"></td>
<td width=20><img src="images\design24s1s.jpg"></td>
<td width=20><img src="images\design25s1s.jpg"></td>
<td width=20><img src="images\design26s1s.jpg"></td>
<td width=20><img src="images\design27s1s.jpg"></td>
<td width=20><img src="images\design28s1s.jpg"></td>
<td width=20><img src="images\design29s1s.jpg"></td>
<td width=20><img src="images\design30s1s.jpg"></td>
<td width=20><img src="images\design31s1s.jpg"></td>
<td width=20><img src="images\design32s1s.jpg"></td>
<td width=20><img src="images\design33s1s.jpg"></td>
<td width=20><img src="images\design34s1s.jpg"></td>
<td width=20><img src="images\design35s1s.jpg"></td>
<td width=20><img src="images\design36s1s.jpg"></td>
<td width=20><img src="images\design37s1s.jpg"></td>
<td width=20><img src="images\design38s1s.jpg"></td>
<td width=20><img src="images\design39s1s.jpg"></td>
<td width=20><img src="images\design40s1s.jpg"></td>
<td width=20><img src="images\design41s1s.jpg"></td>
<td width=20><img src="images\design42s1s.jpg"></td>
<td width=20><img src="images\design43s1s.jpg"></td>
<td width=20><img src="images\design44s1s.jpg"></td>
<td width=20><img src="images\design45s1s.jpg"></td>
<td width=20><img src="images\design46s1s.jpg"></td>
<td width=20><img src="images\design47s1s.jpg"></td>
<td width=20><img src="images\design48s1s.jpg"></td>
<td width=20><img src="images\design49s1s.jpg"></td>
<td width=20><img src="images\design50s1s.jpg"></td>
</tr>
<tr height=200>
<td width=20><img src="images\design01s2s.jpg"></td>
<td width=20><img src="images\design02s2s.jpg"></td>
<td width=20><img src="images\design03s2s.jpg"></td>
<td width=20><img src="images\design04s2s.jpg"></td>
<td width=20><img src="images\design05s2s.jpg"></td>
<td width=20><img src="images\design06s2s.jpg"></td>
<td width=20><img src="images\design07s2s.jpg"></td>
<td width=20><img src="images\design08s2s.jpg"></td>
<td width=20><img src="images\design09s2s.jpg"></td>
<td width=20><img src="images\design10s2s.jpg"></td>
<td width=20><img src="images\design11s2s.jpg"></td>
<td width=20><img src="images\design12s2s.jpg"></td>
<td width=20><img src="images\design13s2s.jpg"></td>
<td width=20><img src="images\design14s2s.jpg"></td>
<td width=20><img src="images\design15s2s.jpg"></td>
<td width=20><img src="images\design16s2s.jpg"></td>
<td width=20><img src="images\design17s2s.jpg"></td>
<td width=20><img src="images\design18s2s.jpg"></td>
<td width=20><img src="images\design19s2s.jpg"></td>
<td width=20><img src="images\design20s2s.jpg"></td>
<td width=20><img src="images\design21s2s.jpg"></td>
<td width=20><img src="images\design22s2s.jpg"></td>
<td width=20><img src="images\design23s2s.jpg"></td>
<td width=20><img src="images\design24s2s.jpg"></td>
<td width=20><img src="images\design25s2s.jpg"></td>
<td width=20><img src="images\design26s2s.jpg"></td>
<td width=20><img src="images\design27s2s.jpg"></td>
<td width=20><img src="images\design28s2s.jpg"></td>
<td width=20><img src="images\design29s2s.jpg"></td>
<td width=20><img src="images\design30s2s.jpg"></td>
<td width=20><img src="images\design31s2s.jpg"></td>
<td width=20><img src="images\design32s2s.jpg"></td>
<td width=20><img src="images\design33s2s.jpg"></td>
<td width=20><img src="images\design34s2s.jpg"></td>
<td width=20><img src="images\design35s2s.jpg"></td>
<td width=20><img src="images\design36s2s.jpg"></td>
<td width=20><img src="images\design37s2s.jpg"></td>
<td width=20><img src="images\design38s2s.jpg"></td>
<td width=20><img src="images\design39s2s.jpg"></td>
<td width=20><img src="images\design40s2s.jpg"></td>
<td width=20><img src="images\design41s2s.jpg"></td>
<td width=20><img src="images\design42s2s.jpg"></td>
<td width=20><img src="images\design43s2s.jpg"></td>
<td width=20><img src="images\design44s2s.jpg"></td>
<td width=20><img src="images\design45s2s.jpg"></td>
<td width=20><img src="images\design46s2s.jpg"></td>
<td width=20><img src="images\design47s2s.jpg"></td>
<td width=20><img src="images\design48s2s.jpg"></td>
<td width=20><img src="images\design49s2s.jpg"></td>
<td width=20><img src="images\design50s2s.jpg"></td>
</tr>
<tr height=200>
<td width=20><img src="images\design01s3s.jpg"></td>
<td width=20><img src="images\design02s3s.jpg"></td>
<td width=20><img src="images\design03s3s.jpg"></td>
<td width=20><img src="images\design04s3s.jpg"></td>
<td width=20><img src="images\design05s3s.jpg"></td>
<td width=20><img src="images\design06s3s.jpg"></td>
<td width=20><img src="images\design07s3s.jpg"></td>
<td width=20><img src="images\design08s3s.jpg"></td>
<td width=20><img src="images\design09s3s.jpg"></td>
<td width=20><img src="images\design10s3s.jpg"></td>
<td width=20><img src="images\design11s3s.jpg"></td>
<td width=20><img src="images\design12s3s.jpg"></td>
<td width=20><img src="images\design13s3s.jpg"></td>
<td width=20><img src="images\design14s3s.jpg"></td>
<td width=20><img src="images\design15s3s.jpg"></td>
<td width=20><img src="images\design16s3s.jpg"></td>
<td width=20><img src="images\design17s3s.jpg"></td>
<td width=20><img src="images\design18s3s.jpg"></td>
<td width=20><img src="images\design19s3s.jpg"></td>
<td width=20><img src="images\design20s3s.jpg"></td>
<td width=20><img src="images\design21s3s.jpg"></td>
<td width=20><img src="images\design22s3s.jpg"></td>
<td width=20><img src="images\design23s3s.jpg"></td>
<td width=20><img src="images\design24s3s.jpg"></td>
<td width=20><img src="images\design25s3s.jpg"></td>
<td width=20><img src="images\design26s3s.jpg"></td>
<td width=20><img src="images\design27s3s.jpg"></td>
<td width=20><img src="images\design28s3s.jpg"></td>
<td width=20><img src="images\design29s3s.jpg"></td>
<td width=20><img src="images\design30s3s.jpg"></td>
<td width=20><img src="images\design31s3s.jpg"></td>
<td width=20><img src="images\design32s3s.jpg"></td>
<td width=20><img src="images\design33s3s.jpg"></td>
<td width=20><img src="images\design34s3s.jpg"></td>
<td width=20><img src="images\design35s3s.jpg"></td>
<td width=20><img src="images\design36s3s.jpg"></td>
<td width=20><img src="images\design37s3s.jpg"></td>
<td width=20><img src="images\design38s3s.jpg"></td>
<td width=20><img src="images\design39s3s.jpg"></td>
<td width=20><img src="images\design40s3s.jpg"></td>
<td width=20><img src="images\design41s3s.jpg"></td>
<td width=20><img src="images\design42s3s.jpg"></td>
<td width=20><img src="images\design43s3s.jpg"></td>
<td width=20><img src="images\design44s3s.jpg"></td>
<td width=20><img src="images\design45s3s.jpg"></td>
<td width=20><img src="images\design46s3s.jpg"></td>
<td width=20><img src="images\design47s3s.jpg"></td>
<td width=20><img src="images\design48s3s.jpg"></td>
<td width=20><img src="images\design49s3s.jpg"></td>
<td width=20><img src="images\design50s3s.jpg"></td>
</tr>
</table>
</body>
</html>
Avoué que ce n'est pas super lisible, bon j'avoue que j'abuse un peut mais c'est pour que vous compreniez bien .
Alors revenons a nos moutons .
Voici un formulaire simple, je vous fournis le code directement car rien de bien compliqué ici
- Code: Tout sélectionner
<form action="traitement-inscription.php" method="post">
<label for="utilisateur">Utilisateur:</label><input type="text" id="utilisateur" name="pseudo" /><br /><br/>
<label for="motdepasse">Mot de passe:</label><input type="password" id="motdepasse" name="mdp" /><br />
<label for="motdepasse">Mot de passe(confirmation):</label><input type="password" id="motdepasse" name="mdp2" /><br /><br/>
<label for="mail">Adresse e-mail:</label><input name="mail" type="text" id="mail" /><br />
<label for="mail">Adresse e-mail(confirmation):</label><input name="mail2" type="text" id="mail" /><br /><br/>
<input style="margin-left: 200px;"type="submit"/>
</form>
Alors regarder bien l'attribue name c'est le nom que porterons les variables dans notre page traitement-inscription.php
Un peut de mise en page
Noté que nous allons travaillé sur plusieurs page pour plus de simplicité .
Ne vous occupé pas de la balise label elle nous sert a aligné nos forlulaires, mais avant directions la case css, passer pas par la case php ne touché pas votre clavier
Et voici le code css a copier coller sans rien comprendre ^^
- Code: Tout sélectionner
label {
display:block;
width:200px;
float:left;
}
Voila voila on va pouvoir attaqué le php
Ce didacticiel n'est bien sûr pas fini, je l'éditerer demain dans la journée
Chose promise chose du je revient pour faire la suite de ce didactitiel .
Coté php
Alors on avais déjà fait le formulaire d'inscription et on avais également fait la mise en page du formulaire (aligner les zone de saisies et les textes.
Passons donc maintenant au php pur et dur.
Les vérifications de routine
Alors on va utilisé une page que j'ai décidé d'appelé traitement-inscription.php
donc la premiére chose a faire c'est de vérifié que le formulaire a bien êtes envoyé grace a la fonction isset .
voici mon code :
- Code: Tout sélectionner
if(isset($_POST['pseudo'],$_POST['mdp'],$_POST['mdp2'],$_POST['mail'],$_POST['mail2'])) // Si les variables existe.
{
// instructions a venirÂ
}Â
elseÂ
{
     echo'Une erreur c\'est produite';
}Â
Toujours pensée a prévoir qu'un visiteur arrive sur cette page sans être passé par le formulaire .
Bon la rien de bien compliqué mais je pense que certaine personne ont du mal avec mon if ,
en faite la façon dont je l'est écrit revient au même qui si j'écrivais
- Code: Tout sélectionner
if(isset($_POST['pseudo']) && isset($_POST['mdp']) && isset($_POST['mdp2']) // etc etc etc...     Â
Bon donc nos variables existe bien maintenant il faut testé si elle sont pleine et si toutes on êtes remplie.
On pourrait faire ça simplement avec quelque chose dans ce style
- Code: Tout sélectionner
if($_POST['pseudo'] != NULL AND $_POST....// suite des variables
{
//instructions
}
else
{
echo'Erreur dans la saisie du formulaire';
}Â
Mais ça ne laisse pas beaucoup d'info au visiteur pour comprendre son erreur .
On va donc faire une gestion des erreurs assez complète .
Mais on va quand même se servir du else du dessus au cas ou une des variables soit vide .
Car si on ne remplie pas tout le formulaire c'est bien que on la fait exprès
.La sécurité avant tout
Bon par suite on va faire quoi ?
A oui on va commencé par la sécurité
donc on va se connecté a la bdd et s'occupé de la sécurité c'est a dire désactivé l'interprétation d'un quelconque langage saisie grave a htmlspecialchars et mysql_real_escape_string
Voici donc ce que j'obtient
- Code: Tout sélectionner
       Â
mysql_connect('hote','utilisateur','mot de passe');
mysql_select_db('data_base');
       Â
        /* Pour la securité ont empécheÂ
           l'insertion de code dans la baseÂ
            de données .Â
        */
        $utilisateur = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
        $mail = mysql_real_escape_string(htmlspecialchars($_POST['mail']));
        $mail2 = mysql_real_escape_string(htmlspecialchars($_POST['mail2']));Â
Voila qui rend totalement inoffensif nos variables on va pouvoir donc travaillé dessus .
Les vérifications le retour
Je pense que de vérifié maintenant si les deux adresse mail corresponde et bien sur vérifié que le format et valide .
Pour cette ligne je vous demande pas de comprendre mais de simplement la copier coller car les regexs sont quelque chose d'assez complexe .
Voila ce que j'obtient :
- Code: Tout sélectionner
if($mail == $mail2) // Verification que les deux mails sont identique .
        {
            if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail']))//verification que l'e-mail a un format valide .
            {Â
Vous remarquerez que je ne mes pas de else tout simplement parceque je les mes toujours quand j'ai fini de crée ma page, c'est ma façon de faire et je vous l'impose
.Bon alors 1er ligne on vérifie que la variable mail et = a mail2 si oui on continue sinon (cd voir plus bas ) .
Ensuite pourquoi pas faire de même pour la variable mot de passe
- Code: Tout sélectionner
if($_POST['mdp'] == $_POST['mdp2'])//verification si les deux mot de passe sont identique .
                {Â
et voila maintenant on c'est que les adresses mail et les mot de passe entrée sont correct .
Pas de commentaire ici car c'est pareil que haut dessus quoi que je voit déjà vos tête en train de se dire il est fou il a pas sécurisé le mot de passe . Mais si mais si on a le sécurisé mieux que ce que vous pensez on le verra plus bas .
Alors maintenant sa serais bête d'avoir 3 membres qui porte le même pseudo vous trouvez pas ?
Alors ont fait comment ....... et bien oui on selectionne dans la base de données tout les champs et on vérifie grace a un array que la variable utilisateur n'existe pas déjà .
hey hey j'ai une idée, on va faire pareil pour la variable mail comme ça pas de double compte (enfin pas avec le même mail).
Voila ce que j'obtient
- Code: Tout sélectionner
$reponse = mysql_query('SELECT * FROM membres');
                    $retour = mysql_fetch_array($reponse); // Array qui sert a vérifié si le nom d'utilisateur n'existe pas .
                   Â
                    if($utilisateur != $retour['utilisateur'])// Vérification que le nom d'utilisateur n'est pas déjà  present dans la base de données .
                    {
                        if($mail != $retour['mail'])// Idem pour l'e-mail on vérifie qu'il n'existe pas encore dans la bases de données .
                        {Â
et voila le tour est joué a partir de la on c'est que le pseudo et l'email est unique .
On crypte ou pas
Alors maintenant étape finale l'insertion dans la base de données et le cryptage du mot de passe
Hein quoi comment tu dit quoi toi .
Et oui on as pas sécurisé le mot de passe tout simplement parce que on va le crypté . Grâce a la fonction sha1();
qui est en faite une méthode de cryptage comme beaucoup d'autre .
Alors voici mon code
- Code: Tout sélectionner
$mdp = sha1($_POST['mdp']);
               Â
                            mysql_query("INSERT INTO membres VALUES('','".$utilisateur."','".$mdp."','".$mail."','0')") or die (mysql_error());
                           Â
                            echo' <h4>Inscription réussi</h4>
                            <p>L\'inscription c\'est éffectué avec succée, vous pouvez des a présent vousÂ
                                <a href="connexion.php">connecter</a></p>';
                        }Â
et voila maintenant un membre peut s'inscrire n'est il pas super sa .
Les visiteurs sont étranges
A oui j'oubliai la gestion des erreurs , bon je vous balance le code comme ça parce que il est très simple .
- Code: Tout sélectionner
/* Gestion des erreurs en rapportÂ
                           avec toutes les vérifications
                           faite ci dessus .
                        */
                        else
                        {
                            echo' <h4>Erreur dans l\'inscription</h4>
                            <p>Une erreur c\'est produite, un membre utilise déjà  cette adresse e-mail</p>';
                        }
                    }
                    else
                    {
                        echo'<h4>Erreur dans l\'inscription</h4
                        <p>Une erreur c\'est produite, un membre utilise déjà  ce nom d\'utilisateur</p>';
                    }
               Â
                }
                else
                {
                    echo'<h4>Erreur dans l\'inscription</h4
                    <p>Une erreur c\'est produite, les deux mots de passe saisie ne corresponde pas.</p>';
                }
            }
            else
            {
                echo'<h4>Erreur dans l\'inscription</h4
                <p>Le format de votre adresse e-mail est invalide</p>';
            }
        }
        else
        {
            echo'<h4>Erreur dans l\'inscription</h4
            <p>Une erreur c\'est produite, les adresses e-mail que vous avez saisie ne corresponde pas.</p>';
        }
    }
    else
    {
        echo'<h4>Erreur dans l\'inscription</h4
        <p>Une erreur c\'est produite, vous n\'avez saisie tout les champs.</p>';
    }
}Â
Voila voila pour les erreur .
Ce didacticiel n'est pas fini, dans la soirée je rajouterais la connexion et la connexion automatique a ce soir
De retour pour la connexion.
La connexion avec un X
Dans cette partie nous allons nous intéressais a la connexion, et même la connexion automatique .
Pour cette partie je recommande chaudement d'aller revoir un didacticiel sur les variables $_SESSION et $_COOKIE car je vous rapelle que j'avais promis de faire la connexion automatique, roooooo la class je c'est
.Le formulaire
C'est le retour du xhtml est il est pas content
Et oui il nous faut toujours un formulaire pour se connecté mais avec une nouveauté, une case a cocher pour la connexion automatique .
Bon je vous aide pas pour ça on la fait déjà plus haut donc voici ce que vous devriez obtenir :
- Code: Tout sélectionner
<form action="traitement-connexion.php" method="post">
<label for="utilisateur">Utilisateur:</label><input type="text" id="utilisateur" name="pseudo" /><br /><br/>
<label for="motdepasse">Mot de passe:</label><input type="password" id="motdepasse" name="mdp" /><br /><br />
<label for="connexion_auto">Connexion automatique:</label><input type="checkbox" name="connexion_auto" />
<input style="margin-left: 200px;"type="submit"/>
</form>
Nous voila avec un formulaire qui nous iras parfaitement .
Coté php bis
De retour dans le php nous allons suivre le même plan que ci dessus sauf que on va sauté quelque étape comme la sécurité etc etc.
Elle existe ou pas
Et oui nous allons vérifié que nos variables mdp et pseudo existe avec toujours un simple isset, et aussi vérifié que nos variable mdp et pseudo sont pleine.
Et oui pas besoin de vérifié la case a cocher car si elle est cocher elle existe sinon elle existe pas
Vous avez l'habitude maintenant donc voici ce que je retrouve :
- Code: Tout sélectionner
if(isset($_POST['pseudo']) && isset($_POST['mdp']))// Vérification de l'existance des variables de connexion.
{
if($_POST['pseudo'] != NULL && $_POST['mdp'] != NULL)// Vérification que les variables contiennent bien des données.
{
Alors voila maintenant on va faire la requette nous permettant de vérifié la validité du pseudo.
Une simple selection dans la base membre et un petit array pour classé tout ça et puis hop le tour est joué
- Code: Tout sélectionner
$retour = mysql_query('SELECT * FROM membres'); // Sélection dans la bdd
$array = mysql_fetch_array($retour);// Un petit array pour tout rangé
Et on retourne a nos vérifications longe et ch****
Bon vérifier si le pseudo existe, en demandant si la variable pseudo et egale a la variable $array['utilisateur'] .
- Code: Tout sélectionner
if($_POST['pseudo'] == $array['pseudo'])
{
Il est midi et demi j'ai faim donc je finirais cette aprém a touta lure






Tout d'abord, lorsque l'on survol ton tuto (première chose que fait un internaute normal avant se lancer) il n'y a aucune structure ni aucun plan, le simple fait de mettre ces genres de titres :



