Notice: Trying to access array offset on value of type bool

tabibi - Modifié le 12 avril 2022 à 11:45
jordane45 Messages postés 36372 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 octobre 2022 - 25 avril 2022 à 01:43
Bonjour,

J'essaye d'afficher des données de ma bdd en php mais j'ai ce message d'erreur "Notice: Trying to access array offset on value of type bool"
pourtant la requête est bonne (je l'ai tester dans ma bdd)
je n'arrive pas à comprendre d'où vient l'erreur.
Pouvez-vous m'aider je ne suis que novice en développement

voici le code
 <?php session_start();

header('Access-Control-Allow-Origin: *');
header('Content-Type: text/html; charset=utf-8');
require_once ('../Controller/dbController.php');

//$sql = "SELECT batiment, nomPorte FROM portes";
//$query = mysql_query($sql) or die (mysql_error());

$dbcontroller = new DBController();
$stmt = mysqli_prepare($dbcontroller->getConn(), "SELECT  batiment, nomPorte FROM portes");
$data = $dbcontroller->executeQueryMSQL($stmt);
$dbcontroller->closeConnMSQL();


?>

<table width="50%" cellpadding="5" cellspace="5">
    <tr>
        <td>Batiments</td>
        <td>Portes</td>
    </tr>
<?php while ($data){ ?>
    <tr>
    <td><?php $data['batiment'] ?></td>  (c'est ici que ça bloque)
    <td><?php $data['batiment'] ?></td>
    </tr>
<?php } ?>

</table>

EDIT : Ajout des balises de code !

Configuration: Windows / Chrome 100.0.4896.75
A voir également:

2 réponses

jordane45 Messages postés 36372 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 octobre 2022 4 364
12 avril 2022 à 11:49
Bonjour,

Ton code semble étrange.
Tu as à la fois un controller (dont on ne sait rien..) et en même temps tu essaies de faire du "pur" mysqli ...

Et puis.. ton message d'erreur doit contenir le numéro de la ligne concernée...
il serait bien de nous la donner.

Bref, donnes nous le numéro de ligne et partages nous le code de ton controller.

NB: Pour poster ton code sur le forum, tu dois utiliser les balises de code.
Explications ( à lire ENTIEREMENT !! ) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

0
voici le code du controller :

class DBController {
    private $conn;

    //Le constructeur renvoie une instance de la base de données qui sert à lancer les requêtes.
    function __construct(){
        $connection = $this->connectDBMSQL();
        if (!empty($connection)) {
            $this->conn = $connection;
        } else {
            echo("Connexion impossible à la base de données MYSQL");
        }
    }

    function connectDBMSQL(){
        include '../Connection/SqlConn.php';
        $connection = mysqli_connect($hostMSQL, $loginMSQL, $passwordMSQL, $databaseMSQL);
        return $connection;
    }
	
    function getConn(){
        return $this->conn;
    }

    function executeQueryMSQL($stmt) {
        return $stmt->execute();
    }

    function executeSelectQueryMSQL($stmt) {
        $stmt->execute();
        $meta = $stmt->result_metadata();
        while ($field = $meta->fetch_field()) {
            $params[] = &$row[$field->name];
        }
        call_user_func_array(array($stmt, 'bind_result'), $params);
        while ($stmt->fetch()) {
            foreach ($row as $key => $val) {
                $c[$key] = $val;
            }
            $resultset[] = $c;
        }
        $this->freeStatementMSQL($meta);
        if (!empty($resultset)) {
            return $resultset;
        } else {
            return null;
        }
    }

    function closeConnMSQL(){
        mysqli_close($this->conn);
    }

    function freeStatementMSQL($query) {
        mysqli_free_result($query);
    }
}


ensuite ça indique que le problème se trouve ligne 26, 27
0
class DBController {
    private $conn;

    //Le constructeur renvoie une instance de la base de données qui sert à lancer les requêtes.
    function __construct(){
        $connection = $this->connectDBMSQL();
        if (!empty($connection)) {
            $this->conn = $connection;
        } else {
            echo("Connexion impossible à la base de données MYSQL");
        }
    }

    function connectDBMSQL(){
        include '../Connection/SqlConn.php';
        $connection = mysqli_connect($hostMSQL, $loginMSQL, $passwordMSQL, $databaseMSQL);
        return $connection;
    }
	
    function getConn(){
        return $this->conn;
    }

    function executeQueryMSQL($stmt) {
        return $stmt->execute();
    }

    function executeSelectQueryMSQL($stmt) {
        $stmt->execute();
        $meta = $stmt->result_metadata();
        while ($field = $meta->fetch_field()) {
            $params[] = &$row[$field->name];
        }
        call_user_func_array(array($stmt, 'bind_result'), $params);
        while ($stmt->fetch()) {
            foreach ($row as $key => $val) {
                $c[$key] = $val;
            }
            $resultset[] = $c;
        }
        $this->freeStatementMSQL($meta);
        if (!empty($resultset)) {
            return $resultset;
        } else {
            return null;
        }
    }

    function closeConnMSQL(){
        mysqli_close($this->conn);
    }

    function freeStatementMSQL($query) {
        mysqli_free_result($query);
    }
}


cst le code du controller
et les lignes indiqué par l'erreur sont ligne ligne 26 et 27
0
jordane45 Messages postés 36372 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 octobre 2022 4 364
Modifié le 25 avril 2022 à 01:44
Bonjour,

Le code de ton controller est pas vraiment optimisé ...
A quoi ça sert de faire des fonctions qui servent à faire le exécute .. si à coté de ça tu fais tes prépares en dehors ...

et puis, faut éviter de mélanger du style procédurale et de l'orienté objet ..

En gros, modifie ton code comme ceci :
class DBController {
    private $conn;
    private $stmt;

    //Le constructeur renvoie une instance de la base de données qui sert à lancer les requêtes.
    function  __construct(){
      $this->connectDBMSQL();
    }

    public function  connectDBMSQL(){
        require_once '../Connection/SqlConn.php';
        $connection  =  new mysqli($hostMSQL, $loginMSQL, $passwordMSQL, $databaseMSQL);
       /* Vérifie la connexion */
        if (mysqli_connect_errno()) {
            printf("Échec de la connexion : %s\n", mysqli_connect_error());
            exit();
        }
        $this->conn = $connection;
    }
 
    public function  execute($sql) {
        $this->stmt = $this->conn->prepare($this->conn, $sql);
        $res = $this->stmt->execute();
        if(!$res){
          printf("Erreur : %s.\n", $stmt->error);
          exit;
        }
        return $res;
    }
    
    public function  close(){
       /* Ferme la connexion */
        $this->con->close();
    }

}


et pour l'utiliser

$dbcontroller = new DBController();
$stmt = $dbcontroller->execute("SELECT  batiment, nomPorte FROM portes");
$dbcontroller->close();



.
Cordialement,
Jordane
0