WhiiTe'

Administateur
Ancien staff
Inscription
22 Octobre 2011
Messages
14 706
Réactions
8 492
Points
32 425
Salut :RG:,

Je vais vous faire une série de quatre tutoriels tout au long du mois, les quatre tutoriels seront sur la création d'un espace membre, cette semaine je vais faire la partie inscription, la seconde semaine sera sur la connexion, la troisième sur le profil et la dernière semaine sera basé sur l'édition du profil.

Faîtes attention quand vous allez c/C enlevez le BBCode qui s'est incrusté dans les SPOILER, RG bug et je ne peux pas les enlever. :@

J'utiliserai l'éditeur de texte Sublime Text 3.

https://reality-gaming.fr/attachments/djamel4-png.61409/


Donc commençons, nous allons créer une nouvelle base de donnée que nous appellerons "espace_membre" et dedans nous allons créer la table "membres" avec comme paramètres un id en auto-increment et avec un index primaire, pseudo et mail en VARCHAR de 255 et motdepasse en TEXT, voici ce que vous devriez avoir : :oui:


https://reality-gaming.fr/attachments/djamel4-png.61409/

Maintenant commençons à coder, créons un fichier "inscription.php" et ouvrez le.
Nous allons commencer par faire le formulaire d'inscription, je vous l'ai fais d'avance.

HTML:
<!DOCTYPE html><html>
    <head>
        <meta charset="utf-8">
        <title>#1 TUTO PHP | WhiiTe'</title>
    </head>
    <body align="center">
        <h2>Inscription</h2>
            <br />
            <form method="POST">
                <table align="center">
                        <tr>
                            <td align="right">
                                <label for="pseudo" >Pseudo :</label>
                            </td>
                            <td>
                                <input type="text" placeholder="Votre pseudo" id="pseudo" name="pseudo" value="<?php if(isset($pseudo)) { echo $pseudo; } ?>" />
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <label for="mail">Mail :</label>
                            </td>
                            <td>
                                <input type="email" placeholder="Votre mail" id="mail" name="mail" value="<?php if(isset($mail)) { echo $mail; } ?>" />
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <label for="mail2">Confirmation du mail :</label>
                            </td>
                            <td>
                                <input type="email" placeholder="Confirmez votre mail" id="mail2" name="mail2" value="<?php if(isset($mail2)) { echo $mail2; } ?>" />
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <label for="mdp">Mot de passe :</label>
                            </td>
                            <td>
                                <input type="password" placeholder="Votre mot de passe" id="mdp" name="mdp" />
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <label for="mdp2">Confirmation du mot de passe :</label>
                            </td>
                            <td>
                                <input type="password" placeholder="Confirmez votre mdp" id="mdp2" name="mdp2" />
                            </td>
                        </tr>
                        <tr>
                            <td></td>
                            <td align="center">
                                <br />
                                <input type="submit" name="register" value="Je m'inscris" />
                            </td>
                        </tr>
                </table>
            </form>
    </body>
</html>


Si vous voulez changé le formulaire, ne touchez pas au "name" car c'est ce qui nous servira à lier l'input au PHP. :ok:

Maintenant place au PHP, nous allons faire une vérification, c'est à dire que nous allons vérifier si l'utilisateur à rentrer son pseudo, son email et son mot de passe, mais tout en sécurisant le tout.

PHP:
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');[/SIZE][/SIZE][/CENTER][/SIZE][/SIZE]
if(isset($_POST['register']))
    {
        $pseudo = htmlspecialchars(trim($_POST['pseudo']));
        $mail = htmlspecialchars(trim($_POST['mail']));
        $mail2 = htmlspecialchars(trim($_POST['mail2']));
        $mdp = sha1($_POST['mdp']);
        $mdp2 = sha1($_POST['mdp2']);

        if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']))
        {



Premièrement nous vérifions si l'utilisateur à cliqué sur le bouton "submit" puis nous sécurisons grâce à un "htmlspecialchars" qui sert à faire en sorte que si l'utilisateur est méchant et essaye de rentrer du code, son code sera prit en texte plein, c'est utile surtout si il y a un système de profil car si un utilisateur gentil va sur son profil, il aura le code écris et non exécuté, trim sert à enlever les espaces vides.
Vous allez me dire qu'il n'y a pas de "htmlspecialchars" mais "sha1" devant le mot de passe, c'est normal car nous ne voulons pas voir les mots de passes de vos membres, nous voulons que leurs mots de passes soient sur de ne pas être volé si un hackeur accède à votre base de donnée, donc nous les cryptons grâce à cette fonction, il existe aussi la fonction "md5" mais elle est moins sur, la toute première ligne de ce spoiler est la connexion à la base de donnée.

https://reality-gaming.fr/attachments/djamel4-png.61409/

Maintenant nous allons vérifier si les deux emails et les deux mots de passes que l'utilisateur a rentré sont identiques, et si l'adresse mail est correcte, c'est à dire si l'adresse mail comporte bien un @ et la fin en .fr (ou .com...).

PHP:
            $pseudolength = strlen($pseudo)if($pseudolength <= 25)   {
                if($mail == $mail2)
                {
                    if(filter_var($mail, FILTER_VALIDATE_EMAIL))
                    {
                        $reqmail = $bdd->prepare("SELECT * FROM membres WHERE mail = ?");
                        $reqmail->execute(array($mail));
                        $mailexist = $reqmail->rowCount();
                        if($mailexist == 0)
                        {
                            if($mdp == $mdp2)
                            {



Donc la nous allons calculer la longueur du pseudo grâce à une fonction "strlen", si le pseudo est inférieur ou égale à 25 caractères, nous passons à la deuxième vérification qui vérifie si les deux emails que l’utilisateur correspondent, si ils correspondent nous passons à l'étape suivante qui vérifie si le mail est bon, je vous ai expliqué plus haut, si le mail est bon nous vérifions si l'email n'existe pas déjà, si "$mailexist" est égale à 0, ce qui veut dire que l'email n'est pas dans la base de donnée, nous passons à la dernière étape de vérification, nous vérifions si les deux mots de passe correspondent, si ils correspondent bien nous insérons dans la base de donnée.

PHP:
                                $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)");$insertmbr->execute(array($pseudo, $mail, $mdp));}




Nous avons fait toutes les étapes de vérifications puis l’insertion dans la base de donnée.
Nous allons mettre des messages d'erreurs si, par exemple, l’utilisateur rentre 26 caractères, alors il aura un message sous le formulaire qui lui dis que la taille maximum est de 25 caractères.

Vous n'avez qu'à copier-coller en dessous de la requête SQL ce qui se trouve dans le SPOILER ci-dessous.


PHP:
else         $erreur = "Vos mots de passes ne correspondent pas !";
                            }
                        }
                        else
                        {
                            $erreur = "Adresse mail déjà utilisée !";
                        }
                    }
                    else
                    {
                        $erreur = "Votre adresse mail n'est pas valide !";
                    }
                }
                else
                {
                    $erreur = "Vos adresses mail ne correspondent pas !";
                }
            }
            else
            {
                $erreur = "Votre pseudo ne doit pas dépasser 255 caractères !";
            }
        }
        else
        {
            $erreur = "Tous les champs doivent être complétés !";
        }
    }



Et en dessous de la fermeture de la balise "form" en dessous de votre page nous allons affiché l'erreur.

PHP:
<?php if(isset($erreur)) { echo $erreur; } ?>

Et voila :RG: c'est la fin de cette première partie, si vous avez un problème ou une question n'hésitez pas à m'envoyer un message privée en expliquant votre soucis.

:tchuss:
 
Dernière édition par un modérateur:

WhiiTe'

Administateur
Ancien staff
Inscription
22 Octobre 2011
Messages
14 706
Réactions
8 492
Points
32 425
Bien mais SHA = :puke: passe comme ça par exemple pour le mot de passe sha256(sha1(md5($mdp.$pseudo.$mdp)))

Ultra sécuriser impossible a decrypt (oui)

Partons sur le fait que personne n’accédera à notre base de donnée :p
Et je peux pas éditer sinon je vais devoir virer tout le BBCode qui s'est incrusté :/
 

Kilian'

Développeur HTML5/CSS3 - PHP
Premium
Inscription
16 Août 2012
Messages
3 503
Réactions
990
Points
17 711
Bien mais les images on buggé chez moi :/
 

Rivals

Ancien staff
Inscription
27 Août 2016
Messages
1 705
Réactions
895
Points
13 104
Bien mais SHA = :puke: passe comme ça par exemple pour le mot de passe sha256(sha1(md5($mdp.$pseudo.$mdp)))

Ultra sécuriser impossible a decrypt (oui)
Il y a également la possibilité d'utiliser password_hash pour créer un hash du mot de passe et password_verify pour vérifier la validité de celui-ci. :espion:
 

Maxence ES

Guizou
Premium
Inscription
23 Janvier 2013
Messages
4 842
Réactions
3 146
Points
17 331
Salut :RG:,

Je vais vous faire une série de quatre tutoriels tout au long du mois, les quatre tutoriels seront sur la création d'un espace membre, cette semaine je vais faire la partie inscription, la seconde semaine sera sur la connexion, la troisième sur le profil et la dernière semaine sera basé sur l'édition du profil.

Faîtes attention quand vous allez c/C enlevez le BBCode qui s'est incrusté dans les SPOILER, RG bug et je ne peux pas les enlever. :@

J'utiliserai l'éditeur de texte Sublime Text 3.

https://reality-gaming.fr/attachments/djamel4-png.61409/


Donc commençons, nous allons créer une nouvelle base de donnée que nous appellerons "espace_membre" et dedans nous allons créer la table "membres" avec comme paramètres un id en auto-increment et avec un index primaire, pseudo et mail en VARCHAR de 255 et motdepasse en TEXT, voici ce que vous devriez avoir : :oui:


https://reality-gaming.fr/attachments/djamel4-png.61409/

Maintenant commençons à coder, créons un fichier "inscription.php" et ouvrez le.
Nous allons commencer par faire le formulaire d'inscription, je vous l'ai fais d'avance.

HTML:
<!DOCTYPE html><html>[/SIZE][/CENTER][/SIZE][/CENTER]
[SIZE=3]
[CENTER][SIZE=3]
[CENTER]    <head>
        <meta charset="utf-8">
        <title>#1 TUTO PHP | WhiiTe'</title>
    </head>
    <body align="center">
        <h2>Inscription</h2>
            <br />
            <form method="POST">
                <table align="center">
                        <tr>
                            <td align="right">
                                <label for="pseudo" >Pseudo :</label>
                            </td>
                            <td>
                                <input type="text" placeholder="Votre pseudo" id="pseudo" name="pseudo" value="<?php if(isset($pseudo)) { echo $pseudo; } ?>" />
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <label for="mail">Mail :</label>
                            </td>
                            <td>
                                <input type="email" placeholder="Votre mail" id="mail" name="mail" value="<?php if(isset($mail)) { echo $mail; } ?>" />
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <label for="mail2">Confirmation du mail :</label>
                            </td>
                            <td>
                                <input type="email" placeholder="Confirmez votre mail" id="mail2" name="mail2" value="<?php if(isset($mail2)) { echo $mail2; } ?>" />
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <label for="mdp">Mot de passe :</label>
                            </td>
                            <td>
                                <input type="password" placeholder="Votre mot de passe" id="mdp" name="mdp" />
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <label for="mdp2">Confirmation du mot de passe :</label>
                            </td>
                            <td>
                                <input type="password" placeholder="Confirmez votre mdp" id="mdp2" name="mdp2" />
                            </td>
                        </tr>
                        <tr>
                            <td></td>
                            <td align="center">
                                <br />
                                <input type="submit" name="register" value="Je m'inscris" />
                            </td>
                        </tr>
                </table>
            </form>
    </body>
</html>




Si vous voulez changé le formulaire, ne touchez pas au "name" car c'est ce qui nous servira à lier l'input au PHP. :ok:

Maintenant place au PHP, nous allons faire une vérification, c'est à dire que nous allons vérifier si l'utilisateur à rentrer son pseudo, son email et son mot de passe, mais tout en sécurisant le tout.

PHP:
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');[/SIZE][/SIZE][/CENTER][/SIZE][/SIZE][/SIZE][/CENTER][/SIZE][/CENTER]
[SIZE=3]
[CENTER][SIZE=3]
[CENTER]if(isset($_POST['register']))
    {
        $pseudo = htmlspecialchars(trim($_POST['pseudo']));
        $mail = htmlspecialchars(trim($_POST['mail']));
        $mail2 = htmlspecialchars(trim($_POST['mail2']));
        $mdp = sha1($_POST['mdp']);
        $mdp2 = sha1($_POST['mdp2']);

        if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']))
        {





Premièrement nous vérifions si l'utilisateur à cliqué sur le bouton "submit" puis nous sécurisons grâce à un "htmlspecialchars" qui sert à faire en sorte que si l'utilisateur est méchant et essaye de rentrer du code, son code sera prit en texte plein, c'est utile surtout si il y a un système de profil car si un utilisateur gentil va sur son profil, il aura le code écris et non exécuté, trim sert à enlever les espaces vides.
Vous allez me dire qu'il n'y a pas de "htmlspecialchars" mais "sha1" devant le mot de passe, c'est normal car nous ne voulons pas voir les mots de passes de vos membres, nous voulons que leurs mots de passes soient sur de ne pas être volé si un hackeur accède à votre base de donnée, donc nous les cryptons grâce à cette fonction, il existe aussi la fonction "md5" mais elle est moins sur, la toute première ligne de ce spoiler est la connexion à la base de donnée.

https://reality-gaming.fr/attachments/djamel4-png.61409/

Maintenant nous allons vérifier si les deux emails et les deux mots de passes que l'utilisateur a rentré sont identiques, et si l'adresse mail est correcte, c'est à dire si l'adresse mail comporte bien un @ et la fin en .fr (ou .com...).

PHP:
            $pseudolength = strlen($pseudo)if($pseudolength <= 25)   {[/SIZE][/SIZE][/CENTER][/SIZE][/SIZE][/CENTER]
[SIZE=3][SIZE=3]
[CENTER][SIZE=3][SIZE=3][CENTER]                if($mail == $mail2)
                {
                    if(filter_var($mail, FILTER_VALIDATE_EMAIL))
                    {
                        $reqmail = $bdd->prepare("SELECT * FROM membres WHERE mail = ?");
                        $reqmail->execute(array($mail));
                        $mailexist = $reqmail->rowCount();
                        if($mailexist == 0)
                        {
                            if($mdp == $mdp2)
                            {





Donc la nous allons calculer la longueur du pseudo grâce à une fonction "strlen", si le pseudo est inférieur ou égale à 25 caractères, nous passons à la deuxième vérification qui vérifie si les deux emails que l’utilisateur correspondent, si ils correspondent nous passons à l'étape suivante qui vérifie si le mail est bon, je vous ai expliqué plus haut, si le mail est bon nous vérifions si l'email n'existe pas déjà, si "$mailexist" est égale à 0, ce qui veut dire que l'email n'est pas dans la base de donnée, nous passons à la dernière étape de vérification, nous vérifions si les deux mots de passe correspondent, si ils correspondent bien nous insérons dans la base de donnée.
PHP:
                                $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)");$insertmbr->execute(array($pseudo, $mail, $mdp));}[/SIZE][/SIZE][/CENTER][/SIZE][/SIZE][/CENTER]
[SIZE=3][SIZE=3]
[CENTER][SIZE=3][SIZE=3][CENTER]






Nous avons fait toutes les étapes de vérifications puis l’insertion dans la base de donnée.
Nous allons mettre des messages d'erreurs si, par exemple, l’utilisateur rentre 26 caractères, alors il aura un message sous le formulaire qui lui dis que la taille maximum est de 25 caractères.

Vous n'avez qu'à copier-coller en dessous de la requête SQL ce qui se trouve dans le SPOILER ci-dessous.


PHP:
else         $erreur = "Vos mots de passes ne correspondent pas !";[/SIZE][/SIZE][/SIZE][/SIZE][/CENTER][/SIZE][/SIZE][/SIZE][/SIZE][/CENTER]
[SIZE=3][SIZE=3][SIZE=3][SIZE=3]
[CENTER][SIZE=3][SIZE=3][SIZE=3][SIZE=3][CENTER]                            }
                        }
                        else
                        {
                            $erreur = "Adresse mail déjà utilisée !";
                        }
                    }
                    else
                    {
                        $erreur = "Votre adresse mail n'est pas valide !";
                    }
                }
                else
                {
                    $erreur = "Vos adresses mail ne correspondent pas !";
                }
            }
            else
            {
                $erreur = "Votre pseudo ne doit pas dépasser 255 caractères !";
            }
        }
        else
        {
            $erreur = "Tous les champs doivent être complétés !";
        }
    }





Et en dessous de la fermeture de la balise "form" en dessous de votre page nous allons affiché l'erreur.

PHP:
<?php if(isset($erreur)) { echo $erreur; } ?>

Et voila :RG: c'est la fin de cette première partie, si vous avez un problème ou une question n'hésitez pas à m'envoyer un message privée en expliquant votre soucis.

:tchuss:
Correct , ce qui m'embête est le sha1. Je t'invite plutôt à utiliser la technique nommée "sel" , s'utilisant comme ceci :

PHP:
<?php
// ...
$sel = "coucou";
$mdp = $sel . sha1($_POST['mdp']). $sel;
// ...
?>
Ce qui permet de rajouter un mot avant et après (ou d'un seul côté) permettant une sécurisation optimale.

D'ailleurs je pense qu'un tutoriel montrant le code est pas utile. Je pense que pour s'améliorer faudra chercher par soi même , donc donner une algorithme spéciale a toi, avec tes conseils , pour en faire un bon.

Chacun code à sa façon ;)
 

Florian.

Premium
Inscription
8 Août 2012
Messages
4 251
Réactions
1 220
Points
14 353
Correct , ce qui m'embête est le sha1. Je t'invite plutôt à utiliser la technique nommée "sel" , s'utilisant comme ceci :

PHP:
<?php
// ...
$sel = "coucou";
$mdp = $sel . sha1($_POST['mdp']). $sel;
// ...
?>
Ce qui permet de rajouter un mot avant et après (ou d'un seul côté) permettant une sécurisation optimale.

D'ailleurs je pense qu'un tutoriel montrant le code est pas utile. Je pense que pour s'améliorer faudra chercher par soi même , donc donner une algorithme spéciale a toi, avec tes conseils , pour en faire un bon.

Chacun code à sa façon ;)
c'est pas plutôt Salt ? de plus je lui ai proposer ceci
PHP:
sha256(sha1(md5($mdp.$pseudo.$mdp)))
 

WhiiTe'

Administateur
Ancien staff
Inscription
22 Octobre 2011
Messages
14 706
Réactions
8 492
Points
32 425
Correct , ce qui m'embête est le sha1. Je t'invite plutôt à utiliser la technique nommée "sel" , s'utilisant comme ceci :

PHP:
<?php
// ...
$sel = "coucou";
$mdp = $sel . sha1($_POST['mdp']). $sel;
// ...
?>
Ce qui permet de rajouter un mot avant et après (ou d'un seul côté) permettant une sécurisation optimale.

D'ailleurs je pense qu'un tutoriel montrant le code est pas utile. Je pense que pour s'améliorer faudra chercher par soi même , donc donner une algorithme spéciale a toi, avec tes conseils , pour en faire un bon.

Chacun code à sa façon ;)

J'explique en même temps, et merci je vais voir :p
 

Axx67

Membre
Inscription
16 Février 2015
Messages
352
Réactions
236
Points
9 366
La meilleure solution est celle donnée par @Rivals, la fonction password_hash() dispo depuis PHP 5.5 ou éventuellement crypt().

Puis on est sur de l'apprentissage au PHP, pour un mini espace membre, le sha1 est déjà un bon début.. ;)
 
Dernière édition:
Haut