IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Gestion espace utilisateur


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 112
    Points : 49
    Points
    49
    Par défaut Gestion espace utilisateur
    Bonjour, j'ai suivi le tuto de Grafikart sur "la création d'un compte utilisateur" et il semble que moi j'ai commis des erreurs dans mes codes, des erreurs que je n'arrive pas à corriger d'abord. J'ai donc besoin d'aide pour les résoudre!
    1) Primo, actuellement lorsque je m'inscris, je reçois le mail de validation dans mon dossier spam au lieu de le recevoir directement dans ma boîte de reception.
    2) Deuxièmement, après la validation du compte, lorsque j’essaie de me connecter à travers la page "login.php", je n'y arrive pas, à moins que je coche l'option "se souvenir de moi" qui est relative au cookies. Alors que je dois normalement pouvoir me connecter sans cookie, et, avec cookie lorsque je le voudrai.
    3) Lorsque je m'inscris avec un 2eme compte, je n'arrive pas à me connecter avec ce dernier, si ce n'est le 1er.
    En effet, le code est subdivisé en plusieurs pages que voici:

    1) La page "register.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    <?php
    require_once 'inc/functions.php';
            session_start();
            if(!empty($_POST))
            {
                $errors=array();
                require_once 'inc/db.php';
     
                if(empty($_POST['username']) || !preg_match('/^[a-zA-Z0-9_]+$/', $_POST['username']))
                {
                    $errors['username'] = "Votre pseudo n'est pas valide (alphanumérique)";
                } else
                     {
                         $req = $pdo->prepare("SELECT id FROM users WHERE username = ? ");
                         $req->execute([$_POST['username']]);
                         $user = $req->fetch();
     
                         if($user)
                         {
                             $errors['username'] = "Ce pseudo est deja pris";
                         }
                     }
     
                if(empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
                {
                    $errors['email'] = "Votre email n'est pas valide";
                } else
                {
                    $req = $pdo->prepare("SELECT id FROM users WHERE email = ? ");
                    $req->execute([$_POST['email']]);
                    $user = $req->fetch();
     
                    if($user)
                    {
                        $errors['email'] = "Cet email est deja utilisé pour un autre compte";
                    }
                }
     
                if(empty($_POST['password']) || $_POST['password'] != $_POST['password_confirm'])
                {
                    $errors['password'] = "Vous devez rentrer un mot de passe valide";
                }
     
                if(empty($errors))
                {
                    $req = $pdo->prepare("INSERT INTO users SET username = ?, password = ?, email = ?, confirmation_token= ?");
                    $password = password_hash($_POST['password'], PASSWORD_BCRYPT);
                    $token = str_random(60);
     
                    $req->execute([$_POST['username'], $password , $_POST['email'], $token]);
                    $user_id = $pdo -> lastInsertId();
                    mail($_POST['email'], 'Confirmation de votre compte', "Afin de valider votre compte, merci de cliquersur ce lien\n\nhttp://localhost/comptes/confirm.php?id=$user_id&token=$token");
                    $_SESSION['flash']['success'] = "Un email de confirmation vous a été envoyé pour valider votre compte";
                    header('Location:login.php');
                    exit();
                }
            }
       ?>
     
       <?php require 'inc/header.php'; ?>
     
        <h1>S'inscrire</h1>
     
             <?php if(!empty($errors)): ?>
                 <div class="alert alert-danger">
                      <p>Vous n'avez pas rempli le formulaire correctement</p>
                      <ul>
                           <?php foreach($errors as $error): ?>
                                <li><?= $error ?></li>
                           <?php endforeach; ?>
                      </ul>
                 </div>
             <?php endif; ?>
     
        <form action="" method="POST">
             <div class="form-group">
                 <label for="">Pseudo</label>
                 <input type="text" name="username" class="form-control"/>
             </div>
     
            <div class="form-group">
                <label for="">Email</label>
                <input type="text" name="email" class="form-control"/>
            </div>
     
            <div class="form-group">
                <label for="">Mot de passe</label>
                <input type="password" name="password" class="form-control"/>
            </div>
     
            <div class="form-group">
                <label for="">Confirmez votre mot de passe</label>
                <input type="password" name="password_confirm" class="form-control"/>
            </div>
     
            <button type="submit" class="btn-btn primary">M'inscrire</button>
        </form>
    <?php require 'inc/footer.php'; ?>
    2) La page "login.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    <?php
       require_once'inc/functions.php';
       reconnect_from_cookie();
       if(isset($_SESSION['auth']))
       {
           header('Location: account.php');
           exit();
       }
    if(!empty($_POST) && !empty($_POST['username']) && !empty($_POST['password']))
    {
        require_once'inc/db.php';
        $req = $pdo->prepare('SELECT * FROM users WHERE (username = :username OR email = :username) AND confirmed_at IS NOT NULL');
        $req->execute(['username' => $_POST['username']]);
        $user = $req->fetch();
        if(password_verify($_POST['password'], $user->password))
        {
            $_SESSION['auth'] = $user;
            $_SESSION['flash']['success'] = 'Vous êtes maintenant connecté';
     
            if($_POST['remember'])
            {
                $remember_token = str_random(250);
                $pdo->prepare('UPDATE users SET remember_token = ? WHERE id = ?')->execute([$remember_token, $user->id]);
                setcookie('remember', $user->id . '==' . $remember_token . sha1($user->id . 'ratonlaveurs'), time() + 60 * 60 * 24 * 7);
            }
            header('Location: account.php');
            exit();
        }else{
                $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorecte';
             }
    }
    ?>
     
    <?php require_once 'inc/header.php'; ?>
     
    <h1>Se connecter</h1>
     
    <form action="" method="POST">
        <div class="form-group">
            <label for="">Pseudo ou Email</label>
            <input type="text" name="username" class="form-control"/>
        </div>
     
        <div class="form-group">
            <label for="">Mot de passe <a href="forget.php">(J'ai oublié mon mot de passe)</a></label>
            <input type="password" name="password" class="form-control"/>
        </div>
     
        <div class="form-group">
            <label>
                <input type="checkbox" name="remember" value="1"/> Se souvenir de moi
            </label>
        </div>
     
        <button type="submit" class="btn-btn primary">Se connecter</button>
    </form>
     
    <?php require_once 'inc/footer.php'; ?>
    3) La page "account.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?php
    $user_id=$_GET['id'];
    $token=$_GET['token'];
     
    require 'inc/db.php';
     
    $req = $pdo->prepare('SELECT * FROM users WHERE id = ?');
    $req->execute([$user_id]);
    $user = $req->fetch();
     
    session_start();
    if($user&&$user->confirmation_token == $token)
    {
        $pdo->prepare('UPDATE users SET confirmation_token = NULL, confirmed_at = NOW() WHERE id = ?')->execute([$user_id]);
     
        $_SESSION['flash']['success'] = "Votre compte a bien été validé";
        $_SESSION['auth'] = $user;
        header('Location: account.php');
    } else
          {
              $_SESSION['flash']['danger'] = "Ce token n'est plus valide";
              header('Location: login.php');
          }
    4) La page "logout.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
         session_start();
         setcookie('remember', NULL, -1);
         unset($_SESSION['auth']);
         $_SESSION['flash']['success'] = "Vous êtes maintenant déconnecté";
         header('location: login.php');
    5) La page "reset.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    <?php
    if(isset($_GET['id']) && isset($_GET['token']))
    {
        require 'inc/db.php';
        require 'inc/functions.php';
        $req = $pdo->prepare('SELECT * FROM users WHERE id = ? AND reset_token IS NOT NULL AND reset_token = ? AND reset_at > DATE_SUB(NOW(), INTERVAL 30 MINUTE)');
        $req->execute([$_GET['id'], $_GET['token']]);
        $user = $req->fetch();
        if($user)
        {
            if(!empty($_POST))
            {
                if(!empty($_POST['password']) && $_POST['password'] == $_POST['password_confirm'])
                {
                    $password = password_hash($_POST['password'], PASSWORD_BCRYPT);
                    $pdo->prepare('UPDATE users SET password = ?, reset_at = NULL, reset_token = NULL')->execute([$password]);
                    session_start();
                    $_SESSION['flash']['success'] = 'Votre mot de passe a bien été modifié';
                    $_SESSION['auth'] = $user;
                    header('Location: account.php');
                    exit();
                }
            }
        }else
        {
            session_start();
            $_SESSION['flash']['danger'] = "Ce token n'est pas valide";
            header('Location: login.php');
            exit();
        }
    }
    else
        {
            header('Location: login.php');
            exit();
        }
    ?>
    <?php require_once 'inc/header.php'; ?>
     
    <h1>Réinitialiser mon mot de passe</h1>
     
    <form action="" method="POST">
     
        <div class="form-group">
            <label for="">Mot de passe</label>
            <input type="password" name="password" class="form-control"/>
        </div>
     
        <div class="form-group">
            <label for="">Confirmation du mot de passe</label>
            <input type="password" name="password_confirm" class="form-control"/>
        </div>
     
        <button type="submit" class="btn-btn primary">Réinitialiser votre mot de passe</button>
    </form>
     
    <?php require_once 'inc/footer.php'; ?>
    6) La page "confirm.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?php
    $user_id=$_GET['id'];
    $token=$_GET['token'];
     
    require 'inc/db.php';
     
    $req = $pdo->prepare('SELECT * FROM users WHERE id = ?');
    $req->execute([$user_id]);
    $user = $req->fetch();
     
    session_start();
    if($user&&$user->confirmation_token == $token)
    {
        $pdo->prepare('UPDATE users SET confirmation_token = NULL, confirmed_at = NOW() WHERE id = ?')->execute([$user_id]);
     
        $_SESSION['flash']['success'] = "Votre compte a bien été validé";
        $_SESSION['auth'] = $user;
        header('Location: account.php');
    } else
          {
              $_SESSION['flash']['danger'] = "Ce token n'est plus valide";
              header('Location: login.php');
          }
    7) La page de connexion à la base de données "db.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $pdo = new PDO('mysql:dbname=comptes; host:localhost', 'root', '');
    $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo ->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
    8) La page des fonctions "functions.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    <?php
    function debug($variable)
    {
    echo '<pre>'.print_r($variable, true).'</pre>';
    }
     
    function str_random ($length)
    {
         $alphabet = "123456789azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN";
         return substr(str_shuffle(str_repeat($alphabet, $length)), 0, $length);
    }
     
    function logged_only()
    {
         if(session_status() == PHP_SESSION_NONE)
         {
              session_start();
         }
         if(!isset($_SESSION['auth']))
         {
              $_SESSION['flash']['danger'] = "Vous n'avez pas le droit d'accéder à cette page";
              header('Location: login.php');
              exit();
         }
    }
     
    function reconnect_from_cookie()
    {
         if(session_status() == PHP_SESSION_NONE)
         {
              session_start();
         }
     
         if(isset($_COOKIE['remember']) && !isset($_SESSION['auth']))
         {
              require_once'db.php';
              if(!isset($pdo))
              {
                   global $pdo;
              }
              $remember_token = $_COOKIE['remember'];
              $parts = explode('==', $remember_token);
              $user_id = $parts['0'];
              $req = $pdo->prepare('SELECT * FROM users WHERE id = ?');
              $req->execute([$user_id]);
              $user = $req->fetch();
              if($user)
              {
                   $expected = $user_id . '==' . $user->remember_token . sha1($user_id . 'ratonlaveurs');
                   if($expected == $remember_token)
                   {
                        session_start();
                        $_SESSION['auth'] = $user;
                        setcookie('remember', $remember_token, time() + 60 * 60 * 24 * 7);
                   }else
                   {
                        setcookie('remember', null, -1);
                   }
              }else
              {
                   setcookie('remember', null, -1);
              }
         }
    }
    9) La page "header.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    <?php
        if(session_status() == PHP_SESSION_NONE);
             {
                session_start();
             }
    ?>
     
    <!DOCTYPE html>
       <html lang="en">
       <head>
              <meta charset="utf-8">
              <meta http-equiv="x-ua-compatible" content="IE=edge">
              <meta name="viewport" content="width=device-width, initial-scale=1">
              <!-- The above 3 meta tags ... -->
              <meta name="description" content="">
              <link rel="icon" href="../../favicon.ico">
              <title> Mon super projet </title>
     
              <!-- BOOTSTRAP CORE CSS -->
              <link rel="stylesheet" href="css/app.css">
        </head>
        <body>
                <nav class="navbar navbar-inverse">
                    <div class="container">
                        <div class="navbar-header">
                           <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
                               <span class="icon-bar"></span>
                               <span class="icon-bar"></span>
                               <span class="icon-bar"></span>
                               <span class="icon-bar"></span>
                               <a class="navbar-brand" href="#">Mon super projet</a>
                           </button>
                        </div>
                        <div id="navbar" collapse navbar-collapse>
                            <ul class="nav navbar-nav">
                                <?php if(isset($_SESSION['auth'])): ?>
                                    <li><a href="logout.php">Se déconnecter</a></li>
     
                                    <?php else: ?>
    		    <h4>Mon super projet</h4>
                                        <li> <a href="register.php">S'inscrire</a></li>
                                        <li> <a href="login.php">Se connecter</a></li>
                                <?php endif; ?>
                            </ul>
                        </div>
                    </div>
                </nav>
     
              <div class="container">
     
                   <?php if(isset($_SESSION['flash'])) : ?>
     
                       <?php foreach($_SESSION['flash'] as $type => $message): ?>
     
                           <div class="alert alert<?= $type; ?>">
                               <?= $message; ?>
                           </div>
     
                       <?php endforeach; ?>
     
                            <?php unset($_SESSION['flash']); ?>
                   <?php endif; ?>

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    dans le script login.php, je ne vois de session_start();. C'est normal ?

    Pour le spam, tu dois formater ton mail plus proprement afin que son score antispam ne soit pas suffisant pour que ton logiciel de messagerie le dégage en spam.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 112
    Points : 49
    Points
    49
    Par défaut
    Oui c'est normal parce qu'il ya déjà une session_start(); dans la page "funtcions.php" qui est insérée dans la page "login.php"
    Pouvez-vous me donner une méthode pour formater mon mail svp?

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Pour les mails, regarde du côté de PhpMailer : ça te facilitera la vie et te permettra d'ajouter des headers propres.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 112
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par Celira Voir le message
    Pour les mails, regarde du côté de PhpMailer : ça te facilitera la vie et te permettra d'ajouter des headers propres.
    Bonjour Celira,
    j'ai telechargé PhpMailer, je l'ai décompressé dans le dossier de mon projet et je suis entrain de chercher à le configurer pour continuer mon projet. Malheureusement il me pose un problème, du fait que je ne l'ai jamais utilisé.
    Voici le message d'erreur qu'il m'affiche:
    Warning: require_once(comptes_utilisateurs/class.phpmailer.php): failed to open stream: No such file or directory in C:\wamp\www\comptes_utilisateurs\register.php on line 57

    Fatal error: require_once(): Failed opening required 'comptes_utilisateurs/class.phpmailer.php' (include_path='.;C:\php\pear') in C:\wamp\www\comptes_utilisateurs\register.php on line 57
    Et voici le code de la page sur laquelle je l'ai inclu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
     
       <?php
            require_once 'inc/functions.php';
            session_start();
            if(!empty($_POST))
            {
                $errors=array();
                require_once 'inc/db.php';
     
                if(empty($_POST['username']) || !preg_match('/^[a-zA-Z0-9_]+$/', $_POST['username']))
                {
                    $errors['username'] = "Votre pseudo n'est pas valide (alphanumérique)";
                } else
                     {
                         $req = $pdo->prepare("SELECT id FROM users WHERE username = ? ");
                         $req->execute([$_POST['username']]);
                         $user = $req->fetch();
     
                         if($user)
                         {
                             $errors['username'] = "Ce pseudo est deja pris";
                         }
                     }
     
                if(empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
                {
                    $errors['email'] = "Votre email n'est pas valide";
                } else
                {
                    $req = $pdo->prepare("SELECT id FROM users WHERE email = ? ");
                    $req->execute([$_POST['email']]);
                    $user = $req->fetch();
     
                    if($user)
                    {
                        $errors['email'] = "Cet email est deja utilisé pour un autre compte";
                    }
                }
     
                if(empty($_POST['password']) || $_POST['password'] != $_POST['password_confirm'])
                {
                    $errors['password'] = "Vous devez rentrer un mot de passe valide";
                }
     
     
                if(empty($errors))
                {
                    $req = $pdo->prepare("INSERT INTO users SET username = ?, password = ?, email = ?, confirmation_token= ?");
                    $password = password_hash($_POST['password'], PASSWORD_BCRYPT);
                    $token = str_random(60);
     
                    $req->execute([$_POST['username'], $password , $_POST['email'], $token]);
                    $user_id = $pdo -> lastInsertId();
     
    				/* DEBUT MES MODIFICATIONS AVEC PHPMAILER*/
     
    				// On va chercher la classe PHPMailer
    					require_once('comptes_utilisateurs/class.phpmailer.php');
    					// Création d'un nouvel objet $mail
    					$mail = new PHPMailer();
    					// Encodage
    					$mail->CharSet = 'UTF-8';
    					// Corp de notre email
    					$body = "<p>Salut tout le <u>monde</u>,
    					voici un mail en <b>HTML</b></p>";
    					$body = mail($_POST['email'], 'Confirmation de votre compte', "Afin de valider votre compte, 
    				            merci de cliquer sur ce lien\n\nhttp://localhost/Comptes/confirm.php?id=$user_id&token=$token");
                                $_SESSION['flash']['success'] = "Un email de confirmation vous a été envoyé pour valider votre compte";
    					// Expediteur, adresse de retour et destinataire :
    					$mail->SetFrom("busimaker@gmail.com", "Mark Busi");
    					$mail->AddReplyTo("busimaker@gmail.com", "Mark Busi");
    					$mail->AddAddress("yoro@yahoo.fr", "Yoro");
    					// Sujet du mail
    					$mail->Subject = "Test d'envoi de mail avec PHPMailer";
    					// Le message
    					$mail->MsgHTML($body);
    					// Pièce jointe
    					$mail->AddAttachment("images/coeur.jpg");
    					// Envoi de l'email
    					if ( !$mail->Send() ) {
    					echo "Echec de l'envoi du mail, Erreur: " . $mail->ErrorInfo;
    					} else {
    					echo "Message envoyé!";
    					}
    					unset($mail);
    				/* FIN DE MES MODIFICATIONS AVEC PHPMAILER*/
                    /* mail($_POST['email'], 'Confirmation de votre compte', "Afin de valider votre compte, 
    				merci de cliquer sur ce lien\n\nhttp://localhost/Comptes/confirm.php?id=$user_id&token=$token");
                    $_SESSION['flash']['success'] = "Un email de confirmation vous a été envoyé pour valider votre compte"; 
                    header('Location:login.php');
                    exit();*/
     
                }
            }
       ?>
     
     
       <?php require 'inc/header.php'; ?>
     
        <h1>S'inscrire</h1>
     
             <?php if(!empty($errors)): ?>
                 <div class="alert alert-danger">
                      <p>Vous n'avez pas rempli le formulaire correctement</p>
                      <ul>
                           <?php foreach($errors as $error): ?>
                                <li><?= $error ?></li>
                           <?php endforeach; ?>
                      </ul>
                 </div>
             <?php endif; ?>
     
        <form action="" method="POST">
             <div class="form-group">
                 <label for="">Pseudo</label>
                 <input type="text" name="username" class="form-control"/>
             </div>
     
            <div class="form-group">
                <label for="">Email</label>
                <input type="text" name="email" class="form-control"/>
            </div>
     
            <div class="form-group">
                <label for="">Mot de passe</label>
                <input type="password" name="password" class="form-control"/>
            </div>
     
            <div class="form-group">
                <label for="">Confirmez votre mot de passe</label>
                <input type="password" name="password_confirm" class="form-control"/>
            </div>
     
            <button type="submit" class="btn-btn primary">M'inscrire</button>
        </form>
     
    <?php require 'inc/footer.php'; ?>

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Je ne connais pas phpmailer mais là il s'agit d'une erreur de require. Et donc l'erreur t'indique que le chemin que tu indiques dans le require n'est pas bon.

    Plus précisément ici C:\wamp\www\comptes_utilisateurs\register.php n'est pas un chemin qui existe sur le serveur.

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 112
    Points : 49
    Points
    49
    Par défaut
    C'est bien ce que j'ai compris, mais c'est maintenant qu'on me parle de PhpMailer. Et donc je vois même pas ou est-ce que je dois mettre ces fichiers et quel est le bon chemin?
    De toute façon, je vois que son utilisation n'est pas obligatoire pour résoudre mon problème. Je veux juste qu'on m'aide à mettre mes codes de ma première publication en haut au propre.

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    t'es sûr que ton fichier PHPMailer s'appelle class.phpmailer.php ?
    Normalement, Tu devrais avoir un répertoire PHPMailer avec les fichier de la bibliothèque et cela devrait être plutôt require_once 'comptes_utilisateurs'.DIRECTORY_SEPARATOR.'PHPMailer'.DIRECTORY_SEPARATOR.'PHPMailer.php';

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 112
    Points : 49
    Points
    49
    Par défaut
    Salut rawsrc, je fouille dans le dossier phpmailer que j'ai renommé en "classes" mais je ne vois pas de fichier portant le nom "class.phpmailer.php".
    Au fait je veux me passer de phpmailer même pour résoudre mon problème. Veuillez jeter un œil sur mes codes de la première publication pour voir si vous pouvez m'aider.

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    ça fait un sacré travail de reprise de code...
    Tu démarres tes sessions même quand l'utilisateur n'est pas connecté ! ^^
    Alors je m'ys suis collé à moitié :
    j'ai repris ton code db.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
     
    use PDO;
     
    // @author : rawsrc - 2018 - Pour DVP
    // on vérifie si la fonction de connexion a déjà été définie afin d'éviter de la redéfinir
    if ( ! function_exists('db_connexion')) {
       function db_connexion() {
          // une fois ouverte, on renvoie toujours la même connexion
          static $pdo;
          // on vérifie si la connexion n'a pas déjà été initialisée
          if ( ! ($pdo instanceof PDO)) {
             // tentative d'ouverture de la connexion MySQL
             try {
                $pdo = new PDO('mysql:host=localhost;port=3306;dbname=comptes;charset=utf8','root', '', [
                    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
                    PDO::ATTR_EMULATE_PREPARES   => false,
                    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ
                ]);
             } catch (PDOException $e) {
                throw new InvalidArgumentException('Erreur connexion à la base de données : '.$e->getMessage());
                exit;
             }
          }
          // renvoi de la ressource : connexion à la base de données
          return $pdo;
       }
    }
    return db_connexion();
    Ensuite ton code functions.php (partiellement):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    function reconnect_from_cookie()
    {
        if (isset($_COOKIE['remember'])) {
            [$cookie_user_id, $cookie_token] = explode('==', $_COOKIE['remember'], 2) + ['', ''];
     
            if (empty($cookie_user_id) || empty($cookie_token) || ( ! ctype_digit($cookie_user_id))) {
                $login = true;
            } else {
                $pdo  = include 'inc/db.php';
                $exec = $stmt->execute('SELECT * FROM users WHERE id = '.(int)$cookie_user_id);
                $user = $exec->fetch();
     
                if (empty($user->remember_token) || ($cookie_token !== ($user->remember_token.sha1($cookie_user_id.'ratonlaveurs')))) {
                    $login = true;
                } else {
                    if (session_status() === PHP_SESSION_NONE) {
                        session_start();
                    }
                    $_SESSION['auth'] = $user;
                    setCookieRememberMe($user->id, $user->remember_token);
                }
            }
        } else {
            $login = true;
        }
     
        $location = isset($login) ? 'login' : 'account';
        header("location:{$location}.php");
        exit;
    }
     
    function setCookieRememberMe($user_id, $token)
    {
        setcookie('remember', $user_id.'=='.$token.sha1($user_id.'ratonlaveurs'), time() + 60 * 60 * 24 * 7);
    }
    Dans ces fonctions logged_only() est un non-sens : comment tu peux écrire en session des données alors que l'utilisateur n'est pas connecté ?!!??

    Et enfin, login.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <?php
     
    require_once 'inc/functions.php';
     
    // si un cookie a été transmis, on essaie de se connecter avec
    // si la connexion réussit, la redirection est faite sur la page account.php
    if (isset($_COOKIE['remember'])) {
       reconnect_from_cookie();
    }
     
    if (isset($_POST['submit'], $_POST['username'], $_POST['password'])) {
        $pdo  = include 'inc/db.php';
        $stmt = $pdo->prepare('SELECT * FROM users WHERE (username = :username OR email = :email) AND confirmed_at IS NOT NULL');
        $exec = $stmt->execute([':username' => $_POST['username'], ':email' => $_POST['username']]);
        $user = $exec->fetch();
     
        if (password_verify($_POST['password'], $user->password)) {
            session_start();
     
            $_SESSION['auth'] = $user;
            $_SESSION['flash']['success'] = 'Vous êtes maintenant connecté';
     
            if (isset($_POST['remember']) && ((int)$_POST['remember'] === 1)) {
                $token = str_random(250);
                $stmt = $pdo->prepare('UPDATE users SET remember_token = :token WHERE id = :id');
                $exec = $stmt->execute([':token' => $token, ':id' => $user->id]);
                setCookieRememberMe($user->id, $token);
     
                header('location:account.php');
                exit;
            }
        } else {
            $alert = '<p>Identifiant ou mot de passe incorrecte</p>';
        }
    }
    ?>
    <?php require_once 'inc/header.php'; ?>
    <h1>Se connecter</h1>
     
    <form action="" method="POST">
        <div class="form-group">
            <label for="">Pseudo ou Email</label>
            <input type="text" name="username" class="form-control"/>
        </div>
     
        <div class="form-group">
            <label for="">Mot de passe <a href="forget.php">(J'ai oublié mon mot de passe)</a></label>
            <input type="password" name="password" class="form-control"/>
        </div>
     
        <div class="form-group">
            <label>
                <input type="checkbox" name="remember" value="1"/> Se souvenir de moi
            </label>
        </div>
     
        <button type="submit" name="submit" class="btn-btn primary">Se connecter</button>
        <?= $alert ?? '' ?>
    </form>
    <?php require_once 'inc/footer.php'; ?>
    Tu noteras la nouvelle manière d'instancier $pdo. Passe en revue tes autres scripts.

    Comme toujours, je n'ai rien testé, ça sort du four (enfin de notepad++)

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 112
    Points : 49
    Points
    49
    Par défaut
    Bonjour rawsrc,
    Est-ce que vous pouvez le faire en procédural? Car je n'ai pas encore abordé l'orienté objet. Et merci de tester .

  12. #12
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 112
    Points : 49
    Points
    49
    Par défaut
    Bonjour, est-ce qu'on peut m'aider?

Discussions similaires

  1. Gestion d'utilisateurs
    Par rossy dans le forum ASP
    Réponses: 2
    Dernier message: 28/04/2005, 15h40
  2. [Oracle]probleme de gestion des utilisateurs
    Par gentarik dans le forum Oracle
    Réponses: 5
    Dernier message: 09/03/2005, 12h58
  3. [Gestion des utilisateurs] Changer l'interface simplifiée
    Par sekiryou dans le forum Windows XP
    Réponses: 4
    Dernier message: 19/01/2005, 05h42
  4. Administration MySQL gestion des utilisateurs
    Par MaxiMax dans le forum Administration
    Réponses: 2
    Dernier message: 01/07/2004, 13h56
  5. Gestion des Utilisateurs depuis une application
    Par LLaurent dans le forum XMLRAD
    Réponses: 4
    Dernier message: 25/03/2003, 16h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo