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

Fermé
Havca_ - 20 avril 2023 à 01:01
 Havca_ - 20 avril 2023 à 21:35

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

A voir également:

2 réponses

jordane45 Messages postés 38303 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
20 avril 2023 à 06:53

Bonjour

Commence par corriger la ligne au dessus...

if($result === true){

//Ou plus simple
if($result){

1

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
jordane45 Messages postés 38303 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705 > Havca_
20 avril 2023 à 12:25

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
Havca_ > jordane45 Messages postés 38303 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024
20 avril 2023 à 12:32

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
jordane45 Messages postés 38303 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
20 avril 2023 à 21:05

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

merci :)

0