Erreur "Warning: Trying to access array offset on value of "

Havca_ -  
 Havca_ -

Bonjour,j'ai encoreune erreur que je ne comprend pas pouvez vous m'aider svp ????

voici le code:

<!DOCTYPE html>
<html>
    <head>
        <title>coucou</title>
        <link rel="stylesheet" href="styleform.css">
        <link rel="shortcut icon" href="ressources/image/home_favicon.png" type="image/x-icon">
    </head>
    <body>
        <p>coucou</p>
        <form method="post">
            <input autocomplete="off" id="lmail" placeholder="Email" name="lmail" type="email" required>
            <input autocomplete="off" id="lpass" placeholder="Password" name="lpass" type="password" required>
            <button type="submit" name="lsubmit" id="lsubmit">Login</button>
        </form>

        <?php

            //se connecter
            if(isset($_POST['lsubmit'])){
                extract($_POST);

                if(!empty($lmail) && !empty($lpass)){
                    include 'database.php';
                    global $db;

                    $lq = $db->prepare("SELECT * FROM utilisateur WHERE email = :email");
                    $lq->execute(['email' => $lmail]);
                    $result = $lq->fetch();

                    if($result = true){
                        if(password_verify($lpass, $result['mdp'])){
                            echo "connection faite !";
                        }else{
                            echo "pas le bon mot de passe";
                        }

                    }else{
                        echo "l'email n'est pas bon";
                    }

                }else{
                    echo "completer l'ensemble des champs";
                }
            }

        ?>

    </body>
</html>

et l'erreur dis:

merci encore pour votre aide ????

(la ligne 57 correspond a la ligne 31 sur le code fourni ????
Windows / Opera 97.0.0.0

2 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     

    Bonjour

    Commence par corriger la ligne au dessus...

    if($result === true){
    
    //Ou plus simple
    if($result){

    1
    1. Havca_
       

      merci encore pour votre aide, je n'ai plus d'erreur maintenant mais par contre savez vous pourquoi je n'ai pas les réponse attendue ?? 

      en gros maintenant ça fonctionne mais l'étape ou on vérifie le mot de passe c'est sensé renvoyer un petit message pour dire si c'est bon ou pas mais la peut importe si c'est le bon mot de passe ou pas, ça m'affichera quand même que se n'est pas le bon

      merci encore

      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Havca_
         

        Re,

        Ton mot de passe est crypté en bdd ( Hashé serait le terme le plus exact...) ??

        Avec quel code l'as tu généré et stocké en bdd ?

        1
      2. Havca_ > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         

        je crypte le mot de passe avec se code:

        ​
        $option = ['cost' => 12,];
        $hashpass = password_hash($pass, PASSWORD_BCRYPT, $option);
        
        ​

        et je le stocke dans ma base de données avec se code:

        $q = $db->prepare('INSERT INTO utilisateur(email, mdp) VALUES(:email, :mdp)');
        $q->execute([
           'email' => $mail,
           'mdp' => $hashpass
        ]);

        je ne sais pas si c'est bien ça que vous demandiez

        0
  2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     

    Voici quelques liens utiles à lire..

    https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

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

    Ensuite, ton code devrait ressembler à un truc du genre

    <?php
    // Démarrage des variables de session
    session_start();
    
    //Affichage des éventuelles erreurs PHP
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    
    
    //Connexion à  la bdd
    require_once 'database.php';
    //déclaration de variables
    $msg = "";                    
                        
    //Traitement du formulaire
    if(isset($_POST['lsubmit'])){
      extract($_POST);
    
      if(!empty($lmail) && !empty($lpass)){
        
        try{
          $lq = $db->prepare("SELECT * FROM utilisateur WHERE email = :email");
          $lq->execute([':email' => trim($lmail) ]);
          $result = $lq->fetch();
        }catch(Exception $e){
          //en cas d'erreur dans la requete
          echo "Erreur " . $e->getMessage() . PHP_EOL;
          
        }
          if(!empty($result) ){
              if(password_verify(trim($lpass), trim($result['mdp']))){
                $_SESSION['USER'] = $result;
                $msg = "connection faite !"; // A retirer et à remplacer par  une redirection vers une autre page une fois que ton code marchera
                //header('Location: profil.php');
                //exit;
              }else{
                 $msg = "ce pas le bon mot de passe"; // en général on évite de donner cette info pour éviter les attaques en force brute
                  
              }
    
          }else{
              $msg = "l'email n'est pas valide";
          }
    
      }else{
          $msg = "Merci de completer l'ensemble des champs";
      }
    }
    
    
    ?>
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Connexion</title>
        <link rel="stylesheet" href="styleform.css">
        <link rel="shortcut icon" href="ressources/image/home_favicon.png" type="image/x-icon">
      </head>
      <body>
        <p>coucou</p>
        <form method="post" action="">
          <input autocomplete="off" id="lmail" placeholder="Email" name="lmail" type="email" required>
          <input autocomplete="off" id="lpass" placeholder="Password" name="lpass" type="password" required>
          <button type="submit" name="lsubmit" id="lsubmit">Login</button>
        </form>
        <?php 
        if(!empty($msg)){
        ?>
        <div class="error">
        <?php echo $msg; ?>
        </div>
        <?php
        }
        ?>
    
      </body>
    </html>

    0
    1. Havca_
       

      merci :)

      0