Problème de ARRAY sur mon calendrier

Résolu
mister431 Messages postés 58 Statut Membre -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Montre nous la ligne de code indiquée par le message d'erreur...

    0
  2. mister431 Messages postés 58 Statut Membre
     
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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
  3. mister431 Messages postés 58 Statut Membre
     
    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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
        $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