Problème de ARRAY sur mon calendrier

Résolu
Bonjour, je fait un post a la suite de mon ancien problème (https://forums.commentcamarche.net/forum/affich-37614694-reupload-probleme-calendrier-php#jAjaxMessage) Avec tout les code et les détails qui pourrais vous être utile.

Problème d'array :


J'obtiens cette erreur dans mon programme pouvez vous m'aider s'il vous plait a régler se problème ?

3 réponses

  1. Modérateur
    Montre nous la ligne de code indiquée par le message d'erreur...

    0
    1. 0
      1. Modérateur
        Tu aurais du nous mettre le code au format "text" ... pas en image.. qu'on ne peut pas copier/coller.

        Mais bon...
        Regarde ligne 58 ... le mode de FETCH que tu as utilisé...
        0
    2. Il est toujours disponible en format texte dans l'ancien post : https://forums.commentcamarche.net/forum/affich-37614694-reupload-probleme-calendrier-php#jAjaxMessage dans la partie EVENTS et je ne c'est toujours pas quoi faire avec le FETCH. Je suis pas un pro du php je suivais juste un tuto d'une vidéo.

      <?php 
      namespace Calendar;
      
      use PDO;
      
      class Events {
      
          private $pdo;
      
          public function __construct(\PDO $pdo)
          {
              $this->pdo = $pdo;
          }
      
          /**
           * Récup les évenements entre deux dates
           * @param \DateTime $start
           * @param \DateTime $end
           * @return array
           */
          public function getEventsBetween(\DateTime $start, \DateTime $end): array{
              $sql = "SELECT * FROM events WHERE start BETWEEN '{$start->format('Y-m-d 00:00:00')}' AND '{$end->format('Y-m-d 23:59:59')}'" ;
              $statement = $this->pdo->query($sql);
              $results = $statement->fetchAll();
              return $results;
          }
      
          /**
           * Récup les évenements entre deux dates indexé par jour
           * @param \DateTime $start
           * @param \DateTime $end
           * @return array
           */
          public function getEventsBetweenByDay(\DateTime $start, \DateTime $end): array{
              $events = $this->getEventsBetween($start, $end);
              $days = [];
              foreach($events as $event){
                  $date = explode(' ', $event['start'])[0];
                  if(!isset($days[$date])){
                      $days[$date] = [$event];
                  }else{
                      $days[$date][] = $event;
                  }
              }
              return $days;
          }   
          
          /**
           * Récupére un évenement 
           * @param int $id
           * @return array
           * @throws \Exception
           */
          public function find (int $id): \Calendar\Event{ 
              require_once('Event.php');
              
              $statement = $this->pdo->query("SELECT * FROM events WHERE id = $id LIMIT 1");
              $statement->setFetchMode(\PDO::FETCH_CLASS, \Calendar\Event::class);
              $result = $statement->fetch();
      
              if($result === false){
                  throw new \Exception('Aucun résultat a était trouvé');
              }
              $re = new \Calendar\Event($result['id'],$result['name'],$result['description'],$result['start'],$result['end']);
              return $re;
          }
      }
      0
      1. Modérateur
          $statement->setFetchMode(\PDO::FETCH_CLASS, \Calendar\Event::class);
        

        là tu fais un FETCH_CLASS
        sauf que ensuite, tu essayes d'accéder aux données comme si c'était un array.
         $re = new \Calendar\Event($result['id'],$result['name'],$result['description'],$result['start'],$result['end']);
        


        Tu dois changer le mode de FETCH ..
          $statement->setFetchMode(\PDO::FETCH_ASSOC, \Calendar\Event::class);
        


        Pour info : https://www.php.net/manual/fr/pdostatement.fetch.php
        0