soucis de code pour vérifier une connexion

Petit nouveau ! | 8 Messages

09 avr. 2016, 18:03

je suis en train de coder ma page pour vérifier que le mot de passe et le pseudo transmis lors de la tentative de connexion correspondent a des identifiants existants.
<?php
$options = [
    'cost' => 12,
];
// on teste si nos variables sont définies
    if (isset($_POST['login'] ,$_POST['pass']))
        {
            $login= $_POST['login'];
            $pass=$_POST['pass'];
            // on crypte le mot de passe
            $pass_crypte = password_hash($pass, PASSWORD_BCRYPT, $options);
            // on verifie le cryptage                            
            if (password_verify($pass, $pass_crypte))
                {
  
                    // Récupération des informations du fichier blocnote (fichier txt).
                    $data = array();                        // Tableau qui contiendra les données de façon structurée.
                    $fileHandle = fopen("../../../txt/Fichier_user.txt", "r+");   // Ouverture du fichier "blocnote.txt"
                    if ($fileHandle)
                        {
                            while (($buffer = fgets($fileHandle, 4096)) !== false)
                                {    // Lecture des lignes du fichier, une par une.
                                    list($nom,  $prenom, $adresse, $bday, $mail, $mot_de_passe_crypte,  $liste, $sexe) = explode('|', $buffer);   
                                    // Séparation des données de la ligne en cours en fonction du caractère "|".
                                    $data = array('nom'=>$nom, 'prenom' => $prenom,'bday' => $bday, 'mail' => $mail,'mot_de_passe_crypte' => $mot_de_passe_crypte,                     'liste' =>$liste, 'sexe' =>$sexe);
                                    // Ajout d'un tableau dans notre tableau de données contenant le joueur et les prenom.
                                                         // On définit un login et un mot de passe de base pour tester notre exemple. Cependant, vous pouvez très bien interroger votre base de données afin de savoir si le visiteur qui se connecte est bien membre de votre site
                             $data['nom'];
                             $data['mot_de_passe_crypte'];
                             // on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe
                             if (hash_equals($data['nom'] , $login) && hash_equals( $data['mot_de_passe_crypte'] , $pass_crypte))
                                {
                                    // dans ce cas, tout est ok, on peut démarrer notre session
                  
                                    // on la démarre
                                    session_start ();
                                    // on enregistre les paramètres de notre visiteur comme variables de session ($login et $pass) (notez bien que l'on utilise pas le $   pour enregistrer ces variables)
                                    $_SESSION['login'] = $_POST['login'];
                                    $_SESSION['pass_crypte'] = $pass_crypte;
                      
                                    // on redirige notre visiteur vers une page de notre section membre
                                    header ('location: page_membre.php');
                                }
                             else
                                {
                                    // Le visiteur n'a pas été reconnu comme étant membre de notre site. On utilise alors un petit javascript lui signalant ce fait
                                    echo '<body onLoad="alert(\'Membre non reconnu...\')">';
                                    // puis on le redirige vers la page d'accueil
                                     echo '<meta http-equiv="refresh" content="0;URL=../acceuil.php">';
                                }
                  
 
                                }
                                fclose($fileHandle);                   
                                // fermeture du fichier
                                }
                }                              
            else
                {
                    echo 'Le mot de passe est invalide.';
                }
                 
        }
    else
        {
            echo 'Les variables du formulaire ne sont pas déclarées.';
        }
                  
             
 
  
             
?>
mais a chaque fois je tombe sur mon message d'erreur :
else
   {
       // Le visiteur n'a pas été reconnu comme étant membre de notre site. On utilise alors un petit javascript lui signalant ce fait
       echo '<body onLoad="alert(\'Membre non reconnu...\')">';
       // puis on le redirige vers la page d'accueil
        echo '<meta http-equiv="refresh" content="0;URL=../acceuil.php">';
   }
qui pourrais m'aider a résoudre ce soucis ?

merci d'avance

Mammouth du PHP | 2703 Messages

09 avr. 2016, 18:11

il y a plusieurs users dans le fichier txt ?
si oui, alors peut être avec un exit(); après
header ('location: page_membre.php');

Petit nouveau ! | 8 Messages

09 avr. 2016, 18:34

oui il y a plusieurs user dans le fichier txt
vais essayer ton idée de exit() et je te dit quoi

Petit nouveau ! | 8 Messages

09 avr. 2016, 18:37

toujours le meme soucis :/ cela me renvoie une fois de plus l'erreur membre non reconnu

Mammouth du PHP | 2703 Messages

09 avr. 2016, 18:42

vu que c'est dans une boucle, si la première ligne n'est pas la bonne, cela va faire la redirection.
il faut donc ne faire la redirection dans la boucle que si c'est bon.
et faire la redirection après la boucle vers acceuil.php

Petit nouveau ! | 8 Messages

09 avr. 2016, 18:59

comment cela ?
et après par contre logiquement rien ne devrait être faux vu que les identifiants que je teste sont bon

Petit nouveau ! | 8 Messages

09 avr. 2016, 20:33

bon ... j'ai trouver l'erreur
elle vient du hast du mdp de connexion et celui d inscription
array(8) { ["nom"]=> string(2) "mr"["mot_de_passe_crypte"]=> string(60) "$2y$12$4YN.gMXeyjZTQ4DQBkOwLu7HPUmngHi5Ejql3JBQ/S6msAzco/Woy }
string(2) "mr" string(60) "$2y$12$YPTg03nhNPJqvDz/qX0jFeLBMMCVsrLg17mkzIBOSL/fOQj3z2eVG" bool(true) bool(false)
je comprend pas alors que c'est le meme encodage

inscription :

Code : Tout sélectionner

$options = ['cost' => 12,]; //on crypte le mot de passe $mot_de_passe_crypte = password_hash($_POST['mot_de_passe'], PASSWORD_BCRYPT, $options);
connexion:

Code : Tout sélectionner

$options = ['cost' => 12,]; $pass_crypte = password_hash($pass, PASSWORD_BCRYPT, $options);