Partage
  • Partager sur Facebook
  • Partager sur Twitter

Page D'authentification en PDO

Difficulté avec PDO

Sujet résolu
    15 mai 2013 à 16:24:38

    Bonjour, j'essai de faire une page d'authentification en pdo et je ne suis pa tres à l'aise avec la pdo j'ai commencé mais je rencontre des erreurs !

    j'ai besoin de vos conseil.

    Voici ma page en mysql

    <?php
    session_start();
    $_SESSION["login"]=$_POST["login"];
    $_SESSION["pass"]=$_POST["pass"];
    $db = mysql_connect("localhost","root","") or die ("Erreur de connexion :".mysql_error());
    $maBase =mysql_select_db("Projet4") or die ("Erreur de base : ".mysql_error());
    if ($maBase) {
    $query="SELECT * FROM administrateur WHERE login='".$_SESSION["login"]."';";
    $result=mysql_query($query);
    $ligne = mysql_fetch_array($result, MYSQL_ASSOC);
    // je controle si les champs sont vides.
    if (($_SESSION["login"] == "") or ($_SESSION['pass'] == ""))
    echo"veuillez saisir un login et un mot de passe";
    //je réaffiche le formulaire.
    else {
    //je contrôle si le mot de passe correspond avec celui présent dans la base
    if (($_SESSION["pass"]== "".$ligne['password'].""))
    {
    echo"Bienvenue";
    header("Location:ModifSite.php");
    }
    
    else {
    echo"Erreur d'authentification";
    //je réaffiche le formulaire de saisie
    }
    }
    }
    ?>

    Et maintenant en pdo avec beaucoup d'erreur:

    <?php
    session_start();
    $_SESSION["login"]=$_POST["login"];
    $_SESSION["pass"]=$_POST["pass"];
    $source = "mysql:host = localhost;dbname=Projet4";
    $utilisateur="root";
    $mot_de_passe=""; 
    try {
    $db=new PDO($source,$utilisateur,$mot_de_passe);
    $db->setAttriute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    // préparer la requete
    $st=$db->prepare("SELECT * FROM administrateur WHERE login='".$_SESSION["login"]."'");
    //executer la requete
    while ($ligne=$st->fetch())
    if (($_SESSION["login"] == "") or ($_SESSION['pass'] == ""))
    echo"veuillez saisir un login et un mot de passe";
    else {
    //je contrôle si le mot de passe correspond avec celui présent dans la base
    if (($_SESSION["pass"]== "".$ligne['password'].""))
    {
    echo"Bienvenue";
    header("Location:ModifSite.php");
    }
    }
    $st=null;
    $db=null;
    catch(PDOexception $e)
    {
    //gérer les exceptions
    echo "Erreur!:"$e->getMessage(),"<br/>";
    die();
    }
    ?>




    • Partager sur Facebook
    • Partager sur Twitter
      15 mai 2013 à 16:40:47

      Bonjour,

      • quelles sont les erreurs?
      • on ne dit pas "en PDO" mais "avec PDO".
      • Partager sur Facebook
      • Partager sur Twitter
        15 mai 2013 à 16:44:42

        artragis a écrit:

        Bonjour,

        • quelles sont les erreurs?
        • on ne dit pas "en PDO" mais "avec PDO".

        Ligne  27
        • Partager sur Facebook
        • Partager sur Twitter
          15 mai 2013 à 16:46:51

          Quel est le message d'erreur?

          PS : il est interdit de mettre quoi que ce soit entre le crochet fermant du try et le catch.

          -
          Edité par artragis 15 mai 2013 à 16:47:35

          • Partager sur Facebook
          • Partager sur Twitter
            15 mai 2013 à 16:47:12

            Salut.

            Quelle est l'erreur ?

            Sinon, petite faute de frappe je pense :

            $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

            et non

            $db->setAttriute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

            ;)


            • Partager sur Facebook
            • Partager sur Twitter
              15 mai 2013 à 16:47:55

              artragis a écrit:

              Quel est le message d'erreur?


              Parse error: syntax error, unexpected T_CATCH
              • Partager sur Facebook
              • Partager sur Twitter
                15 mai 2013 à 16:48:15

                Quelles sont les erreurs ?

                (et au passage, quitte à utiliser PDO, regarde le cours php pour apprendre à passer les paramètres à ta requête et ainsi éviter les failles SQL)

                • Partager sur Facebook
                • Partager sur Twitter
                Retrouvez-moi aussi sur Zeste de SavoirTutoriel WAMP • Nouvelle F.A.Q. PHP
                  15 mai 2013 à 16:54:00

                  Bon voilà ton code corrigé et simplifié surtout :

                  session_start();
                  $_SESSION["login"]=$_POST["login"];
                  $_SESSION["pass"]=$_POST["pass"];
                  
                  try {$bdd = new PDO('mysql:host=localhost;dbname=Projet4', 'root', '');}
                  catch (Exception $e) {die("L'accès à la base de donnée est impossible.");}
                  
                  if (empty($_SESSION["login"]) or empty($_SESSION['pass'])) {
                  	echo "veuillez saisir un login et un mot de passe";
                  }
                  else {
                  	$st = $bdd->query("SELECT COUNT(*) FROM administrateur WHERE login='".$_SESSION["login"]."' AND password='".$_SESSION["pass"]."'")->fetch();
                  	if ($st['COUNT(*)'] == 1)
                  		header("Location: ModifSite.php");
                  }

                  Au passage, j'ai supprimé ton "echo 'Bonjour'" car tu ne peux écrire aucun texte avant de faire une redirection.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 mai 2013 à 16:54:37

                    Il ne faut rien mettre entre le try et le catch il me semble (à confirmer).
                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 mai 2013 à 17:01:18

                      LucasWillems a écrit:

                      Bon voilà ton code corrigé et simplifié surtout :

                      session_start();
                      $_SESSION["login"]=$_POST["login"];
                      $_SESSION["pass"]=$_POST["pass"];
                      
                      try {$bdd = new PDO('mysql:host=localhost;dbname=Projet4', 'root', '');}
                      catch (Exception $e) {die("L'accès à la base de donnée est impossible.");}
                      
                      if (empty($_SESSION["login"]) or empty($_SESSION['pass'])) {
                      	echo "veuillez saisir un login et un mot de passe";
                      }
                      else {
                      	$st = $bdd->query("SELECT COUNT(*) FROM administrateur WHERE login='".$_SESSION["login"]."' AND password='".$_SESSION["pass"]."'")->fetch();
                      	if ($st['COUNT(*)'] == 1)
                      		header("Location: ModifSite.php");
                      }

                      Au passage, j'ai supprimé ton "echo 'Bonjour'" car tu ne peux écrire aucun texte avant de faire une redirection.

                      Merci beaucoup pour l'aide ! Seulemnt il y a un truc que je comrpend pas c'est  que

                      dans

                      $_SESSION["login"]=$_POST["login"];
                      $_SESSION["pass"]=$_POST["pass"];

                      c'est login et pass sont des index indefinie or dans l'autre script en php sa fonctionnait parfaitement

                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 mai 2013 à 17:06:46

                        Ce que tu veux, c'est vérifier si les identifiants (pseudo + mot de passe) de la personne sont correct, non ?

                        Donc, d'abord tu commences à les stocker dans les variables de session, ensuite tu vérifies quelles ne soient pas vide, et si elles ne sont pas vides, tu vérifies si le groupe pseudo - password se trouve dans la base de donnée. Donc pour se faire, il te faut vérifier qu'il existe une seule ligne uniquement qui ait un pseudo et un mot de pass qui correspondent à ceux rentrés par la personne. Et si c'est le cas, tu rediriges.

                        Je ne vois pas où est le problème.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 mai 2013 à 17:09:20

                          LucasWillems a écrit:

                          Ce que tu veux, c'est vérifier si les identifiants (pseudo + mot de passe) de la personne sont correct, non ?

                          Donc, d'abord tu commences à les stocker dans les variables de session, ensuite tu vérifies quelles ne soient pas vide, et si elles ne sont pas vides, tu vérifies si le groupe pseudo - password se trouve dans la base de donnée. Donc pour se faire, il te faut vérifier qu'il existe une seule ligne uniquement qui ait un pseudo et un mot de pass qui correspondent à ceux rentrés par la personne. Et si c'est le cas, tu rediriges.

                          Je ne vois pas où est le problème.


                          En faite ce que je veux c'est que une personne dispose d'un login et un mot passe il entre ces données et on verifie si c'est correct ou pas  pous pouvoir acces à un espace restreint.

                          SI c'est correct il a acces à l'espace sinon il re entren les données

                          En faite je me suis trompé je crois qu'il ne se connecte pas a la bd car il trouve pas le mot passe et le login

                          -
                          Edité par mickamel 15 mai 2013 à 17:18:22

                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 mai 2013 à 17:16:49

                            Ouais voila c'est ce que j'ai dit. Mais je ne comprends pas à quel niveau est le problème dans mon code.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              15 mai 2013 à 17:57:00

                              LucasWillems a écrit:

                              Ouais voila c'est ce que j'ai dit. Mais je ne comprends pas à quel niveau est le problème dans mon code.


                              Je ne trouve pas également
                              • Partager sur Facebook
                              • Partager sur Twitter
                                15 mai 2013 à 18:35:08

                                LucasWillems a écrit:

                                Mais en tout cas, le code ne fonctionne pas ?

                                Sa fonctionne pas vu qu'il reconnait pas  le mot de passe et le login



                                • Partager sur Facebook
                                • Partager sur Twitter
                                  15 mai 2013 à 19:20:40

                                  LucasWillems a écrit:

                                  Tu veux dire quoi par "il reconnait pas  le mot de passe et le login" ?


                                  Ben en faite quand j'entre le mot passe et le login et que je valide il me dit :

                                  "veuillez saisir un login et un mot de passe"

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    15 mai 2013 à 19:23:59

                                    Bon ben essaie ca alors :

                                    session_start();
                                    $_SESSION["login"]=$_POST["login"];
                                    $_SESSION["pass"]=$_POST["pass"];
                                     
                                    try {$bdd = new PDO('mysql:host=localhost;dbname=Projet4', 'root', '');}
                                    catch (Exception $e) {die("L'accès à la base de donnée est impossible.");}
                                     
                                    if(($_SESSION["login"] == "") or($_SESSION['pass'] == "")) {
                                        echo "veuillez saisir un login et un mot de passe";
                                    }
                                    else {
                                        $st = $bdd->query("SELECT COUNT(*) FROM administrateur WHERE login='".$_SESSION["login"]."' AND password='".$_SESSION["pass"]."'")->fetch();
                                        if ($st['COUNT(*)'] == 1)
                                            header("Location: ModifSite.php");
                                    }





                                    -
                                    Edité par LucasWillems 15 mai 2013 à 19:24:32

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      15 mai 2013 à 19:31:35

                                      LucasWillems a écrit:

                                      Bon ben essaie ca alors :

                                      session_start();
                                      $_SESSION["login"]=$_POST["login"];
                                      $_SESSION["pass"]=$_POST["pass"];
                                       
                                      try {$bdd = new PDO('mysql:host=localhost;dbname=Projet4', 'root', '');}
                                      catch (Exception $e) {die("L'accès à la base de donnée est impossible.");}
                                       
                                      if(($_SESSION["login"] == "") or($_SESSION['pass'] == "")) {
                                          echo "veuillez saisir un login et un mot de passe";
                                      }
                                      else {
                                          $st = $bdd->query("SELECT COUNT(*) FROM administrateur WHERE login='".$_SESSION["login"]."' AND password='".$_SESSION["pass"]."'")->fetch();
                                          if ($st['COUNT(*)'] == 1)
                                              header("Location: ModifSite.php");
                                      }





                                      La sa marche merci une derniere question est ce que tu sais si je met la fonction password pour le mot passe dans la basse de donné comment decrypté dans le script ici ?



                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        15 mai 2013 à 20:11:23

                                        LucasWillems a écrit:

                                        Il faut d'abord savoir comment tu l'as crypté.


                                        en faite dans phpmyadmin  ta la fonction password qui crypte le mot passe  dans le mot passe est transformer en chaine de caractére. il faut un code php qui va comparer le mot passe entrer en le cryptant et celui de la base de donné

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          15 mai 2013 à 20:20:47

                                          >en faite dans phpmyadmin ta la fonction password qui crypte le mot passe dans le mot passe est transformer en chaine de caractére. il faut un code php qui va comparer le mot passe entrer en le cryptant et celui de la base de donné

                                          C'est pas du cryptage mais du hashage.

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            15 mai 2013 à 20:25:04

                                            artragis a écrit:

                                            en faite dans phpmyadmin ta la fonction password qui crypte le mot passe dans le mot passe est transformer en chaine de caractére. il faut un code php qui va comparer le mot passe entrer en le cryptant et celui de la base de donné

                                            C'est pas du cryptage mais du hashage.


                                            Ok
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              20 juillet 2015 à 14:56:31

                                              Bonjour ,

                                              jai pas pu excuter le code proposé par lucasWillems avec une erreur Undefined index: pass in C:\wamp\www\code\verif2.php on line 13 {if(($_SESSION["login"] == ""or($_SESSION['pass'] == "")) { qui pouvez m'aider j'ai cherché déja et jai pu mettre isset comme solution

                                              sinon qui pourrez me donner un code pour une simple authentification merci bcp 

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                20 juillet 2015 à 15:44:56

                                                >sinon qui pourrez me donner un code pour une simple authentification merci bcp

                                                tu paies combien?

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  17 mai 2017 à 13:47:08

                                                  Merci sur ce tuto


                                                  LucasWillems a écrit:

                                                  Bon voilà ton code corrigé et simplifié surtout :

                                                  session_start();
                                                  $_SESSION["login"]=$_POST["login"];
                                                  $_SESSION["pass"]=$_POST["pass"];
                                                  
                                                  try {$bdd = new PDO('mysql:host=localhost;dbname=Projet4', 'root', '');}
                                                  catch (Exception $e) {die("L'accès à la base de donnée est impossible.");}
                                                  
                                                  if (empty($_SESSION["login"]) or empty($_SESSION['pass'])) {
                                                  	echo "veuillez saisir un login et un mot de passe";
                                                  }
                                                  else {
                                                  	$st = $bdd->query("SELECT COUNT(*) FROM administrateur WHERE login='".$_SESSION["login"]."' AND password='".$_SESSION["pass"]."'")->fetch();
                                                  	if ($st['COUNT(*)'] == 1)
                                                  		header("Location: ModifSite.php");
                                                  }

                                                  Au passage, j'ai supprimé ton "echo 'Bonjour'" car tu ne peux écrire aucun texte avant de faire une redirection.



                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  Page D'authentification en PDO

                                                  × 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