Ce site utilise des cookies pour améliorer uniquement votre expérience utilisateur.
Vous pouvez lire à tout moment comment nous utilisons les cookies sur le site.
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'];
}
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 😉
@Jerem971 merci pour la remarque.
Hello @lord87,
Merci de :
@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)));
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.)