PHP

Problème de connexion

Non Résolu

Bonjour les geeks,

Je suis débutant et j'ai besoin d'aide pour évoluer donc merci d'avance pour vos commentaires.


En suivant le tuto de la page connexion.php,

j'aimerais testé l'authentification mais j'ai l'impression que les résultats de la requête ne sont pas envoyés dans les variables $_SESSION et je reçois un message d'erreur que voici :


Warning: Trying to access array offset on value of type bool in C:\laragon\www\monsite\connexion.php on line 32

Se Connecter

Le mail ou le mot de passe est incorrecte


if ($req['id'] == "") {  
            $valid = false;
            $er_mail = "Le mail ou le mot de passe est incorrecte";
        }


voici le code complet de la page connexion.php:


<?php
session_start();  // démarrer une session
include('./bd/connexionDB.php'); // Fichier PHP contenant la connexion à votre BDD


// S'il y a une session alors on ne retourne plus sur cette page
if (isset($_SESSION['id'])) {
    header('Location:index.php');
}


// Si la variable "$_Post" contient des informations alors on les traitres
if (!empty($_POST)) {
    extract($_POST);
    $valid = true;
    if (isset($_POST['connexion'])) {
        $mail = htmlentities(strtolower(trim($mail)));
        $mdp = trim($mdp);
        if (empty($mail)) { // Vérification qu'il y est bien un mail de renseigné
            $valid = false;
            $er_mail = "Il faut mettre un mail";
        }


        if (empty($mdp)) { // Vérification qu'il y est bien un mot de passe de renseigné
            $valid = false;
            $er_mdp = "Il faut mettre un mot de passe";
        }
        // $mdp =  password_hash($mdp, PASSWORD_DEFAULT);
        // On fait une requête pour savoir si le couple mail / mot de passe existe bien car le mail est unique !
        $req = $DB->query("SELECT * FROM utilisateur WHERE mail = ? AND mdp = ?"array($mail, password_hash($mdp, PASSWORD_BCRYPT)));
        // var_dump($req);
        $req = $req->fetch();


        if ($req['id'] == "") {
            $valid = false;
            $er_mail = "Le mail ou le mot de passe est incorrecte";
        }
        // Si le token n'est pas vide alors on ne l'autorise pas à accéder au site
        if (!empty($req['token'])) {
            $valid = false;
            $er_mail = "Le compte n'a pas été validé";
        }



        // S'il y a un résultat alors on va charger la SESSION de l'utilisateur en utilisateur les variables $_SESSION
        if ($valid) {
            $_SESSION['id'] = $req['id']; // id de l'utilisateur unique pour les requêtes futures
            $_SESSION['nom'] = $req['nom'];
            $_SESSION['prenom'] = $req['prenom'];
            $_SESSION['mail'] = $req['mail'];
            // header('Location:  index.php');
            header('Location:profil.php');
            exit;
        }
    }
}
?>
<!DOCTYPE html>
<html lang="fr">


<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Connexion</title>
</head>


<body>
    <div>Se Connecter</div>
    <form action="" method="post">
        <?php if (isset($er_mail)) { ?>


            <div><?= $er_mail ?></div>


        <?php  } ?>


        <input type="text" placeholder="Adresse Mail" name="mail" value="<?php if (isset($mail)) {
                                                                                echo $mail;
                                                                            } ?>" required>


        <?php if (isset($er_mdp)) { ?>


            <div><?= $er_mdp ?></div>


        <?php  } ?>
        <input type="password" placeholder="Mot de Passe" name="mdp" value="<?php if (isset($mdp)) {
                                                                                echo $mdp;
                                                                            } ?>">
        <button type="submit" name="connexion">Se Connecter</button>
    </form>
</body>


</html>


profil.php


<?php
session_start();
if (!isset($_SESSION['id'])) {
    echo "non connecté";
} else {
    echo "connecté";
    echo 'ID : ' . $_SESSION['id'] . 'Nom : ' . $_SESSION['nom'] . ', prénom :' . $_SESSION['prenom'] . ' , mail :' . $_SESSION['mail'];
}
501 vues
10 septembre 2021 à 18:15 (Édité)
Cette pub permet au site de vivre ...

8 commentaires

Bonsoir @lord87,


Nous n'avons reçu aucune réponse de ta part, je ferme ce topic ! Lorsque tu auras besoin d'aide, pense à répondre aux questions posées afin que les internautes ayant le même problème que toi puissent connaître la ou les solution(s) 😉


Néanmoins, bonne continuation à toi 😎

Re:


Merci d'avoir complété ton profil. Cela nous permet de t'aider au mieux en te fournissant des réponses plus adaptées à ton niveau actuel sur les langages de développement web. Je me permet de déterrer le topic. J'ai vu que tu as mis le topic en "Résolu" @lord87... As-tu trouver une solution à ton problème ? 🤔 Si oui, peux-tu poster cette solution dans ta prochaine réponse afin que cela aide également les autres membres qui auraient le même problème 😉

Hello @lord87,


Merci de :


  • Compléter ton profil correctement à cette adresse.
  • Utilisez les balises mises à disposition lors de la rédaction de ton topic ou de tes commentaires. En savoir plus.
  • Evitez les fautes d'orthographes.

@Clouder je viens de tester


$req = $req->fetch();
var_dump($req['id']);
exit;


et j'ai eu ce résultat

Warning: Trying to access array offset on value of type bool in C:\laragon\www\monsite\connexion.php on line 32 NULL

le problème doit surement être au niveau de la requête , quand je retire le mdp des paramètres , le var_dump fonctionne correctement, le paramètre password_hash($mdp, PASSWORD_BCRYPT) semble ne pas fontionner :


$req = $DB->query('SELECT * FROM utilisateur WHERE mail = ? AND mdp = ?'array($mail, password_hash($mdp, PASSWORD_BCRYPT)));

@lord87


Tu peux tester avec :


$req = $req->fetch();
var_dump($req['id']);
exit;


Le but ici est de savoir si tu obtiens bien quelque chose de ta requête SQL.


Après si tu utilises mes fonctions 'query' et 'insert' qui sont dans le fichier pour la connexion à ta bdd il ne devrait pas y avoir de problème

Merci pour le retour !

Le var_dump($req) après le fetch()


$req = $req->fetch();
        var_dump($req);
        exit;


Cela me renvoie un booléen (false), mais quand je fais avant le fetch() :


$req = $DB->query('SELECT * FROM utilisateur WHERE mail = ? AND mdp = ?'array($mail, password_hash($mdp, PASSWORD_BCRYPT)));

var_dump($req);
exit;
$req = $req->fetch();

//var_dump($req);
//exit;


il me retourne ce résultat, je ne vois pas le array()


object(PDOStatement)#3 (1) { ["queryString"]=> string(52) "SELECT * FROM utilisateur WHERE mail = ? AND mdp = ?" }


si je fais le var_dump sur le array()


$req = $DB->query('SELECT * FROM utilisateur WHERE mail = ? AND mdp = ?'array($mail, password_hash($mdp, PASSWORD_BCRYPT)));
        var_dump(array($mail, password_hash($mdp, PASSWORD_BCRYPT)));
        exit;


il m'affiche les informations


array(2) { [0]=> string(14) "oriol@yahoo.fr" [1]=> string(60) "$2y$10$Ah2.b7RWwdkqmK/v0IKRHeLqQIakP0nTpZHOLvcgEeuj2sDl6VoHG"


voici la fonction querry :


 public function query($sql, $data = array())
  {
    $req = $this->connexion->prepare($sql);
    $req->execute($data);
    return $req;
  }

Salut @lord87 ,



Je mettrais ceci dans ton code afin de le déboguer et comprendre s'il y a une erreur :


<?php
$req = $DB->query("SELECT * FROM utilisateur WHERE mail = ? AND mdp = ?", array($mail, password_hash($mdp, PASSWORD_BCRYPT)));
$req = $req->fetch();

var_dump($req);
exit;


Si tu vois que dans ton var_dump tu as bien les infos de ton utilisateur alors c'est que tout est ok.

Par contre, si tu as une erreur qui s'affiche dans ton navigateur alors il faut regarder qu'est ce qui provoque ça. (Par exemple : la requête sql, un point-virgule manquant, etc.)

Cette pub permet au site de vivre ...