[RESOLU] Trying to access array offset on value of type bool

Eléphanteau du PHP | 38 Messages

01 déc. 2023, 21:42

Bonjour
je me permts de poster car je rencontre le probleme suivant :
src="
<br />
<b>Warning</b>: Trying to access array offset on value of type bool in <b>/srv/web/gestionnel/inc/header-html.php</b> on line <b>244</b><br />
<br />
<b>Warning</b>: Trying to access array offset on value of type bool in <b>/srv/web/gestionnel/inc/header-html.php</b> on line <b>249</b><br />
img/photo.png "
pour plus de clareté voici mon code :
<?php

                                // recherche des articles dans le pannier
                                $rs_pannier = $conn->prepare('SELECT 
                                            dc.id_detail_commande,
                                            dc.idx_article,
                                            da.designation desi,
                                            ac.prix prix
                                        FROM detail_commande dc
                                        INNER JOIN article a ON a.id_article = dc.idx_article
                                        INNER JOIN activite ac ON ac.id_activite = a.is_activite
                                        INNER JOIN des_activite da ON da.id_des_activite = ac.des
                                        WHERE dc.idx_utilisateur = :id1 AND da.designation IS NOT NULL
                                    UNION 
                                        SELECT 
                                            dc.id_detail_commande, 
                                            dc.idx_article,
                                            ar.titre desi,
                                            ar.prix_unitaire prix
                                        FROM detail_commande dc
                                        INNER JOIN  article ar ON ar.id_article = dc.idx_article
                                        WHERE dc.idx_utilisateur = :id2 AND ar.titre IS NOT NULL 
                                    UNION 
                                        SELECT 
                                            dc.id_detail_commande,
                                            dc.idx_article,
                                            e.designation desi,
                                            a.prix_unitaire prix
                                        FROM detail_commande dc
                                        INNER JOIN article a ON a.id_article = dc.idx_article
                                        INNER JOIN evenements e ON e.id_evenements =a.is_evenement
                                        WHERE dc.idx_utilisateur = :id3 AND e.designation IS NOT NULL '); 
                                $rs_pannier->execute([
                                    'id1'=>$_SESSION['id_utilisateur'],
                                    'id2'=>$_SESSION['id_utilisateur'],
                                    'id3'=>$_SESSION['id_utilisateur']
                                ]);

                                foreach($rs_pannier as $panier):

                                    // recherche si il y a une photo de profil (article et activite)
                                    $rs_photo = $conn->prepare('SELECT
                                            ph.photo
                                        FROM article a
                                        INNER JOIN photo_article ph ON ph.idx_article = a.id_article 
                                        WHERE a.id_article = ?
                                    ');
                                    $rs_photo->execute([$panier['idx_article']]);
                                    $rs_photo = $rs_photo->fetch();

                                    // On recherche si il y a une photo pour les evenements
                                    $rs_media = $conn->prepare('SELECT 
                                            me.path
                                        FROM media_evenement  me
                                        INNER JOIN evenements e ON e.id_evenements = me.idx_evenements
                                        INNER JOIN article a ON a.is_evenement = e.id_evenements
                                        WHERE a.id_article = ?');
                                    $rs_media->execute([$panier['idx_article']]);
                                    $rs_media = $rs_media->fetch()

                                 ?>
                                
                                 <div class="d-block dropdown-item dropdown-item-cart text-wrap px-3 py-2">
                                     <div class="d-flex align-items-center">
                                         <img src="
                                             <?php
                                                 if(file_exists('uploads/media_evenement/' . $rs_media[0]))
                                                 {
                                                     echo 'uploads/media_evenement/' . $rs_media[0];
                                                 }
                                                 
                                                 else if(file_exists('uploads/article/' . $rs_photo[0]))
                                                 {
                                                     echo 'uploads/article/' . $rs_photo[0];
                                                 }else
                                                 {
                                                     echo 'img/photo.png';
                                                 }
                                             ?>
Pouvez vous m'aider à résoudre mon problè_me svp ?
Merci d'avance.

Avatar du membre
Mammouth du PHP | 1609 Messages

01 déc. 2023, 22:07

Salut, tu dois avoir un problème avec les requêtes et du coup $rs_media et $rs_photo doivent être égaux à false, d'où le message : Essaie d'accéder à un élément de tableau alors que la variable est un booléen.

Tu peux tenter sous les execute
var_dump($rs_media->errorInfo());
et
var_dump($rs_photo->errorInfo());
pour voir s'il y a des erreurs.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 38 Messages

01 déc. 2023, 22:39

Salut voici le retour des var_dump

array(3) { [0]=> string(5) "00000" [1]=> NULL [2]=> NULL }
array(3) { [0]=> string(5) "00000" [1]=> NULL [2]=> NULL }

Avatar du membre
Mammouth du PHP | 1609 Messages

01 déc. 2023, 22:52

A priori il n'y a pas d'erreur et donc si je suis bien la doc ça voudrait dire qu'aucune ligne n'est retournée. Ca ne serait donc pas des requêtes en erreur mais plutôt des requêtes qui ne retournent pas de résultat.

https://www.php.net/manual/fr/pdostatement.fetch.php
Dans tous les cas, false est retourné si une erreur survient ou s'il n'y a plus de lignes.

Tu peux simplement modifier les tests pour ne pas avoir ces warnings :
if ($rs_media !== false && file_exists('uploads/media_evenement/' . $rs_media[0]))
et
elseif ($rs_photo[ !== false && file_exists('uploads/article/' . $rs_photo[0]))
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 38 Messages

02 déc. 2023, 11:30

Je te remercie beaucoup mon problème est résolu.