Partage
  • Partager sur Facebook
  • Partager sur Twitter

[PDO] Formulaire de connexion

Sujet résolu
    27 mai 2021 à 15:26:08

    Bonjour,

    Je cherche à créer un script de connexion depuis un formulaire, avec login et mdp.

    Auriez-vous un cours récent et quali à me conseiller ? Je vous remercie.

    -
    Edité par barscha 2 juin 2021 à 14:39:12

    • Partager sur Facebook
    • Partager sur Twitter
      2 juin 2021 à 12:08:43

      Bonjour,

      Après avoir repris un modèle de script de connexion, j'ai testé la connexion

      Sauf que lorsque je saisi un bon login et un bon mot de passe, la page me dit qu'ils sont incorrects, alors qu'ils sont bien saisis dans ma BDD.

      Merci de m'aider.

      Code :

      <?php
      echo '<h2>Information pour le debug</h2>';
      echo '<pre>';
        echo "variable GET : "; print_r($_GET);
        echo "variable POST : "; print_r($_POST);
        echo "variable SESSION : "; print_r($_SESSION);
        echo "variable FILES : "; print_r($_FILES);
      echo '</pre>';
      include 'connexion.php';
      if(isset($_POST['login']) && isset($_POST['mot de passe']))
      {
        session_start();
        $bdd = ouvrirBdd();
        $req = "SELECT * FROM personne WHERE login = :login AND password = :password";   // login et mot de passe à saisir
        $res = $bdd->prepare($req);
        $login = htmlentities($_POST['login']);
        $password = htmlentities($_POST['mot de passe']);
        $res->execute(array('login'=>$login,'mot de passe'=>$password));
        $nb_lignes = $res->rowCount();
        // s'il y a au moins une ligne c'est que la personne existe en base de données
        if ($nb_lignes >0)
        {
          session_start();
          $_SESSION['id_personne'] = true;
          header('Location: administration.php?');
        }
        else
        {// login-pwd incorrect
          // Ouverture du fichier en mode écriture seule
          $monfichier = fopen('login.txt', 'a');
          // On écrit dans le fichier le nouveau login pwd saisi
          fputs($monfichier, $_POST["login"] . " " . $_POST["pwd"] . "\n");
          fclose($monfichier);
          // redirection vers la page login.php
          header('Location: index.php?message=Identifiant ou mot de passe incorrect!');  // redirection + message d'erreur
        }
      }
      else {
        // Ouverture du fichier en mode écriture seule
        $monfichier = fopen('login.txt', 'a');
        // On écrit dans le fichier le nouveau login pwd saisi
        fputs($monfichier, $_POST["login"] . " " . $_POST["pwd"] . "\n");
        fclose($monfichier);
        // redirection vers la page login.php
        header('Location: index.php?message=Identifiant ou mot de passe incorrect!');  // redirection + message d'erreur
      }
      $bdd = NULL;   // fermeture de la base de donnée
      ?>
      



      • Partager sur Facebook
      • Partager sur Twitter
        2 juin 2021 à 12:16:08

        Salut,

        Si tes mots de passe sont en clair dans ta bdd, il faudra sécuriser tout ça.

        Si tu veux juste faire fonctionner le code, as tu activé les erreurs PDO (ou mysqli selon ce que tu utilises) ? As tu un résultat si tu testes directement dans ta base de données?

        Je ne sais plus si htmlentities a quelque chose à faire dans ce cas là. 

        • Partager sur Facebook
        • Partager sur Twitter
          2 juin 2021 à 12:24:11

          Bonjour.

          Pour la 10ème fois.... pas de fonction html.... sur les données entrée en bdd. La préparation de la requête suffit.

          Pas de rowcount sur un sélect non plus. Le résultat du fetch suffit ou sinon fetchColumn 

          Pas d'espace dans le name de tes input, c'est source de problème.

          Et comme le dit mon VDD, pas de mdp en clair.

          D'ailleurs comment fais tu l'inscription ? Tu utilises password_hash ?

          Si oui alors il faut password_verify pour vérifier le mdp

          -
          Edité par Aurélien10! 2 juin 2021 à 12:25:19

          • Partager sur Facebook
          • Partager sur Twitter
            2 juin 2021 à 13:17:12

            Bonjour,

            Mauvais titre

            Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

            Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

            De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

            Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

            Merci de modifier votre titre. Pour cela, éditez le premier message de votre sujet.

            (titre originel : Formulaire de connexion)

            • Partager sur Facebook
            • Partager sur Twitter

            Pas d'aide concernant le code par MP, le forum est là pour ça :)

              2 juin 2021 à 13:24:37

              Cbon c'est REGLEEE

              J'arrive enfin a me connecter. Tu as bien bu Aurélien c'était les espaces du input qui faisait tout capoter.

              Et donc les mots de passes sont bien bien en clair dans ma BDD, comment puis-je rectifier cela pour plus de sécurité ?

              Je vous remercie !

              <?php
              echo '<h2>Information pour le debug</h2>';
              echo '<pre>';
                echo "variable GET : "; print_r($_GET);
                echo "variable POST : "; print_r($_POST);
                echo "variable SESSION : "; print_r($_SESSION);
                echo "variable FILES : "; print_r($_FILES);
              echo '</pre>';
              include 'connexion.php';
              if(isset($_POST['login']) && isset($_POST['mot_de_passe']))
              {
                session_start();
                $bdd = ouvrirBdd();
                $req = "SELECT * FROM personne WHERE login = ? AND mot_de_passe = ?";   // login et mot de passe à saisir
                $res = $bdd->prepare($req);
                $res->execute(array($_POST['login'], $_POST['mot_de_passe']));
                $nb_lignes = $res->fetch();
                // s'il y a au moins une ligne c'est que la personne existe en base de données
                if ($nb_lignes >0)
                {
                  session_start();
                  $_SESSION['id_personne'] = true;
                  header('Location: administrateur.php?');
                }
                else
                {// login-pwd incorrect
                  // Ouverture du fichier en mode écriture seule
                  $monfichier = fopen('login.txt', 'a');
                  // On écrit dans le fichier le nouveau login pwd saisi
                  fputs($monfichier, $_POST["login"] . " " . $_POST["pwd"] . "\n");
                  fclose($monfichier);
                  // redirection vers la page login.php
                  header('Location: index.php?message=Identifiant ou mot de passe incorrect!');  // redirection + message d'erreur
                }
              }
              else {
                // Ouverture du fichier en mode écriture seule
                $monfichier = fopen('login.txt', 'a');
                // On écrit dans le fichier le nouveau login pwd saisi
                fputs($monfichier, $_POST["login"] . " " . $_POST["pwd"] . "\n");
                fclose($monfichier);
                // redirection vers la page login.php
                header('Location: index.php?message=Identifiant ou mot de passe incorrect!');  // redirection + message d'erreur
              }
              $bdd = NULL;   // fermeture de la base de donnée
              ?>
              



              • Partager sur Facebook
              • Partager sur Twitter
                2 juin 2021 à 13:49:43

                pour ton souci, de sécurisation, regarde comme l'a dit Aurélien, du côté de password_hash et password_verify ^^
                • Partager sur Facebook
                • Partager sur Twitter
                  2 juin 2021 à 15:21:13

                  Me revoila

                  Je viens d'utiliser password_hash, et je n'ai pas eu de problème particulier.

                  Est-ce que je dois changer ou rajouter quelque chose à mon code ?

                  <?php
                  echo '<h2>Information pour le debug</h2>';
                  echo '<pre>';
                    echo "variable GET : "; print_r($_GET);
                    echo "variable POST : "; print_r($_POST);
                    echo "variable SESSION : "; print_r($_SESSION);
                    echo "variable FILES : "; print_r($_FILES);
                  echo '</pre>';
                  include 'connexion.php';
                  if(isset($_POST['login']) && isset($_POST['mot_de_passe']))
                  {
                    session_start();
                    $bdd = ouvrirBdd();
                    $req = "SELECT * FROM personne WHERE login = ? AND mot_de_passe = ?";   // login et mot de passe à saisir
                    $res = $bdd->prepare($req);
                    $res->execute(array($_POST['login'], $_POST['mot_de_passe']));
                    $hashed_password = password_hash($_POST['mot_de_passe'], PASSWORD_DEFAULT);
                    $nb_lignes = $res->fetch();
                    // s'il y a au moins une ligne c'est que la personne existe en base de données
                    if ($nb_lignes >0)
                    {
                      if(password_verify($_POST['mot_de_passe'], $hashed_password))
                      {
                        $_SESSION['id_personne'] = true;
                        header('Location: administrateur.php?');
                        //var_dump($hashed_password);
                      }
                    }
                    else
                    {// login-pwd incorrect
                      // Ouverture du fichier en mode écriture seule
                      $monfichier = fopen('login.txt', 'a');
                      // On écrit dans le fichier le nouveau login pwd saisi
                      fputs($monfichier, $_POST["login"] . " " . $_POST["pwd"] . "\n");
                      fclose($monfichier);
                      // redirection vers la page login.php
                      header('Location: index.php?message=Identifiant ou mot de passe incorrect!');  // redirection + message d'erreur
                    }
                  }
                  else {
                    // Ouverture du fichier en mode écriture seule
                    $monfichier = fopen('login.txt', 'a');
                    // On écrit dans le fichier le nouveau login pwd saisi
                    fputs($monfichier, $_POST["login"] . " " . $_POST["pwd"] . "\n");
                    fclose($monfichier);
                    // redirection vers la page login.php
                    header('Location: index.php?message=Identifiant ou mot de passe incorrect!');  // redirection + message d'erreur
                  }
                  $bdd = NULL;   // fermeture de la base de donnée
                  ?>
                  



                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 juin 2021 à 15:50:58

                    Ton mot de passe est toujours en clair en base de données et tes password_hash/password_verify ne servent strictement à rien là. Le but c'est de faire le password_hash lors de l'INSERT pour insérer non pas le mot de passe mais son hash.

                    > if ($nb_lignes >0)

                    Tu n'as pas un nombre, ça devrait être if ($nb_lignes)

                    > fputs($monfichier, $_POST["login"] . " " . $_POST["pwd"] . "\n");

                    Mouais, logguer des mots de passe (même s'ils sont faux), ça ne se fait pas ! Et puis en else de if(isset($_POST['login']) && isset($_POST['mot_de_passe'])), tu loggues des NULL + l'erreur de $_POST["pwd"] vs $_POST['mot_de_passe']

                    -
                    Edité par julp 2 juin 2021 à 16:09:01

                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 juin 2021 à 16:22:16

                      D'accord, donc comment je dois modifier mon code ???

                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 juin 2021 à 20:56:35

                        utiliser password_hash à l'inscription et password_verify lors du login

                        Ryukotsei a écrit:

                        Bonjour,

                        https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql

                        ^^ 

                        suffit de suivre le lien

                        • Partager sur Facebook
                        • Partager sur Twitter

                        [PDO] Formulaire de connexion

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown