Problème de ARRAY sur mon calendrier

Résolu/Fermé
mister431 Messages postés 56 Date d'inscription jeudi 19 novembre 2020 Statut Membre Dernière intervention 24 juin 2022 - 14 juin 2022 à 13:30
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 14 juin 2022 à 16:42
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 ?
A voir également:

3 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
14 juin 2022 à 14:25
Montre nous la ligne de code indiquée par le message d'erreur...



0
mister431 Messages postés 56 Date d'inscription jeudi 19 novembre 2020 Statut Membre Dernière intervention 24 juin 2022
14 juin 2022 à 14:33
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
14 juin 2022 à 14:44
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
mister431 Messages postés 56 Date d'inscription jeudi 19 novembre 2020 Statut Membre Dernière intervention 24 juin 2022
14 juin 2022 à 15:21
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
14 juin 2022 à 16:42
  $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