Demande d'aide sur un type bool

Fermé
david76-21 Messages postés 12 Date d'inscription mercredi 22 septembre 2021 Statut Membre Dernière intervention 28 septembre 2021 - 28 sept. 2021 à 10:22
jordane45 Messages postés 36378 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 octobre 2022 - 28 sept. 2021 à 11:56
J'essaye de retourner la liste des ateliers dans un programme de séminaire en ligne cela marche tout s'affiche mais j'ai une erreur de type bool
Merci de votre aide


Notice: Trying to access array offset on value of type bool in /home/apache/wseminaire/www/model/ModelParticipant.php on line 51

<?php
include_once('src/db/connect.php');
class ModelParticipant {

	private $connect;

	public function __construct(){
// Récupération de la connexion à la bdd
			$cnt = new connect;
			$this->connect = $cnt->setConnection();
		}

	public function read(){
// Récupération des données événements
		$info = array();
		$nbr = array();
		$req2 = $this->connect->query('SELECT id, name_ev, date_ev FROM event ORDER BY date_ev DESC');
		$res = $this->connect->query('SELECT id, name_ev, date_ev FROM event ORDER BY date_ev DESC');
		while ($data2 = $req2->fetch()) {
			$id = $data2['id'];
// Réucpèrer le nombre de participants
            $req3 = $this->connect->prepare('SELECT COUNT(id) AS nbr FROM participant WHERE id_event=:value');
            $req3->bindParam(':value', $id, PDO::PARAM_INT);
            $req3->execute();

            array_push($nbr, $req3->fetch());

			$req3->closeCursor();
		}	
		$return = array("res" => $res, "info" => $info, "nbr" => $nbr);
		return $return;
	}

	public function readDetail($id) {
			$req = $this->connect->prepare('SELECT id, id_event, name, lastname, fonction, tel, mail, particip, dej, din, ateliers FROM participant WHERE id_event=:value');
			$req->bindParam(':value', $id, PDO::PARAM_INT);
			$req->execute();
			$req1 = $this->connect->prepare('SELECT ateliers FROM participant WHERE id_event=:value');
			$req1->bindParam(':value', $id, PDO::PARAM_INT);
			$req1->execute();
			$atelier = array();
			$i = 0;
			while ($data = $req1->fetch()){
					$at = explode(',', $data['ateliers']);
					$atelier[$i] = "";
					foreach ($at as $key) {
							$req2 = $this->connect->prepare('SELECT name_atelier FROM atelier where id=:value');
							$req2->bindParam(':value', $key, PDO::PARAM_INT);
							$req2->execute();
							$nameAt = $req2->fetch();
							$atelier[$i] .= $nameAt['name_atelier']."<br />";
					}
			$i++;
			}
			$res = $req;
			return array("1" => $res, "2" => $atelier);
	}

2 réponses

yg_be Messages postés 20317 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 octobre 2022 1 232
28 sept. 2021 à 10:33
bonjour,
il me semble que tu négliges de vérifier si la requête a bien fonctionné.
0
david76-21 Messages postés 12 Date d'inscription mercredi 22 septembre 2021 Statut Membre Dernière intervention 28 septembre 2021
Modifié le 28 sept. 2021 à 10:53
Le résultat s'affiche bien donc la requête fonctionne mais j'ai cette erreur de type bool en entrée de page
0
yg_be Messages postés 20317 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 octobre 2022 1 232 > david76-21 Messages postés 12 Date d'inscription mercredi 22 septembre 2021 Statut Membre Dernière intervention 28 septembre 2021
28 sept. 2021 à 10:53
0
david76-21 Messages postés 12 Date d'inscription mercredi 22 septembre 2021 Statut Membre Dernière intervention 28 septembre 2021 > yg_be Messages postés 20317 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 octobre 2022
28 sept. 2021 à 10:56
Tu peux pas me corriger dans le code je suis débutant ?
0
yg_be Messages postés 20317 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 octobre 2022 1 232 > david76-21 Messages postés 12 Date d'inscription mercredi 22 septembre 2021 Statut Membre Dernière intervention 28 septembre 2021
28 sept. 2021 à 10:59
Tu vas rester débutant si tu n'apprends pas.
0
david76-21 Messages postés 12 Date d'inscription mercredi 22 septembre 2021 Statut Membre Dernière intervention 28 septembre 2021 > yg_be Messages postés 20317 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 octobre 2022
28 sept. 2021 à 11:04
J'ai essayé cela $id = !empty($data['id']) ? $data['id'] : NULL ;

mais le résultat ne s'affiche pas
0
jordane45 Messages postés 36378 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 octobre 2022 4 367
28 sept. 2021 à 11:56
Bonjour,

Découper ton code en petites fonctions serait sûrement plus facile pour ensuite le maintenir et le débuguer.
En gros
public function getParticipantsByIdEvent($id_event) {
    try {
      $sql = 'SELECT id, id_event, name, lastname, fonction, tel, mail, particip, dej, din, ateliers FROM participant WHERE id_event=:value';
      $req = $this->connect->prepare($sql);
      $req->bindParam(':value', $id_event, PDO::PARAM_INT);
      $req->execute();
      return $req->fetchAll(); // retourne le resultat sous forme d'array
    } catch (Exception $ex) {
      echo "Erreur :" . $e->getMessage();
      exit;
    }
  }

  public function getAtelierById($id_atelier) {
    try {
      $req = $this->connect->prepare('SELECT name_atelier FROM atelier where id=:value');
      $req->bindParam(':value', $id_atelier, PDO::PARAM_INT);
      $req->execute();
      return $req->fetchColumn(); // retourne la première colonne d'une ligne de resultat sous forme d'array
    } catch (Exception $e) {
      echo "Erreur :" . $e->getMessage();
      exit;
    }
  }

  public function readDetail($id) {

    $participants = $this->getParticipantsByIdEvent($id);
    
    $atelier = array();
    
    if(!empty($participants)){
      foreach($participants as $K=>$V){
        $atelier[$K] = "";
        $at = explode(',', $V['ateliers']);
        if(!empty($at)){
          foreach ($at as $id_atelier){
            $atelier[$K] .= $this->getAtelierById($id_atelier);
          }
        }
      }
    }
    
    return array("1" => $participants, "2" => $atelier);
  }


A noter que.. si au lieu de stocker les ateliers de tes participants dans un champ tu avais créé une table spécifique
tbl_ateliers_participants ( id_participant, id_atelier )
tu aurais, via une simple jointure, pu tout obtenir avec une seule requête SQL au lieu d'exécuter des requêtes dans des boucles ( ce qui est fortement déconseillé ...et source de lenteurs dans les programmes )

Encore faut-il que tu saches ce qu'est une jointure .. et comment concevoir correctement une base de données relationnelle...

0