Trying to access array offset on value of type bool

Résolu/Fermé
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 - Modifié le 10 mai 2022 à 23:27
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 - 11 mai 2022 à 09:29
bonsoir a tous

je suis occupé a essayer d 'empêcher les utilisateurs non valider d'accéder à l'espace membre
Mais j'ai cette erreur
Trying to access array offset on value of type bool
Malgré que on code fonctionne

voici la ligne ou cela coince

if ($userexit['confirme'] != 1)


et mon code complet

<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);

//on recupere le lien link pour la redirection vers les autres pages
$link = !empty($_GET['link']) ? $_GET['link'] : NULL;
//$referer = ($_SERVER['HTTP_REFERER']);
//echo $referer ;
require_once 'base.php';
if (!empty($_POST['pseudo']) && !empty($_POST['password']))
{
    $pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
    $password = !empty($_POST['password']) ? $_POST['password'] : NULL;
    // $pseudo = htmlspecialchars($_POST['pseudo']);
    //$password = htmlspecialchars($_POST['password']);
    // $check = $bdd->prepare('SELECT pseudo, email,id, password FROM utilisateurs WHERE pseudo = ?');
    //$check->execute(array( $pseudo ));
    //$data = $check->fetch();
    //$row = $check->rowCount();
    //préparation de la requête et des variables
    $sql = 'SELECT pseudo, email,id,confirme, password FROM utilisateurs WHERE pseudo = ?';
    $datas = [$pseudo];
    //Execution de la requete
    try
    {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    }
    catch(Exception $e)
    {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " Les datas : ";
        print_r($datas);
    }
    $data = $requete->fetch();
    $row = $requete->rowCount();
$userexit=$requete->fetch();
    //si le peusdo est bien dans la base et qu'il soit activer alors on continue sinon on sort
 if ($userexit['confirme'] !=1)
    {
    if ($row == 1)
    {
        //on verifie le pawword si il est ok on continue , sinon sortie
        if (password_verify($password, $data['password']))
        {
            //on definit et on cree les variables sessions
            $_SESSION['user'] = array(
                'id' => $data['id'],
                'pseudo' => $data['pseudo'],
                'email' => $data['email']
            );
            $_SESSION['id'] = $data['id'];
            $_SESSION['pseudo'] = $data['pseudo'];
            $_SESSION['email'] = $data['email'];

            //on test la variable link si elle est vide  on va vers index
            if (empty($_SESSION['link']))
            {
                header('Location: index.php?pseudo=' . $_SESSION['pseudo']);
                //sinon on va faire la derniere page visitee
                
            }
            else 
            {
                header('location: ' . $_SESSION['link']);
            }
            die();
        }
        else
        {
            header('Location: connexion-site.php?login_err=password');
            die();
        }
    }
    else
    {
        header('Location: connexion-site.php?login_err=already');
        die();
    }
 }
    else
    {
        echo"compte pas activer ";
    }
}
?>

4 réponses

jordane45 Messages postés 38308 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
10 mai 2022 à 23:57
Attention, tu fais deux fois à fetch...
$data = $requete->fetch();
    $row = $requete->rowCount();
$userexit=$requete->fetch();

Supprime le premier
1
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
11 mai 2022 à 00:00
merci jordane mais la variable $data j'en ai besoin
a cet endroit

 //on verifie le pawword si il est ok on continue , sinon sortie
        if (password_verify($password, $data['password']))
0
jordane45 Messages postés 38308 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
11 mai 2022 à 00:16
Dans ce cas tu viens l'autre, et tueur nomme la variable userexit par data ....
À croire que tu recommences à copier coller du code sans comprendre à quoi ça correspond...
1
Ah ok
Je viens de comprendre l erreur
On crée une variable data qui va nous servir plus tard pour notre tableau et bien entendu je ne peux pas utiliser deux fois fetech

Mais alors comment réaliser ma condition avec la colonne confirme

Par
if ($data['confirme'] !=1)
0
jordane45 Messages postés 38308 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
11 mai 2022 à 06:44
Ben oui, comme ça..
1
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
11 mai 2022 à 09:29
super cela fonctionne merci jordane
0