Authentifier une personne

Résolu
mobrobot Messages postés 182 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonsoir à tout le monde s'ils vous j'ai besoin d'aide pour crée un système d'authentification

qui dira à l'utilisateur de se connecter ou de crée un compte pour commenter quelque chose ou de télécharger un fichier sur le site. je voudrais un peut de guide pour le faire.

MERCI A VOUS

5 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonsoir, lecture suggérée:
    TP : créer un espace membres 
    0
    1. mobrobot Messages postés 182 Statut Membre 1
       
      merci j’avais essayé
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > mobrobot Messages postés 182 Statut Membre
         
        et?
        as-tu d'autres questions?
        0
  2. mobrobot Messages postés 182 Statut Membre 1
     
    Bonjour j'ai traité le TP : créer un espace membres: de openclassrooms je me suis en sortir avec la page d'inscription . mais avec ma page de connexion il n'arrive pas a reconnaitre le pseudo et le mot de passe qui est déjà dans la base de données voici le code de la connexion
    <?php 
    //connexion à la base de donnees
      try{
         $bdd = new PDO('mysql:host=localhost;dbname=membres_du_site', 'root', '');
        }catch(PDOExeption $e){
          die ('Erreur : ' .$e->getMessage());
        }
    
     if( isset($_POST['formconnexion']) AND !empty($_POST['formconnexion'])){
    
    $pseudo = htmlspecialchars(($_POST['pseudo']));
          
    $pass  = ($_POST['pass']);
    
    if(!empty($pseudo) AND !empty($pass)){
            
    // Hachage du mot de passe
    $pass_hache = password_hash($_POST['pass'], PASSWORD_DEFAULT);
    
    //Vérification des identifiants
    $req = $bdd->prepare('SELECT id FROM membre WHERE pseudo = :pseudo AND pass = :pass');
            $req->execute(array(
    
    'pseudo' => $pseudo,
     'pass' => $pass_hache));
    
     $result = $req->fetch();
    
     if(!$result){
     $msgC = 'Mouvais identifiant ou mot de passe !';
    }
    else
     {
       session_start();
      $_SESSION['id'] = $result['id'];
      $_SESSION['pseudo'] = $pseudo;
             
     $msgC = "Vous êtes connecté !";
    }
           
    }
     else
    {
    $msgC = 'Tous champs les doivent être remplir !';
     }
    
    }
        
    
    
    ?>
    
    
     <link href="main.css" rel="stylesheet" />
     <meta charset="utf-8">
        <h3>Se connecter</h3>
        <br /><br />
        <form method="POST" action="">
         <input type="pseudo" name="pseudo" placeholder="Mail" />
         <input type="password" name="pass" placeholder="Mot de passe" />
         <input type="submit" name="formconnexion" value="se connecter"/>
         
        </form>
        <?php if(isset($msgC)) {echo '<font color="darkred">' .$msgC. '</font>';} ?>


    MERCI D'AVENCE
    0
  3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    Commence par appliquer ceci :
    https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

    Ensuite, htmlspecialchars n'est à utiliser que pour l'affichage... en aucun cas pour faire une requête

    Et après, il est préférable de placer l'instruction session_start(); au début de ton code php pas en plein milieu.

    Et pour finir, je t'invite à appliquer ce qui est ici :
    https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

    NB : !empty vérifie déjà le isset ... pas besoin de mettre les deux !

    Tiens nous au courant une fois les modifications faites.

    0
    1. mobrobot Messages postés 182 Statut Membre 1
       
      Merci! jordane45 si j’enlève la variable
      $pseudo = htmlspecialchars($_POST['pseudo']);
      l'erreur suivant s'affiche la Undefined variable $pseudo

      et si je le mais il ne s'affiche plus mais quand je rentre le nom de l'utilisateur et le mot de passe qui déjà dans ma base de données la condition s’impose
      'Mauvais identifiant ou mot de passe !'


      voici le que j'ai modifier
      <?php 
      session_start();
      //connexion à la base de donnees
      require_once 'dbconnectM.php';
      
      error_reporting(E_ALL);
      ini_set('display_errors', TRUE);
      ini_set('display_startup_errors', TRUE);
      
      if( isset($_POST['formconnex'])){
      
       $pseudo = htmlspecialchars($_POST['pseudo']); 
             // Hachage du mot de passe
      
      $pass_hache = password_hash($_POST['pass'], PASSWORD_DEFAULT);
      
      
       // Vérification des identifiants
      
      $req = $bdd->prepare('SELECT id FROM membre WHERE pseudo = :pseudo AND pass = :pass');
      $req->execute(array(
       'pseudo' => $pseudo,
      'pass' => $pass_hache));
      
      $resultat = $req->fetch();
      if (!$resultat)
       {
            
      $msgC = 'Mauvais identifiant ou mot de passe !';
      
      }
      
       else
      
       {
      
      $_SESSION['id'] = $resultat['id'];
      $_SESSION['pseudo'] = $pseudo;
      
      $msgC = 'Vous êtes connecté !';
      
       }
             
        }
      
      ?>
      
      
       <link href="main.css" rel="stylesheet" />
       <meta charset="utf-8">
          <h3>Se connecter</h3>
          <br /><br />
          <form method="POST" action="">
           <input type="pseudo" name="pseudo" placeholder="Mail" />
           <input type="password" name="pass" placeholder="Mot de passe" />
           <input type="submit" name="formconnex" value="se connecter"/>
           
          </form>
          <?php if(isset($msgC)) {echo '<font color="darkred">' .$msgC. '</font>';} ?>
      0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > mobrobot Messages postés 182 Statut Membre
       
      Tu as lu en diagonale ....
      Il manque les blocs TRY/CATCH autour de ta requête
      La récupération PROPRE des variables AVANT de les utiliser
      0
    3. mobrobot Messages postés 182 Statut Membre 1 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Oui on m'affiche une page blanche quand je clic sur le button
      se connecter

      // Vérification des identifiants
      
           $sql = 'SELECT id FROM membre WHERE pseudo = :pseudo AND pass = :pass';
           $datas = array('pseudo' => $pseudo,'pass' => $pass_hache);
      //Execution de la requete
       try{
      $requete = $bdd -> prepare($sql) ;
       $requete->execute($datas) ;
           }catch(Exception $e){
             // en cas d'erreur :
              echo " Erreur ! ".$e->getMessage();
              echo " Les datas : " ;
             print_r($datas);
           }
           return !empty($resultat) ? $resultat : NULL;
      
           $resultat = $requete->fetch();
           if (!$resultat)
           {
            
               $msgC = 'Mauvais identifiant ou mot de passe !';
           }
      
           else
      
           {
      
               $_SESSION['id'] = $resultat['id'];
      
               $_SESSION['pseudo'] = $pseudo;
      
               $msgC = 'Vous êtes connecté !';
      
           }
             
      0
    4. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > mobrobot Messages postés 182 Statut Membre
       
      On t'affiche quoi comme page... ?
      Et montre le code complet
      Y compris le fichier de connexion
      0
    5. mobrobot Messages postés 182 Statut Membre 1 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
       
      j'ai enlève la ligne 16 que j’avais ajouter dans le code. et maintenant la page blanche ne s'affiche plus, mais la condition if s’impose toujours
      Mauvais identifiant ou mot de passe !
      0
  4. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bon...
    Histoire de te faire gagner du temps... voici un code fonctionnel.
    (sachant qu'il est préférable d'utiliser le password_verify" au lieu de regarder en bdd comme tu le fais...
    Voici :
    https://forums.commentcamarche.net/forum/affich-34340900-login-password-php#7
    0
    1. mobrobot Messages postés 182 Statut Membre 1
       
      ok je te tiendrais au courant merci
      0
      1. mobrobot Messages postés 182 Statut Membre 1 > mobrobot Messages postés 182 Statut Membre
         
        Bonsoir j'ai essayé le code que tu ma suggérer le problème est quand je remplir le formulaire et je clic sur registre on m'affiche : Fatal error: Call to undefined function get_cnx() parai pour le button valider aussi
        0
      2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > mobrobot Messages postés 182 Statut Membre
         
        Il faut t'inspirer du code ... pas forcément le copier/coller tel quel...
        Mais bon...
        Plus haut dans la discussion ... il y a
        <?php
        // fichier de connexion à la bdd : cnxBdd.php
        function get_cnx(){
         $bdd = NULL;
         try{
          $bdd = new PDO('mysql:host=localhost;dbname=siteTest', $userdb, $passdb);
          $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
         } catch(PDOException $e) {
            die('Erreur : ' . $e->getMessage());
         }
         return $bdd;
        }
        
        

        Mais tu peux éventuellement remplacer les lignes de code :
        $cnn = get_cnx();
        

        par
        global $bdd;
        $cnn = $bdd;
        
        0
      3. mobrobot Messages postés 182 Statut Membre 1 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Bonsoir hier je travailler la dessus.
        sa ne fonction qu' avec le cryptage de mot de passe
        Sha1
        mais pas avec
        password_hash($_POST['pass'], PASSWORD_DEFAULT)
        je sais pas pourquoi sa ne fonctionne pas avec
        password_hash
        0
      4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > mobrobot Messages postés 182 Statut Membre
         
        quand tu utilises password_hash, utilises-tu password_verify?
        il est indispensable d'utiliser password_verify, deux appels à password_hash ne vont pas retourner le même hash (heureusement).
        tu peux tester avec ceci pour te convaincre:
        <?php
        session_start();
        echo "<br>v0.1<br>";
        $motdepasse="coucou,toi";
        $hache1=password_hash($motdepasse, PASSWORD_DEFAULT);
        $hache2=password_hash($motdepasse, PASSWORD_DEFAULT);
        
        $idem= password_verify($motdepasse, $hache1)? "ok" : "NOK";
        echo $hache1;
        echo "<br>";
        echo $idem;
        echo "<br>";
        
        $idem= password_verify($motdepasse, $hache2)? "ok" : "NOK";
        echo $hache2;
        echo "<br>";
        echo $idem;
        echo "<br>";
        ?>
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mobrobot Messages postés 182 Statut Membre 1
     
    Bonjour Merci pour la réponse , j'ai essayé ce que tu ma proposé et j'ai fouiller par tous sur le net.
    j'arrive toujours pas à le faire. je Bug la dessus. bon je veux me contracte avec
    Sha1


    Je vous remercie tous de m’avoir AIDEZ
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      très bien, peux-tu marquer alors ce sujet comme résolu?
      0