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...

      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é...
    1. 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;
          }
      }
      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