#2 Espace membre - Connexion & Inscription

Iktus

Contributeur
Inscription
21 Octobre 2013
Messages
1 665
Réactions
392
Points
10 731
    Réponse de Iktus Informatique Tutoriels : #2 Espace membre - Connexion & Inscription
  • #1


Bonjour, bonsoir,



Aujourd'hui, nous allons passer à la suite de la série du développement d'un espace membre assez complet.
Dans cette partie, nous allons faire le système de connexion et d'inscription, mais aussi quelque fonctions pour nous faciliter certaine chose.

Votre serveur Apache et MySQL est fonctionnel ? Alors on peut commencer!
Tout d'abord, nous allons créer un dossier includes à la racine de votre FTP (Je prends en compte que votre FTP est vide et que vous n'avez rien d'autre dedans)

Connectez-vous ou inscrivez-vous dès maintenant. pour voir le contenu de ce spoiler !

Une fois celui-ci créé, vous allez vous rendre dedans et créer un fichier configuration.php
Dans ce fichier, nous allons mettre la connectivité avec PDO.​
PHP:
<?php

try
{
    $hostname = "127.0.0.1"; //Hôte
    $dbname = "rgtuto"; //Base de données
    $user = "root"; // Utilisateur
    $password = ""; // Mot de passe

    $bdd = new PDO('mysql:host='.$hostname.';dbname='.$dbname.';charset=utf8', ''.$user.'', ''.$password.'', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
} // Ne pas toucher

catch(Exception $e)
{
    die('<span style="color:red;"><b>Une erreur est survenue !</b></span> <br />'. $e->getMessage()); // Message d'erreur avec l'erreur rencontré, mettre juste die('Votre message d'erreur'); pour afficher simplement votre message d'erreur seul
}

?>

Et nous allons rajouter l'ouverture des sessions dans le fichier de configuration pour ne pas devoir se reconnecter à chaque modification dans la table des membres.
PHP:
if(isset($_SESSION['id']))
{
    $req = $bdd->prepare("SELECT * FROM membres WHERE id = ?");
    $req->execute(array($_SESSION['id']));
    $info = $req->rowCount();
    if($info == 1)
        {
            $info = $req->fetch();
            $_SESSION['id'] = $info['id'];
            $_SESSION['identifiant'] = $info['identifiant'];
            $_SESSION['motdepasse'] = $info['motdepasse'];
            $_SESSION['email'] = $info['email'];
            $_SESSION['avatar'] = $info['avatar'];

        }
}

Ce qui donne
PHP:
<?php

try
{
    $hostname = "127.0.0.1";
    $dbname = "rgtuto";
    $user = "root";
    $password = "";

    $bdd = new PDO('mysql:host='.$hostname.';dbname='.$dbname.';charset=utf8', ''.$user.'', ''.$password.'', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}

catch(Exception $e)
{
    die('<span style="color:red;"><b>Une erreur est survenue !</b></span> <br />'. $e->getMessage());
}

if(isset($_SESSION['id']))
{
    $req = $bdd->prepare("SELECT * FROM membres WHERE id = ?");
    $req->execute(array($_SESSION['id']));
    $info = $req->rowCount();
    if($info == 1)
        {
            $info = $req->fetch();
            $_SESSION['id'] = $info['id'];
            $_SESSION['identifiant'] = $info['identifiant'];
            $_SESSION['motdepasse'] = $info['motdepasse'];
            $_SESSION['email'] = $info['email'];
            $_SESSION['avatar'] = $info['avatar'];

        }
}

?>

Une fois cela de fait, vous allez vous rendre dans vos fichiers créé hier (index.php, login.php, register.php) et rajouter​
PHP:
<?php

session_start();

require_once('includes/configuration.php');

?>

Donc, le session_start(); sert à initialiser et restaurer une session et le require_once(''); permet d'inclure un fichier, il est identique à require et include mis à part que PHP vérifie si le fichier a déjà été inclus, et si c'est le cas, ne l'inclut pas une deuxième fois.

Une fois cela fais, nous allons créer un base de données. Pour ma part je vais l'appeler rgtuto puis nous allons créer la table des membres.

Connectez-vous ou inscrivez-vous dès maintenant. pour voir le contenu de ce spoiler !

Maintenant que nous avons notre base de données avec notre table membres, nous allons passer à la partie PHP

On se redirige dans le dossier includes puis on crée un nouveau dossier nommé php et dans ce dossier on crée un fichier login.code.php qui va comporter notre code PHP permettant la connexion.
PHP:
<?php


// Si l'utilisateur est déjà connecté, alors on le redigire sur l'index

if(isset($_SESSION['id']))
{
  header('Location: index');
exit();
}
else
{

// Sinon il peut utiliser le formulaire

  if(isset($_POST['connexion']))
  {
    $identifiant = htmlspecialchars($_POST['identifiant']); // Ce qui sert pour le name="identifiant"
    $motdepasse = md5(sha1($_POST['motdepasse'])); // Ce qui sert pour le name="motdepasse"

    if(!empty($identifiant) AND !empty($motdepasse))
    {

      $req = $bdd->prepare('SELECT * FROM membres WHERE identifiant = ? AND motdepasse = ?');
      $req->execute(array($identifiant, $motdepasse));
      $exist = $req->rowCount();

      if($exist == 1)
      {

        // On enregistre en cookie l'identifiant et le mot de passe

        if(isset($_POST['remember'])) {
                    setcookie('identifiant',$identifiant,time()+365*24*3600,null,null,false,true);
                    setcookie('motdepasse',$motdepasse,time()+365*24*3600,null,null,false,true);
                }

         // On ouvre les sessions

        $backup = $req->fetch();
        $_SESSION['id'] = $backup['id'];
        $_SESSION['identifiant'] = $backup['identifiant'];
        $_SESSION['motdepasse'] = $backup['motdepasse'];
        $_SESSION['avatar'] = $backup['avatar'];

        // On peut ici mettre ici -> $erreur = "Connexion réussi, redirection dans 3 secondes"; <- et modifier le header actuel par -> header("refresh:3;url=index"); <-

        header('Location: index');
exit();

      }
      else
      {

        // Erreur si l'utilisateur ou le mot de passe est incorrect

        $erreur = "<div class=\"alert alert-danger\">
                            <strong>Erreur!</strong> Votre nom d'utilisateur ou mot de passe est incorrect.
                        </div>";

      }

    }
    else
    {

      // Erreur si tous les champs ne sont pas remplis, mais on peut utiliser un required dans notre code HTML mais il n'est pas prit en compte sur tous les navigateurs.

      $erreur = "<div class=\"alert alert-danger\">
                            <strong>Erreur!</strong> Tous les champs ne sont pas remplis!
                        </div>";

    }

  }

}

?>

Je vous ai détaillé en bref ce que chaque ligne signifie.
Une fois ce code mit dans votre fichier login.code.php, vous enregistrez et nous allons nous rendre dans le fichier login.php situé à la racine et rajouter un autre require_once pour inclure notre fichier login.code.php avec le code PHP.

Ce qui doit vous donnez maintenant​
PHP:
<?php


session_start();

require_once('includes/configuration.php');
require_once('includes/php/login.code.php');

?>

Maintenant, nous allons faire en sorte que si il y a une erreur, elle s'affiche.
Donc on aura besoin de​
PHP:
<?php if(isset($erreur)) { ?>

<?php echo $erreur ?>
<?php } ?>

Vous le placez où vous voulez que l'erreur apparaisse.
Connectez-vous ou inscrivez-vous dès maintenant. pour voir le contenu de ce spoiler !

Normalement, si vous avez suivi correctement le tutoriel numéro 1, une erreur doit s'afficher si vous rentrez de fausse information.
Maintenant si vous voulez tester que tout fonctionne, il vous suffit de créer un utilisateur depuis votre base de données, pour le mot de passe, on va utiliser azerty, alors dans la colonne motdepasse, on va mettre 7b95dafa9ecb37dafa761f8bafc76b0a.

Si tout c'est bien passé, vous allez être redirigé sur l'index, et vous ne pourrez plus vous rendre sur le page login.php sans que vous soyez aussi redirigé sur l'index, on va donc créer un fichier logout.php permettant la déconnexion.

Je vous laisse faire le design de votre page de déconnexion :)
Connectez-vous ou inscrivez-vous dès maintenant. pour voir le contenu de ce spoiler !

Normalement, vous avez que du HTML sur cette page, vous allez ajouter maintenant​
PHP:
<?php

session_start();
$_SESSION = array();
session_destroy();

?>

Pas besoin d'explication, il n'y a que 3 lignes :trollface:

Maintenant nous allons attaquer la partie inscription :)
On retourne dans le dossier php ce trouvant dans includes et nous créons le fichier register.code.php, et l'on colle ce code
PHP:
<?php

// Si l'utilisateur est déjà connecté, alors on le redigire sur l'index

if(isset($_SESSION['id']))
{
    header('Location: index');
exit();
}
else
{

// Sinon il peut utiliser le formulaire

    if(isset($_POST['inscription']))
    {
        $identifiant = htmlspecialchars($_POST['identifiant']); // Ce qui sert pour le name="identifiant"
        $email = htmlspecialchars($_POST['email']); // Ce qui sert pour le name="email"
        $motdepasse = md5(sha1($_POST['motdepasse'])); // Ce qui sert pour le name="motdepasse"
        $motdepasse_confirme = md5(sha1($_POST['motdepasse_confirme'])); // Ce qui sert pour le name="motdepasse_confirme"
        $avatar = htmlspecialchars("/images/1.jpg"); // Lien vers l'image que vous donnerez au utilisateur lors de l'inscription

        if(!empty($_POST['identifiant']) AND !empty($_POST['email']) AND !empty($_POST['motdepasse']) AND !empty($_POST['motdepasse_confirme'])) // Les champs qui seront obligatoire d'être remplis dans le formulaire
        {
            $l_peudo = strlen($identifiant);

            if($l_peudo > 25) // Longueur maximal d'un nom d'utilisateur
            {
                $erreur = "Identifiant trop long";
            }
            else
            {
                $req = $bdd->prepare("SELECT * FROM membres WHERE identifiant = ?");
                $req->execute(array($identifiant));
                $userexist = $req->rowCount();
                if($userexist == 0)
                {
                    if(filter_var($email, FILTER_VALIDATE_EMAIL))
                    {
                        if($motdepasse == $motdepasse_confirme) // On vérifie que le mot de passe est identique
                        {
                            $reqinsert = $bdd->prepare('INSERT INTO membres(identifiant, email, motdepasse, avatar) VALUES(?, ?, ?, ?)');
                            $reqinsert->execute(array($identifiant, $email, $motdepasse, $avatar));

                            // Si tout c'est bien passé, on affiche ce message
                            $erreur = "<div class=\"alert alert-success\">
                            <strong>Succès!</strong> Votre compte est maintenant créé.<br> Vous pouvez dès à présent vous connecter.
                        </div>";
                            header('Refresh: 3; login');
exit();
                        }
                        else
                        {
                            // Si les mots de passe ne sont pas identique
                            $erreur = "<div class=\"alert alert-danger\">
                            <strong>Erreur!</strong> Les mots de passe ne sont pas identique.
                        </div>";
                        }
                    }
                    else
                    {
                        // Si l'email est invalide
                        $erreur = "<div class=\"alert alert-danger\">
                            <strong>Erreur!</strong> Email invalide.
                        </div>";
                    }
                }
                else
                {
                    // Si l'identifiant est déjà utilisé
                    $erreur = "<div class=\"alert alert-danger\">
                            <strong>Erreur!</strong> Ce identifiant est déjà utilisé.
                        </div>";
                }
            }
        }
        else
        {
            // Si tous les champs ne sont pas remplis
            $erreur = "<div class=\"alert alert-danger\"><strong>Erreur!</strong> Tous les champs ne sont pas remplis.
                        </div>";
        }

    }

}

Une fois cela de fait, vous enregistrez et on retourne dans register.php qui est à la racine.

Vous allez faire comme pour le login.php, vous allez placer un require_once allant chercher notre fichier register.code.php

Ce qui doit vous donner​
PHP:
<?php


session_start();

require_once('includes/configuration.php');
require_once('includes/php/register.code.php');

?>

Maintenant nous allons aussi rajouter le code permettant d'afficher les erreurs.​
PHP:
<?php if(isset($erreur)) { ?>

<?php echo $erreur ?>
<?php } ?>
À vous de le placer où vous le souhaitez :)

Normalement, si vous avez tout bien suivi, tout devrait marcher :)


BONUS


Maintenant nous allons utiliser les functions.
Question: Pourquoi ? Encore du code qui peut être tout simplement écrit pourtant...
Réponse: Oui mais c'est pour faciliter les modifications, par exemple, quand nous serons à la partie administration, même si c'est pas pour tout de suite :trollface:, tu pourras modifier le titre de ton site en 10 secondes!
Donc alors, nous allons nous rendre dans notre base de données et créer une table configuration comportant les colonnes : nom - description - auteur.

Connectez-vous ou inscrivez-vous dès maintenant. pour voir le contenu de ce spoiler !

Une fois cela de fait, on se rend dans notre dossier includes puis on crée le dossier fonctions et on crée un fichier nommé configuration.fonction.php

Dans ce fichier vous allez mettre

PHP:
<?php

function Configuration($str)
{
    static $row;
    global $bdd;

    if (!$row)
    {
        $stm = $bdd->query("SELECT * FROM configuration");
        $row = $stm->fetch();
    }
    return $row[$str];
}

?>

En gros, on utilisera la fonction Configuration pour afficher les données dans la table configuration

Une fois cela de fait, vous allez ajouter un require_once qui inclura notre fichier configuration.fonction.php, vous pouvez le mettre dans tout nos fichiers de racine, comme ça, pas besoin de faire plusieurs modification, une seul suffira pour tout modifier :D

Le fonctionnement est simple, si vous voulez afficher le texte qu'il y a dans votre table nom, vous allez mettre
PHP:
<?php echo Configuration('nom'); ?>
Si vous voulez la description, alors à la place de nom, vous allez mettre description, c'est tout simple, et très utilise :)

N'hésitez pas à me dire si vous n'avez pas compris certaine chose :)
Bonne journée/soirée à vous :D

Télécharger le projet:

Nouveau fichier SQL:
 
Dernière édition:

Peaky Blinders

King Plex
Ancien staff RG
Inscription
27 Décembre 2012
Messages
12 495
Réactions
5 016
Points
21 413
    Réponse de Peaky Blinders Informatique Tutoriels : #2 Espace membre - Connexion & Inscription
  • #2
Bon tutoriel pour ceux qui voudrait commencer le création de site web :D

Deux trois points : faut toujours mettre un exit(); après un header pour éviter d'envoyer le reste de la page au client. Et pour la partie bonus, ce n'est pas une class :x
 

Karrio SEC

Rédacteur
Ancien staff RG
Inscription
26 Janvier 2014
Messages
2 067
Réactions
1 648
Points
10 461
    Réponse de Karrio SEC Informatique Tutoriels : #2 Espace membre - Connexion & Inscription
  • #3


Bonjour, bonsoir,



Aujourd'hui, nous allons passer à la suite de la série du développement d'un espace membre assez complet.
Dans cette partie, nous allons faire le système de connexion et d'inscription, mais aussi quelque fonctions pour nous faciliter certaine chose.

Votre serveur Apache et MySQL est fonctionnel ? Alors on peut commencer!
Tout d'abord, nous allons créer un dossier includes à la racine de votre FTP (Je prends en compte que votre FTP est vide et que vous n'avez rien d'autre dedans)

Connectez-vous ou inscrivez-vous dès maintenant. pour voir le contenu de ce spoiler !

Une fois celui-ci créé, vous allez vous rendre dedans et créer un fichier configuration.php
Dans ce fichier, nous allons mettre la connectivité avec PDO.
PHP:
<?php

try
{
    $hostname = "127.0.0.1"; //Hôte
    $dbname = "rgtuto"; //Base de données
    $user = "root"; // Utilisateur
    $password = ""; // Mot de passe

    $bdd = new PDO('mysql:host='.$hostname.';dbname='.$dbname.';charset=utf8', ''.$user.'', ''.$password.'', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
} // Ne pas toucher

catch(Exception $e)
{
    die('<span style="color:red;"><b>Une erreur est survenue !</b></span> <br />'. $e->getMessage()); // Message d'erreur avec l'erreur rencontré, mettre juste die('Votre message d'erreur'); pour afficher simplement votre message d'erreur seul
}

?>
Et nous allons rajouter l'ouverture des sessions dans le fichier de configuration pour ne pas devoir se reconnecter à chaque modification dans la table des membres.

PHP:
if(isset($_SESSION['id']))
{
    $req = $bdd->prepare("SELECT * FROM membres WHERE id = ?");
    $req->execute(array($_SESSION['id']));
    $info = $req->rowCount();
    if($info == 1)
        {
            $info = $req->fetch();
            $_SESSION['id'] = $info['id'];
            $_SESSION['identifiant'] = $info['identifiant'];
            $_SESSION['motdepasse'] = $info['motdepasse'];
            $_SESSION['email'] = $info['email'];
            $_SESSION['avatar'] = $info['avatar'];

        }
}
Ce qui donne

PHP:
<?php

try
{
    $hostname = "127.0.0.1";
    $dbname = "rgtuto";
    $user = "root";
    $password = "";

    $bdd = new PDO('mysql:host='.$hostname.';dbname='.$dbname.';charset=utf8', ''.$user.'', ''.$password.'', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}

catch(Exception $e)
{
    die('<span style="color:red;"><b>Une erreur est survenue !</b></span> <br />'. $e->getMessage());
}

if(isset($_SESSION['id']))
{
    $req = $bdd->prepare("SELECT * FROM membres WHERE id = ?");
    $req->execute(array($_SESSION['id']));
    $info = $req->rowCount();
    if($info == 1)
        {
            $info = $req->fetch();
            $_SESSION['id'] = $info['id'];
            $_SESSION['identifiant'] = $info['identifiant'];
            $_SESSION['motdepasse'] = $info['motdepasse'];
            $_SESSION['email'] = $info['email'];
            $_SESSION['avatar'] = $info['avatar'];

        }
}

?>
Une fois cela de fait, vous allez vous rendre dans vos fichiers créé hier (index.php, login.php, register.php) et rajouter
PHP:
<?php

session_start();

require_once('includes/configuration.php');

?>
Donc, le session_start(); sert à initialiser et restaurer une session et le require_once(''); permet d'inclure un fichier, il est identique à require et include mis à part que PHP vérifie si le fichier a déjà été inclus, et si c'est le cas, ne l'inclut pas une deuxième fois.

Une fois cela fais, nous allons créer un base de données. Pour ma part je vais l'appeler rgtuto puis nous allons créer la table des membres.

Connectez-vous ou inscrivez-vous dès maintenant. pour voir le contenu de ce spoiler !

Maintenant que nous avons notre base de données avec notre table membres, nous allons passer à la partie PHP

On se redirige dans le dossier includes puis on crée un nouveau dossier nommé php et dans ce dossier on crée un fichier login.code.php qui va comporter notre code PHP permettant la connexion.

PHP:
<?php


// Si l'utilisateur est déjà connecté, alors on le redigire sur l'index

if(isset($_SESSION['id']))
{
  header('Location: index');
}
else
{

// Sinon il peut utiliser le formulaire

  if(isset($_POST['connexion']))
  {
    $identifiant = htmlspecialchars($_POST['identifiant']); // Ce qui sert pour le name="identifiant"
    $motdepasse = md5(sha1($_POST['motdepasse'])); // Ce qui sert pour le name="motdepasse"

    if(!empty($identifiant) AND !empty($motdepasse))
    {

      $req = $bdd->prepare('SELECT * FROM membres WHERE identifiant = ? AND motdepasse = ?');
      $req->execute(array($identifiant, $motdepasse));
      $exist = $req->rowCount();

      if($exist == 1)
      {

        // On enregistre en cookie l'identifiant et le mot de passe

        if(isset($_POST['remember'])) {
                    setcookie('identifiant',$identifiant,time()+365*24*3600,null,null,false,true);
                    setcookie('motdepasse',$motdepasse,time()+365*24*3600,null,null,false,true);
                }

         // On ouvre les sessions

        $backup = $req->fetch();
        $_SESSION['id'] = $backup['id'];
        $_SESSION['identifiant'] = $backup['identifiant'];
        $_SESSION['motdepasse'] = $backup['motdepasse'];
        $_SESSION['avatar'] = $backup['avatar'];

        // On peut ici mettre ici -> $erreur = "Connexion réussi, redirection dans 3 secondes"; <- et modifier le header actuel par -> header("refresh:3;url=index"); <-

        header('Location: index');

      }
      else
      {

        // Erreur si l'utilisateur ou le mot de passe est incorrect

        $erreur = "<div class=\"alert alert-danger\">
                            <strong>Erreur!</strong> Votre nom d'utilisateur ou mot de passe est incorrect.
                        </div>";

      }

    }
    else
    {

      // Erreur si tous les champs ne sont pas remplis, mais on peut utiliser un required dans notre code HTML mais il n'est pas prit en compte sur tous les navigateurs.

      $erreur = "<div class=\"alert alert-danger\">
                            <strong>Erreur!</strong> Tous les champs ne sont pas remplis!
                        </div>";

    }

  }

}

?>
Je vous ai détaillé en bref ce que chaque ligne signifie.
Une fois ce code mit dans votre fichier login.code.php, vous enregistrez et nous allons nous rendre dans le fichier login.php situé à la racine et rajouter un autre require_once pour inclure notre fichier login.code.php avec le code PHP.

Ce qui doit vous donnez maintenant
PHP:
<?php


session_start();

require_once('includes/configuration.php');
require_once('includes/php/login.code.php');

?>
Maintenant, nous allons faire en sorte que si il y a une erreur, elle s'affiche.
Donc on aura besoin de
PHP:
<?php if(isset($erreur)) { ?>

<?php echo $erreur ?>
<?php } ?>
Vous le placez où vous voulez que l'erreur apparaisse.
Connectez-vous ou inscrivez-vous dès maintenant. pour voir le contenu de ce spoiler !

Normalement, si vous avez suivi correctement le tutoriel numéro 1, une erreur doit s'afficher si vous rentrez de fausse information.
Maintenant si vous voulez tester que tout fonctionne, il vous suffit de créer un utilisateur depuis votre base de données, pour le mot de passe, on va utiliser azerty, alors dans la colonne motdepasse, on va mettre 7b95dafa9ecb37dafa761f8bafc76b0a.

Si tout c'est bien passé, vous allez être redirigé sur l'index, et vous ne pourrez plus vous rendre sur le page login.php sans que vous soyez aussi redirigé sur l'index, on va donc créer un fichier logout.php permettant la déconnexion.

Je vous laisse faire le design de votre page de déconnexion :)
Connectez-vous ou inscrivez-vous dès maintenant. pour voir le contenu de ce spoiler !

Normalement, vous avez que du HTML sur cette page, vous allez ajouter maintenant
PHP:
<?php

session_start();
$_SESSION = array();
session_destroy();

?>
Pas besoin d'explication, il n'y a que 3 lignes :trollface:

Maintenant nous allons attaquer la partie inscription :)
On retourne dans le dossier php ce trouvant dans includes et nous créons le fichier register.code.php, et l'on colle ce code

PHP:
<?php

// Si l'utilisateur est déjà connecté, alors on le redigire sur l'index

if(isset($_SESSION['id']))
{
    header('Location: index');
}
else
{

// Sinon il peut utiliser le formulaire

    if(isset($_POST['inscription']))
    {
        $identifiant = htmlspecialchars($_POST['identifiant']); // Ce qui sert pour le name="identifiant"
        $email = htmlspecialchars($_POST['email']); // Ce qui sert pour le name="email"
        $motdepasse = md5(sha1($_POST['motdepasse'])); // Ce qui sert pour le name="motdepasse"
        $motdepasse_confirme = md5(sha1($_POST['motdepasse_confirme'])); // Ce qui sert pour le name="motdepasse_confirme"
        $avatar = htmlspecialchars("/images/1.jpg"); // Lien vers l'image que vous donnerez au utilisateur lors de l'inscription

        if(!empty($_POST['identifiant']) AND !empty($_POST['email']) AND !empty($_POST['motdepasse']) AND !empty($_POST['motdepasse_confirme'])) // Les champs qui seront obligatoire d'être remplis dans le formulaire
        {
            $l_peudo = strlen($identifiant);

            if($l_peudo > 25) // Longueur maximal d'un nom d'utilisateur
            {
                $erreur = "Identifiant trop long";
            }
            else
            {
                $req = $bdd->prepare("SELECT * FROM membres WHERE identifiant = ?");
                $req->execute(array($identifiant));
                $userexist = $req->rowCount();
                if($userexist == 0)
                {
                    if(filter_var($email, FILTER_VALIDATE_EMAIL))
                    {
                        if($motdepasse == $motdepasse_confirme) // On vérifie que le mot de passe est identique
                        {
                            $reqinsert = $bdd->prepare('INSERT INTO membres(identifiant, email, motdepasse, avatar) VALUES(?, ?, ?, ?)');
                            $reqinsert->execute(array($identifiant, $email, $motdepasse, $avatar));

                            // Si tout c'est bien passé, on affiche ce message
                            $erreur = "<div class=\"alert alert-success\">
                            <strong>Succès!</strong> Votre compte est maintenant créé.<br> Vous pouvez dès à présent vous connecter.
                        </div>";
                            header('Refresh: 3; login');
                        }
                        else
                        {
                            // Si les mots de passe ne sont pas identique
                            $erreur = "<div class=\"alert alert-danger\">
                            <strong>Erreur!</strong> Les mots de passe ne sont pas identique.
                        </div>";
                        }
                    }
                    else
                    {
                        // Si l'email est invalide
                        $erreur = "<div class=\"alert alert-danger\">
                            <strong>Erreur!</strong> Email invalide.
                        </div>";
                    }
                }
                else
                {
                    // Si l'identifiant est déjà utilisé
                    $erreur = "<div class=\"alert alert-danger\">
                            <strong>Erreur!</strong> Ce identifiant est déjà utilisé.
                        </div>";
                }
            }
        }
        else
        {
            // Si tous les champs ne sont pas remplis
            $erreur = "<div class=\"alert alert-danger\"><strong>Erreur!</strong> Tous les champs ne sont pas remplis.
                        </div>";
        }

    }

}
Une fois cela de fait, vous enregistrez et on retourne dans register.php qui est à la racine.

Vous allez faire comme pour le login.php, vous allez placer un require_once allant chercher notre fichier register.code.php

Ce qui doit vous donner
PHP:
<?php


session_start();

require_once('includes/configuration.php');
require_once('includes/php/register.code.php');

?>
Maintenant nous allons aussi rajouter le code permettant d'afficher les erreurs.
PHP:
<?php if(isset($erreur)) { ?>

<?php echo $erreur ?>
<?php } ?>
À vous de le placer où vous le souhaitez :)

Normalement, si vous avez tout bien suivi, tout devrait marcher :)


BONUS


Maintenant nous allons utiliser les class.


Donc alors, nous allons nous rendre dans notre base de données et créer une table configuration comportant les colonnes : nom - description - auteur.

Connectez-vous ou inscrivez-vous dès maintenant. pour voir le contenu de ce spoiler !

Une fois cela de fait, on se rend dans notre dossier includes puis on crée le dossier class et on crée un fichier nommé configuration.class.php

Dans ce fichier vous allez mettre


PHP:
<?php

function Configuration($str)
{
    static $row;
    global $bdd;

    if (!$row)
    {
        $stm = $bdd->query("SELECT * FROM configuration");
        $row = $stm->fetch();
    }
    return $row[$str];
}

?>
En gros, on utilisera la fonction Configuration pour afficher les données dans la table configuration

Une fois cela de fait, vous allez ajouter un require_once qui inclura notre fichier configuration.class.php, vous pouvez le mettre dans tout nos fichiers de racine, comme ça, pas besoin de faire plusieurs modification, une seul suffira pour tout modifier :D

Le fonctionnement est simple, si vous voulez afficher le texte qu'il y a dans votre table nom, vous allez mettre
PHP:
<?php echo Configuration('nom'); ?>
Si vous voulez la description, alors à la place de nom, vous allez mettre description, c'est tout simple, et très utilise :)

N'hésitez pas à me dire si vous n'avez pas compris certaine chose :)
Bonne journée/soirée à vous :D

Télécharger le projet:
WoW... :stupéfait: topic très très complet et qui aide vraiment ! Merci à toi pour ce topic :o
 

Iktus

Contributeur
Inscription
21 Octobre 2013
Messages
1 665
Réactions
392
Points
10 731
    Réponse de Iktus Informatique Tutoriels : #2 Espace membre - Connexion & Inscription
  • #4
Bon tutoriel pour ceux qui voudrait commencer le création de site web :D

Deux trois points : faut toujours mettre un exit(); après un header pour éviter d'envoyer le reste de la page au client. Et pour la partie bonus, ce n'est pas une class :x
Merci :) D'accord je modifie et j'y penserai la prochaine fois :p Oui je me suis planté, c'est une function xD j'avais autre chose en tête entre le moment où j'écrivais, et que je faisais le code :trollface:

WoW... :stupéfait: topic très très complet et qui aide vraiment ! Merci à toi pour ce topic :o
De rien sa fait plaisir :)
 

Lagger

Responsable des lags
Contributeur
Inscription
28 Novembre 2011
Messages
1 758
Réactions
575
Points
10 308
    Réponse de Lagger Informatique Tutoriels : #2 Espace membre - Connexion & Inscription
  • #6
Super tuto ! :love:
 

Etho Beats

?
Contributeur
Inscription
21 Octobre 2014
Messages
557
Réactions
305
Points
8 005
    Réponse de Etho Beats Informatique Tutoriels : #2 Espace membre - Connexion & Inscription
  • #8
Crypter ses mots de passe en md5 et sha1 c'est outdated, tu n'as pas une solution à me proposer pour crypter plus efficacement les mots de passe dans la base de données ?
 

Iktus

Contributeur
Inscription
21 Octobre 2013
Messages
1 665
Réactions
392
Points
10 731
    Réponse de Iktus Informatique Tutoriels : #2 Espace membre - Connexion & Inscription
  • #9
Crypter ses mots de passe en md5 et sha1 c'est outdated, tu n'as pas une solution à me proposer pour crypter plus efficacement les mots de passe dans la base de données ?
 

Iktus

Contributeur
Inscription
21 Octobre 2013
Messages
1 665
Réactions
392
Points
10 731
    Réponse de Iktus Informatique Tutoriels : #2 Espace membre - Connexion & Inscription
  • #11
Ouai mais la connexion de marche plus. J'ai utilisé la fonction password_hash(($_POST['motdepasse']), PASSWORD_BCRYPT);
tu dois t'inscrire et te connecte avec la même fonction ^^
 

Etho Beats

?
Contributeur
Inscription
21 Octobre 2014
Messages
557
Réactions
305
Points
8 005
    Réponse de Etho Beats Informatique Tutoriels : #2 Espace membre - Connexion & Inscription
  • #12
tu dois t'inscrire et te connecte avec la même fonction ^^
Ouai bah c'est pas grave je suis revenu sur ton code ;)
Sinon j'ai un problème avec le message de connexion réussie (ou inscription réussie). Quand je clique pour me connecter, le refresh:3 me fait en fait attendre 3 secondes sur une page blanche et me redirige ensuite sur mon index (donc on ne voit pas le message réussi)
 

AstateGfx

Contributeur
Inscription
27 Janvier 2013
Messages
3 154
Réactions
979
Points
10 071
    Réponse de AstateGfx Informatique Tutoriels : #2 Espace membre - Connexion & Inscription
  • #13
c'est cool mec ;)

vivement un tut sur Python :D
 

AstateGfx

Contributeur
Inscription
27 Janvier 2013
Messages
3 154
Réactions
979
Points
10 071
    Réponse de AstateGfx Informatique Tutoriels : #2 Espace membre - Connexion & Inscription
  • #14
tu pourras essayé d'aléger la charge du serveur en ajoutant la fontion
ob_start , histoir d'enregistrer le flux html en temp apres tu l fais sortir ac ob_get_clean
 

Berbez

Membre
Inscription
15 Avril 2020
Messages
1
Réactions
0
Points
62
    Réponse de Berbez Informatique Tutoriels : #2 Espace membre - Connexion & Inscription
  • #15
Bonjour
Excellent tuto, mais tout les lien méga son mort ?
 

Iktus

Contributeur
Inscription
21 Octobre 2013
Messages
1 665
Réactions
392
Points
10 731
    Réponse de Iktus Informatique Tutoriels : #2 Espace membre - Connexion & Inscription
  • #16
Bonjour
Excellent tuto, mais tout les lien méga son mort ?
Mon tuto date de 2016 ^^ De plus les fichiers ne sont pas utile en sois, tout est expliqué
 

-Yoda-

Membre
Inscription
31 Décembre 2020
Messages
1
Réactions
0
Points
14
    Réponse de -Yoda- Informatique Tutoriels : #2 Espace membre - Connexion & Inscription
  • #17
Mon tuto date de 2016 ^^ De plus les fichiers ne sont pas utile en sois, tout est expliqué
Bojour er bravo.
A part que les tables sont importantes quand même et les créer en déchiffrant le code dans les requêtes aie aie :/
 

MEKr

Membre
Inscription
8 Septembre 2019
Messages
66
Réactions
16
Points
656
    Réponse de MEKr Informatique Tutoriels : #2 Espace membre - Connexion & Inscription
  • #18
Bojour er bravo.
A part que les tables sont importantes quand même et les créer en déchiffrant le code dans les requêtes aie aie :/
de toute facon faire du php sans framework y'a 0 intérêt tu vas te retrouver avec des failles dans tout les sens
 
Auteur Discussions similaires Forum Réponses Date
Iktus Tutoriels 4
Iktus Tutoriels 20
Switch. Tutoriels 3

Discussions similaires


Haut Bas