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 :

Authentification et Gestion Utilisateur


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut Authentification et Gestion Utilisateur
    Bonjour à tous,
    Actuellement sur un projet PHP pour création d'un blog modèle mvc ( Mon premier projet mvc ) pour cela j'ai suivi un tutoriel que je voudrais à présent améliorer.

    Je fais face à un problème pour mon Module de Connexion.

    Pour commencer le blog j'ai crée un système d’authentification
    à l'aide d'un fichier xml qui sauvegarde mes identifiants.

    App.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="utf-8" ?>
    <definitions>
        <define var="login" value="admin" ></define>
        <define var="pass" value="admin" ></define>
    </definitions>
    Je voudrais remplacer celui_ci par ma base de données où j'ai crée une table "Users".

    Cependant je ne sais pas comment Modifier mon Controlleur pour que cela fonctionne !

    Voici le Code de mon ConnexionController.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
    class ConnexionController extends BackController
    {
        public function executeIndex(HTTPRequest $request)
        {
            $this->page->addVar('title', 'Connexion');
     
            if ($request->postExists('login')) {
                $login = $request->postData('login');
                $password = $request->postData('password');
     
                if ($login == $this->app->config()->get('login') && $password == $this->app->config()->get('pass')) {
                    $this->app->user()->setAuthenticated(true);
                    $this->app->httpResponse()->redirect('.');
                } else {
                    $this->app->user()->setFlash('Le pseudo ou le mot de passe est incorrect.');
                }
            }
        }
     
    }
    Ainsi que sa Classe Mère le BackController.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
    abstract class BackController extends ApplicationComponent
    {
        protected $action = '';
        protected $module = '';
        protected $page = null;
        protected $view = '';
        protected $managers = null;
     
        public function __construct(Application $app, $module, $action)
        {
            parent::__construct($app);
     
            $this->managers = new Managers('PDO', PDOFactory::getMysqlConnexion());
            $this->page = new Page($app);
     
            $this->setModule($module);
            $this->setAction($action);
            $this->setView($action);
        }
     
        public function execute()
        {
            $method = 'execute'.ucfirst($this->action);
     
            if (!is_callable([$this, $method]))
            {
                throw new \RuntimeException('L\'action "'.$this->action.'" n\'est pas définie sur ce module');
            }
     
            $this->$method($this->app->httpRequest());
        }
     
        public function page()
        {
            return $this->page;
        }
     
        public function setModule($module)
        {
            if (!is_string($module) || empty($module))
            {
                throw new \InvalidArgumentException('Le module doit être une chaine de caractères valide');
            }
     
            $this->module = $module;
        }
     
        public function setAction($action)
        {
            if (!is_string($action) || empty($action))
            {
                throw new \InvalidArgumentException('L\'action doit être une chaine de caractères valide');
            }
     
            $this->action = $action;
        }
     
        public function setView($view)
        {
            if (!is_string($view) || empty($view))
            {
                throw new \InvalidArgumentException('La vue doit être une chaine de caractères valide');
            }
     
            $this->view = $view;
     
            $this->page->setContentFile(__DIR__.'/../../App/'.$this->app->name().'/Modules/'.$this->module.'/Views/'.$this->view.'.php');
        }
    }
    J'ai réfléchi à la requête SQL que je devrais utiliser mais comme je le disais je ne sais pas comment l'intégrer dans mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $sql = 'SELECT pseudo,password FROM users WHERE pseudo = :pseudo AND password = :password';

    Merci d'avance pour votre réponse et pour aide !
    N'hésitez pas à me demander si vous avez besoin de plus de renseignements sur les classes adjacentes !

  2. #2
    Membre actif Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Points : 273
    Points
    273
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->app->config()->get('login')
    c'est ce que cette méthode fait qu'il faut changer pour aller chercher dans la bdd plutôt que dans le fichier xml, il faudra aussi lui passer en argument tes variables POST.
    Même une feuille de papier est plus légère si on la porte à deux.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Merci Jisig pour ta réponse rapide !

    j'ai modifié le code du ConnexionController.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
     public function executeIndex(HTTPRequest $request)
        {
            $this->page->addVar('title', 'Connexion');
    
            if ($request->postExists('login')) {
                $login = $request->postData('login');
                $password = $request->postData('password');
                $sql = 'SELECT pseudo,password FROM users WHERE pseudo = :pseudo AND password = :password';
                if ($login == pseudo.bdd and $password == password.bdd) {
                    $this->app->user()->setAuthenticated(true);
                    $this->app->httpResponse()->redirect('.');
                } else {
                    $this->app->user()->setFlash('Le pseudo ou le mot de passe est incorrect.');
                }
            }
        }
    Je dois remplacer les variables " pseudo.bdd et password.bdd " donc avec des Variables POST, pourrais-tu m'aider pour l'écriture exacte ?

  4. #4
    Membre actif Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Points : 273
    Points
    273
    Par défaut
    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
    public function executeIndex(HTTPRequest $request)
        {
            $this->page->addVar('title', 'Connexion');
     
            if ($request->postExists('login')) {
                $login = $request->postData('login');
                $password = $request->postData('password');
                $sql = 'SELECT pseudo,password FROM users WHERE pseudo = ' . $login . ' AND password = ' . $password;
                if (...) { // dans cette condition tu vérifies si tu as bien récupéré le user depuis ta requête sql
                    $this->app->user()->setAuthenticated(true);
                    $this->app->httpResponse()->redirect('.');
                } else {
                    $this->app->user()->setFlash('Le pseudo ou le mot de passe est incorrect.');
                }
            }
        }
    pour moi ça devrait ressembler à un truc du genre

    ps : je mettrais plutôt ça dans la partie modèle que controller, manipuler les données depuis les modèles et laisser aux controllers l'aspect logique de l'app.
    Même une feuille de papier est plus légère si on la porte à deux.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Merci Jisig ! Désolé pour le temps de réponse je recherche des solutions sur la doc PHP en même temps

    Voici le code du ConnexionController.php à nouveau

    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
     public function executeIndex(HTTPRequest $request)
        {
            $this->page->addVar('title', 'Connexion');
     
            if ($request->postExists('login')) {
                $login = $request->postData('login');
                $password = $request->postData('password');
                $db = ('SELECT pseudo,password FROM users WHERE pseudo = ' . $login . ' AND password = ' . $password);
                if ($login == $_POST['pseudo'] and $password == $_POST['password']) {
                    $this->app->user()->setAuthenticated(true);
                    $this->app->httpResponse()->redirect('.');
                } else {
                    $this->app->user()->setFlash('Le pseudo ou le mot de passe est incorrect.');
                }
            }
        }
    J'ai ce message d'erreur pour le moment lorsque je rentre un pseudo et un password :

    Notice: Undefined index: pseudo in C:\wamp\www\projet3\App\Backend\Modules\Connexion\ConnexionController.php on line 24


    Je ne dois pas encore l'écrire correctement ...

  6. #6
    Membre actif Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Points : 273
    Points
    273
    Par défaut
    je suppose que tu as bien ta connexion à ta bdd.

    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
    public function executeIndex(HTTPRequest $request)
        {
            $this->page->addVar('title', 'Connexion');
     
            if ($request->postExists('login')) {
                $login = $request->postData('login');
                $password = $request->postData('password');
                if (mysql_query ('SELECT count(*) FROM users WHERE pseudo = ' . $login . ' AND password = ' . $password) == 1) { // ça doit te retourner un résultat (vu qu'un login est unique) à condition que le mot de passe est bon bien sûr ! après tu traites ça comme tu le sens :) 
                    $this->app->user()->setAuthenticated(true);
                    $this->app->httpResponse()->redirect('.');
                } else {
                    $this->app->user()->setFlash('Le pseudo ou le mot de passe est incorrect.');
                }
            }
        }
    ça devrait ressembler à quelque chose du genre, après je ne sais pas si tu utilises pdo... mais le principe reste le même.
    Même une feuille de papier est plus légère si on la porte à deux.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Voilà ma connexion à la base de données : PDOFactory.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class PDOFactory
    {
        public static function getMysqlConnexion()
        {
            $db = new \PDO('mysql:host=localhost;dbname=blogecrivainbdd', 'root', '');
            $db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
     
            return $db;
        }
    }
    J'essaye ce que tu m'as envoyé de suite merci Jisig

    Ps: le mysql_query est déprécié avec le PHP7 si tu peux m'indiquer pour le PDO c'est parfait

  8. #8
    Membre actif Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Points : 273
    Points
    273
    Même une feuille de papier est plus légère si on la porte à deux.

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Voilà j'ai modifié le Controller :


    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
    class ConnexionController extends BackController
    {
        public function executeIndex(HTTPRequest $request)
        {
            $this->page->addVar('title', 'Connexion');
     
            if ($request->postExists('login'))
            {
                $login = $request->postData('login');
                $password = $request->postData('password');
     
     
                if (PDOFactory::getMysqlConnexion('SELECT count(*) FROM users WHERE pseudo = ' . $login . ' AND password = ' . $password) == 1)
                {
                    $this->app->user()->setAuthenticated(true);
                    $this->app->httpResponse()->redirect('.');
                }
                else
                {
                    $this->app->user()->setFlash('Le pseudo ou le mot de passe est incorrect.');
                }
            }
        }
    Petite Avancée cela fonctionne ! Le seul souci c'est que cela fonctionne tout le temps... Quand les deux champs sont vides, quand je rentre n'importe quel pseudo et password :s
    Problème dans la condition?

  10. #10
    Membre actif Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Points : 273
    Points
    273
    Par défaut
    tu dois faire ta requête depuis la connexion à ta db

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($db->query('SELECT count(*) FROM users WHERE pseudo = ' . $login . ' AND password = ' . $password) == 1)
    Même une feuille de papier est plus légère si on la porte à deux.

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Merci encore pour ta réponse Jisig

    J'ai essayé cela justement mais j'obtiens une erreur :

    Notice: Undefined variable: db in C:\wamp\www\projet3\App\Backend\Modules\Connexion\ConnexionController.php on line 25

    Pourtant au début de ma Classe ConnexionController.php, j'ai bien indiqué pour qu'il prenne la variable $db dans ma Classe PDOFactory :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use \KZFramework\PDOFactory;

    ( je te remets le code de ma Classe PDOFactory )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class PDOFactory
    {
        public static function getMysqlConnexion()
        {
            $db = new \PDO('mysql:host=localhost;dbname=blogecrivainbdd', 'root', '');
            $db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
     
            return $db;
        }
    }

  12. #12
    Membre actif Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Points : 273
    Points
    273
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use \KZFramework\PDOFactory;
    getMysqlConnexion();
    Même une feuille de papier est plus légère si on la porte à deux.

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Bonjour Jisig,

    J'ai fait la modification, mon message d'erreur a changé :

    Fatal error: Call to undefined function App\Backend\Modules\Connexion\getMysqlConnexion() in C:\wamp\www\projet3\App\Backend\Modules\Connexion\ConnexionController.php on line 13


    J'ai essayé de le placer à différent endroit mais cela ne change rien ( Après mon Use , Dans ma classe Connexion Controller, avant ma condition... )

    Merci encore pour ton aide !

  14. #14
    Membre actif Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Points : 273
    Points
    273
    Par défaut
    je ne sais pas, vérifie peut-être les espaces de noms :o
    Même une feuille de papier est plus légère si on la porte à deux.

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    J'ai vérifié les espaces de noms ( encore une fois quand tu m'as demandé ^^ )

    J'ai modifié un peu le code pour mettre directement la connexion à la base de données à l'intérieur de ma classe pour le test :

    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
     public function executeIndex(HTTPRequest $request)
        {
     
            $this->page->addVar('title', 'Connexion');
     
            if ($request->postExists('pseudo'))
            {
                $pseudo = $request->postData('pseudo');
                $password = $request->postData('password');
                $db = new \PDO('mysql:host=localhost;dbname=blogecrivainbdd', 'root', '');
                $db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
                if ($db->query('SELECT count(*) FROM users WHERE pseudo = ' . $pseudo. ' AND password = ' . $password) == 1)
                {
                    $this->app->user()->setAuthenticated(true);
                    $this->app->httpResponse()->redirect('.');
                }
                else
                {
                    $this->app->user()->setFlash('Le pseudo ou le mot de passe est incorrect.');
                }
                echo var_dump($db);
            }
        }


    ( ! ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Champ 'Admin' inconnu dans where clause' in C:\wamp\www\projet3\App\Backend\Modules\Connexion\ConnexionController.php on line 29


    J'ai bien vérifié mon pseudo dans ma base de données est : Admin et mon mot de passe : Admin

  16. #16
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Salut,
    Faudrait réécrire la requête comme ça

    'SELECT count(*) FROM users WHERE pseudo = "' . $pseudo. '" AND password = "' . $password .'"' ou "SELECT count(*) FROM users WHERE pseudo = ' $pseudo' AND password = '$password'"sinon il risque de considérer vos variables (si elles ne contiennent autre chose que des nombres entiers ou décimaux) comme des noms de colonnes.
    Pensez à préparer vos requêtes, risque d'injection SQL dans celle-ci
    Le bienfait n'est jamais perdu

  17. #17
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Merci Willy_k pour ta réponse

    J'ai modifié la requête SQL comme indiqué, mais j'ai toujours un problème, peu importe la combinaison de "pseudo" "password" j'arrive à me connecter, si ils sont tous les deux vide également d'ailleurs ^^'

    Voici le code actuel de mon Controller :

    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
    class ConnexionController extends BackController
    {
     
        public function executeIndex(HTTPRequest $request)
        {
     
            $this->page->addVar('title', 'Connexion');
     
            if ($request->postExists('pseudo'))
            {
                $pseudo = $request->postData('pseudo');
                $password = $request->postData('password');
                $db = new \PDO('mysql:host=localhost;dbname=blogecrivainbdd', 'root', '');
     
                if ($request = $db->query('SELECT count(*) FROM users WHERE pseudo = "' . $pseudo. '" AND password = "' . $password .'"') == 1)
                {
                    $this->app->user()->setAuthenticated(true);
                    $this->app->httpResponse()->redirect('.');
                }
                else
                {
                    $this->app->user()->setFlash('Le pseudo ou le mot de passe est incorrect.');
                }
     
            }
        }
     
    }

  18. #18
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    C'est à cause de la condition $request = $db->query('SELECT count(*) FROM users WHERE pseudo = "' . $pseudo. '" AND password = "' . $password .'"') == 1 qui est toujours vraie (quand la requête se passe bien même s'il n y a pas de résultat) et je pense qu'elle aurait dû vous renvoyer une erreur dans ce cas.
    Donc on peut la réécrire comme ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    pseudo = $request->postData('pseudo');
    $password = $request->postData('password');
    $db = new \PDO('mysql:host=localhost;dbname=blogecrivainbdd', 'root', '');
    $stmt = $db->prepare('SELECT COUNT(*) FROM users WHERE pseudo = :pseudo AND password = :password');
    $stmt->bindValue('pseudo', $pseudo);
    $stmt->bindValue('password', $password);
    $stmt->execute();
     
    if ($stmt->fetchColumn()) {
        //bon
    } else {
       //pas bon
    }
    Vous sauvegardez le mot de passe en clair dans la BDD ?
    Le bienfait n'est jamais perdu

  19. #19
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Cela fonctionne pour le moment d'après les test de combinaison que j'ai pris le temps de faire

    Oui en effet je dois crypter le mot de passe maintenant !
    D'après mes cours le md5 est obsolète donc je vais essayer en sha-256 ... nouvelle galère ^^

    Merci Willy pour ton aide ainsi que Jisig ! Vous m'avez fait gagner un temps très précieux

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. module authentification et gestion des utilisateurs
    Par Msysteme dans le forum ASP.NET
    Réponses: 2
    Dernier message: 21/05/2015, 15h40
  2. Replica et gestion utilisateurs
    Par odelayen dans le forum Access
    Réponses: 4
    Dernier message: 09/06/2006, 13h53
  3. [Authentification Realm] Infos utilisateur et redirection
    Par mamiberkof dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 22/04/2006, 22h16
  4. [LDAP] Authentification d'un utilisateur
    Par toctof dans le forum Sécurité
    Réponses: 7
    Dernier message: 13/12/2005, 18h21
  5. Gestion utilisateurs avec droits
    Par dr_look dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 27/04/2005, 16h03

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