IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Classe de news [PHP 5.6]


Sujet :

Langage PHP

  1. #1
    Membre éprouvé

    Homme Profil pro
    Développeur PHP/Symfony // Mentor OpenClassrooms
    Inscrit en
    Octobre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur PHP/Symfony // Mentor OpenClassrooms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 203
    Points : 1 264
    Points
    1 264
    Billets dans le blog
    3
    Par défaut Classe de news
    Bonsoir à tous,

    Je me permets de poster mon problème ici car je coince sur quelques classes en POO, en effet, j'ai suivi un cours sur la POO et j'ai tenté de porter le système de news sur le site en cours de développement sur lequel je bosse et je doit avouer que cela me dépasse, j'ai le bon code (enfin, apparemment non), mon serveur fonctionne et pourtant, rien ne fonctionne (d'où ma frustration), je poste donc ici dans l'espoir de trouver une solution.

    Voici mon arborescence de fichiers :

    Nom : POO.PNG
Affichages : 197
Taille : 11,3 Ko

    Voici mes classes :

    En premier DBFactory qui s'occupe de la connexion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    class DBFactory {
     
        public static function getMysqlConnexionWithPDO(){
            $db = new PDO('mysql:host=localhost;dbname=jvn-network', 'root', '');
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
            return $db;
        }
     
        public static function getMysqlConnexionWithMySQLi(){
            return new MySQLi('localhost', 'root', '', 'jvn-network');
        }
    }
    Puis NewsManager qui gère les news :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
     
    abstract class NewsManager {
     
        abstract protected function add(News $news);
     
        abstract protected function count();
     
        abstract protected function delete($id);
     
        abstract protected function getList($debut = -1, $limite = -1);
     
        abstract protected function getUnique($id);
     
        public function save(News $news){
     
            if($news->isValid()){
                $news->isNews() ? $this->add($news) : $this->update($news);
            }else {
                throw new RuntimeException('La news doit être valide pour être enregistrée');
            }
        }
     
        abstract protected function update(News $news);
    }
    Puis News qui représente une news :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    <?php
     
    class News {
     
        protected   $erreurs = [],
                    $id, 
                    $auteur,
                    $titre, 
                    $contenu,
                    $dateAjout, 
                    $dateModif;
     
        const AUTEUR_INVALIDE = 1;
        const TITRE_INVALIDE = 2;
        const CONTENU_INVALIDE = 3;
     
     
        public function __construct($valeurs = []){
     
        if(!empty($valleurs)){
     
            $this->hydrate($valeurs);
           }
        }
     
     
        public function hydrate($donnees) {
     
            foreach($donnees as $attribut => $valeur){
                $methode = 'set' .ucfirst($attribut);
     
                if(is_callable([$this, $methode])){
                $this->$methode($valeur);
                }
            }
     
        }
     
        public function isNew(){
            return empty($this->id);
        }
     
        public function isValid(){
            return !(empty($this->auteur) || empty($this->titre) || empty($this->contenu));
        }
     
        public function setId($id){
            $this->id = (int) $id;
        }
     
        public function setAuteur($auteur){
            if(!is_string($auteur) || empty($auteur)){
                $this->erreurs[] = self::AUTEUR_INVALIDE;
            }else {
                $this->auteur = $auteur;
            }
        }
     
        public function setTitre($titre){
            if(!is_string($titre) || empty($titre)){
                $this->erreurs[] = self::TITRE_INVALIDE;
            }else {
                $this->titre = $titre;
            }
        }
     
        public function setContenu($contenu){
            if(!is_string($contenu) || empty($contenu)){
               $this->erreurs[] = self::CONTENU_INVALIDE;
            }else {
                $this->contenu = $contenu;
            }
        }
     
        public function setDateAjout(DateTime $dateAjout){
            $this->dateAjout = $dateAjout;
        }
     
        public function setDateModif(DateTime $dateModif){
            $this->dateModif = $dateModif;
        }
     
        public function erreurs(){
            return $this->erreurs;
        }
     
        public function id(){
            return $this->id;
        }
     
        public function auteur(){
            return $this->auteur;
        }
     
        public function titre(){
            return $this->titre;
        }
     
        public function contenu(){
            return $this->contenu;
        }
     
        public function dateAjout(){
            return $this->dateAjout;
        }
     
        public function dateModif(){
            return $this->dateModif;
        }
    }
    Puis NewsManagerMySqli qui utilise MySQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    <?php
    class NewsManagerMySQLi extends NewsManager{
     
        protected $db;
     
     
        public function __construct(MySQLi $db)
        {
            $this->db = $db;
        }
     
        protected function add(News $news)
        {
            $requete = $this->db->prepare('INSERT INTO news SET auteur = ?, titre = ?, contenu = ?, dateAjout = NOW(), dateModif = NOW()');
     
            $requete->bind_param('sss', $news->auteur(), $news->titre(), $news->contenu());
     
            $requete->execute();
        }
     
        public function count()
        {
            return $this->db->query('SELECT id FROM news')->num_rows;
        }
     
        public function delete($id)
        {
            $id = (int) $id;
     
            $requete = $this->db->prepare('DELETE FROM news WHERE id = ?');
     
            $requete->bind_param('i', $id);
     
            $requete->execute();
        }
     
        public function getList($debut = -1, $limite = -1)
        {
            $listeNews = [];
     
            $sql = 'SELECT id, auteur, titre, contenu, dateAjout, dateModif FROM news ORDER BY id DESC';
     
            if ($debut != -1 || $limite != -1)
            {
                $sql .= ' LIMIT '.(int) $limite.' OFFSET '.(int) $debut;
            }
     
            $requete = $this->db->query($sql);
     
            while ($news = $requete->fetch_object('News'))
            {
                $news->setDateAjout(new DateTime($news->dateAjout()));
                $news->setDateModif(new DateTime($news->dateModif()));
     
                $listeNews[] = $news;
            }
     
            return $listeNews;
        }
     
        public function getUnique($id)
        {
            $id = (int) $id;
     
            $requete = $this->db->prepare('SELECT id, auteur, titre, contenu, dateAjout, dateModif FROM news WHERE id = ?');
            $requete->bind_param('i', $id);
            $requete->execute();
     
            $requete->bind_result($id, $auteur, $titre, $contenu, $dateAjout, $dateModif);
     
            $requete->fetch();
     
            return new News([
              'id' => $id,
              'auteur' => $auteur,
              'titre' => $titre,
              'contenu' => $contenu,
              'dateAjout' => new DateTime($dateAjout),
              'dateModif' => new DateTime($dateModif)
            ]);
        }
     
        protected function update(News $news)
        {
            $requete = $this->db->prepare('UPDATE news SET auteur = ?, titre = ?, contenu = ?, dateModif = NOW() WHERE id = ?');
     
            $requete->bind_param('sssi', $news->auteur(), $news->titre(), $news->contenu(), $news->id());
     
            $requete->execute();
        }
    }
    Puis NewsMangerPDO qui utilise PDO :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    <?php
     
    class NewsManagerPDO extends NewsManager{
     
        protected $db;
     
        public function __construct(PDO $db){
            $this->db = $db;
        }
     
          protected function add(News $news)
      {
        $requete = $this->db->prepare('INSERT INTO news SET auteur = :auteur, titre = :titre, contenu = :contenu, dateAjout = NOW(), dateModif = NOW()');
     
        $requete->bindValue(':titre', $news->titre());
        $requete->bindValue(':auteur', $news->auteur());
        $requete->bindValue(':contenu', $news->contenu());
     
        $requete->execute();
      }
     
     
      public function count()
      {
        return $this->db->query('SELECT COUNT(*) FROM news')->fetchColumn();
      }
     
     
      public function delete($id)
      {
        $this->db->exec('DELETE FROM news WHERE id = '.(int) $id);
      }
     
     
      public function getList($debut = -1, $limite = -1)
      {
        $sql = 'SELECT id, auteur, titre, contenu, dateAjout, dateModif FROM news ORDER BY id DESC';
     
        if ($debut != -1 || $limite != -1){
          $sql .= ' LIMIT '.(int) $limite.' OFFSET '.(int) $debut;
        }
     
        $requete = $this->db->query($sql);
        $requete->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'News');
     
        $listeNews = $requete->fetchAll();
     
        foreach ($listeNews as $news)
        {
          $news->setDateAjout(new DateTime($news->dateAjout()));
          $news->setDateModif(new DateTime($news->dateModif()));
        }
     
        $requete->closeCursor();
     
        return $listeNews;
      }
     
     
      public function getUnique($id)
      {
        $requete = $this->db->prepare('SELECT id, auteur, titre, contenu, dateAjout, dateModif FROM news WHERE id = :id');
        $requete->bindValue(':id', (int) $id, PDO::PARAM_INT);
        $requete->execute();
     
        $requete->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'News');
     
        $news = $requete->fetch();
     
        $news->setDateAjout(new DateTime($news->dateAjout()));
        $news->setDateModif(new DateTime($news->dateModif()));
     
        return $news;
      }
     
     
      protected function update(News $news)
      {
        $requete = $this->db->prepare('UPDATE news SET auteur = :auteur, titre = :titre, contenu = :contenu, dateModif = NOW() WHERE id = :id');
     
        $requete->bindValue(':titre', $news->titre());
        $requete->bindValue(':auteur', $news->auteur());
        $requete->bindValue(':contenu', $news->contenu());
        $requete->bindValue(':id', $news->id(), PDO::PARAM_INT);
     
        $requete->execute();
      }
    }
    Puis mon autoloader :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    function autoload($classname){
        if(file_exists($file = __DIR__ . '/' . $classname . '.class.php')){
     
            require $file;
        }
    }
     
    spl_autoload_register('autoload');
    Et enfin mon fichier admin.php qui se situe dans Admin_priv et qui gère le tout via un menu et des formulaires :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    <?php
    require '../lib/autoload.class.php';
     
    $db = DBFactory::getMysqlConnexionWithPDO();
    $manager = new NewsManagerPDO($db);
     
    if (isset($_GET['modifier']))
    {
        $news = $manager->getUnique((int) $_GET['modifier']);
    }
     
    if (isset($_GET['supprimer']))
    {
        $manager->delete((int) $_GET['supprimer']);
        $message = 'La news a bien été supprimée !';
    }
     
    if (isset($_POST['auteur']))
    {
        $news = new News(
          [
            'auteur' => $_POST['auteur'],
            'titre' => $_POST['titre'],
            'contenu' => $_POST['contenu']
          ]
        );
     
        if (isset($_POST['id']))
        {
            $news->setId($_POST['id']);
        }
     
        if ($news->isValid())
        {
            $manager->save($news);
     
            $message = $news->isNew() ? 'La news a bien été ajoutée !' : 'La news a bien été modifiée !';
        }
        else
        {
            $erreurs = $news->erreurs();
        }
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>Administration</title>
    	<meta charset="utf-8" />
        <link rel="stylesheet" href="../css/Bootstrap/bootstrap.css" />
    </head>
    <body>
        <div class="container">
            <div class="row">
                <div class="col-lg-12">
                    <h3 class="text-center">Bienvenue sur la page d'administration</h3>
                    <p class="text-center">Ici, vous pourrez administrer le blog de l'Equipe et ajouter les billets en temps réel, ce panneau de configuration est encore imparfait et sera amené 
                    à s'améliorer de par la suite, veuillez donc comprendre si certains soucis surviennent, vous pouvez nous contacter à cette adresse <em>equipe_support_technique@jvn-network.fr</em> à tout moment, précisez dans l'objet du mail ceci :
                    "JVN-TEAM\\ Votre soucis || Date et Heure de l'erreur ou soucis //JVN-TEAM" afin que ces mails soient traités en priorités.</p>
                    <p class="text-center">Vous pouvez ajouter, supprimer et modifier une news via ce panneau, soyez prudent durant chaque étape et vérifier chaque modification et suppresion avant de valider !</p>
                    <p class="text-center">L'Equipe technique</p>
                    <div class="text-center"><button class="btn"><a href="../Index.php">Accéder à l'accueil du site</a></button></div>
     
                    <div class="container">
                        <br />
                        <div class="row">
                            <div class="col-lg-12">
                             <!-- Formulaire -->
                                <form action="admin.php" method="post">
                                    <?php
                                    if (isset($message))
                                    {
                                        echo $message, '<br />';
                                    }
                                    ?>
                                    <?php if (isset($erreurs) && in_array(News::AUTEUR_INVALIDE, $erreurs)) echo 'L\'auteur est invalide.<br />'; ?>
                                    Auteur : <input class="form-control" type="text" name="auteur" value="<?php if (isset($news)) echo $news->auteur(); ?>" /><br />
     
                                    <?php if (isset($erreurs) && in_array(News::TITRE_INVALIDE, $erreurs)) echo 'Le titre est invalide.<br />'; ?>
                                    Titre : <input class="form-control" type="text" name="titre" value="<?php if (isset($news)) echo $news->titre(); ?>" /><br />
     
                                    <?php if (isset($erreurs) && in_array(News::CONTENU_INVALIDE, $erreurs)) echo 'Le contenu est invalide.<br />'; ?>
                                    Contenu :<br /><textarea class="form-control" rows="8" cols="60" name="contenu"><?php if (isset($news)) echo $news->contenu(); ?></textarea><br />
                                    <?php
                                    if(isset($news) && !$news->isNew())
                                    {
                                    ?>
                                    <input type="hidden" name="id" value="<?= $news->id() ?>" />
                                    <button class="btn btn-danger" type="submit" value="Modifier" name="modifier">Envoyer</button>
                                    <?php
                                    }
                                    else
                                    {
                                    ?>
                                    <button class="btn btn-danger" type="submit" value="Ajouter">Ajouter</button>
                                    <?php
                                    }
                                    ?>
                                </form>
                            </div>
                        </div>
                    </div>
     
                    <p class="text-center">Il y a actuellement <?= $manager->count() ?> news. En voici la liste :</p>
     
                    <table>
                        <tr><th>Auteur</th><th>Titre</th><th>Date d'ajout</th><th>Dernière modification</th><th>Action</th></tr>
                        <?php
    foreach ($manager->getList() as $news)
    {
        echo '<tr><td>', $news->auteur(), '</td><td>', $news->titre(), '</td><td>', $news->dateAjout()->format('d/m/Y à H\hi'), '</td><td>', ($news->dateAjout() == $news->dateModif() ? '-' : $news->dateModif()->format('d/m/Y à H\hi')), '</td><td><a href="?modifier=', $news->id(), '">Modifier</a> | <a href="?supprimer=', $news->id(), '">Supprimer</a></td></tr>', "\n";
    }
                        ?>
                    </table>
                </div>
            </div>
        </div>
    </body>
    </html>
    Ma table est crée dans MySQL et pourtant, lorsque je clique sur Ajouter, modifier ou supprimer, rien ne se fait, ma table reste vide et rien ne semble fonctionnait, j'ai tenté de regarder chaque ligne, de comprendre où pouvait se trouver l'erreur mais cela me dépasse, si quelqu'un trouve quelque chose, je lui en serait éternellement reconnaissant.

    Merci par avance de votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Les debugages basiques fonctionnent aussi en POO.

    Pour tes cas modifier et supprimer c'est $_POST pas $_GET ; tu es dans un formulaire POST.
    Pour ajouter, je ne vois pas ou est ton appel.

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function __construct($valeurs = []){
     
        if(!empty($valleurs)){
     
            $this->hydrate($valeurs);
           }
        }
    La variable $valleur n'a pas été déclarée au préalable. Je pense que tu veux dire $valeur?

  4. #4
    Membre éprouvé

    Homme Profil pro
    Développeur PHP/Symfony // Mentor OpenClassrooms
    Inscrit en
    Octobre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur PHP/Symfony // Mentor OpenClassrooms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 203
    Points : 1 264
    Points
    1 264
    Billets dans le blog
    3
    Par défaut
    Bonjour à tout les deux,

    J'ai corrigé les lignes qui posaient soucis en suivant vos indications, l'ajout de news est bon et fonctionne mais lorsque je clique sur modifier, j'ai une méchante erreur, je comprend que j'appelle une méthode sur un non-objet mais je ne voit pas comment remédier à cela, voici l'erreur :

    Nom : POO_II.PNG
Affichages : 292
Taille : 34,2 Ko

    Lorsque je clique sur supprimer, j'ai aussi une erreur d'index :

    Nom : POO_III.PNG
Affichages : 169
Taille : 13,1 Ko

    Merci encore de votre aide.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as bien mis la même variable ligne 7 et ligne 9 ?

  6. #6
    Membre éprouvé

    Homme Profil pro
    Développeur PHP/Symfony // Mentor OpenClassrooms
    Inscrit en
    Octobre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur PHP/Symfony // Mentor OpenClassrooms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 203
    Points : 1 264
    Points
    1 264
    Billets dans le blog
    3
    Par défaut
    J'ai oublié de l'ajouter quand j'ai modifié tout à l'heure, correction faite, le message ne s'affiche plus, dernier bémol, si je clique sur modifier ou supprimer, rien ne passe, le billet ne s'affiche pas et je ne peut rien faire, l'ajout se passe très bien mais impossible de modifier ou de supprimer mes news, j'avoue ne pas comprendre d'où vient l'erreur.

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Tu as bien modifié par ? Et même chose pour supprimer.

    Si oui, regarde si getUnique() est bien appelé, et quel est le résultat de la requête.

  8. #8
    Membre éprouvé

    Homme Profil pro
    Développeur PHP/Symfony // Mentor OpenClassrooms
    Inscrit en
    Octobre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur PHP/Symfony // Mentor OpenClassrooms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 203
    Points : 1 264
    Points
    1 264
    Billets dans le blog
    3
    Par défaut
    C'est effectivement ce que j'ai modifié, getUnique est appelé ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (isset($_POST['modifier']))
    {
        $news = $manager->getUnique((int) $_POST['modifier']);
    }
    Pour supprimer, c'est appelé ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (isset($_POST['supprimer']))
    {
        $manager->delete((int) $_POST['supprimer']);
        $message = 'La news a bien été supprimée !';
    }

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Ce que je veux dire, c'est qu'il faut vérifier ce qui est exécuté au sein de la méthode getUnique.

    Si tu mets directement $news = $manager->getUnique($id) dans un fichier, en remplaçant $id par l'id réel d'une news, est-ce que tu obtient une news?

    De même, si tu mets $manager->delete($id), en remplaçant $id par l'id réel d'une news, est-ce que la news est supprimée?

  10. #10
    Membre éprouvé

    Homme Profil pro
    Développeur PHP/Symfony // Mentor OpenClassrooms
    Inscrit en
    Octobre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur PHP/Symfony // Mentor OpenClassrooms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 203
    Points : 1 264
    Points
    1 264
    Billets dans le blog
    3
    Par défaut
    Si j'effectue ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (isset($_POST['modifier']))
    {
        $news = $manager->getUnique((2) $_POST['modifier']);
    }
    J'ai une erreur :

    Parse error: syntax error, unexpected '$_POST' (T_VARIABLE) in C:\wamp\www\JVN_Network\JVN\Admin_priv\admin.php on line 9
    Si je modifie selon ton schéma, rien ne change.

  11. #11
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Je viens de lire ton code dans le détail. Essaie avec ces corrections:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (isset($_GET['modifier']))
    {
        $news = $manager->getUnique($_POST['id']);
    }
     
    if (isset($_GET['supprimer']))
    {
        $manager->delete($_POST['id']);
        $message = 'La news a bien été supprimée !';
    }

  12. #12
    Membre éprouvé

    Homme Profil pro
    Développeur PHP/Symfony // Mentor OpenClassrooms
    Inscrit en
    Octobre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur PHP/Symfony // Mentor OpenClassrooms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 203
    Points : 1 264
    Points
    1 264
    Billets dans le blog
    3
    Par défaut
    J'ai utilisé ta correction et voici ce qui ressort en message d'erreur lors du clic sur supprimer.

    Notice: Undefined index: id in C:\wamp\www\JVN_Network\JVN\Admin_priv\admin.php on line 9
    Fatal error: Call to a member function setDateAjout() on a non-object in C:\wamp\www\JVN_Network\JVN\lib\NewsManagerPDO.class.php on line 70
    Si je comprend bien la seconde erreur, setDateAjout est appelé sur un non-objet, or $news est bien un objet puisqu'il possède le même id que $requete.

  13. #13
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Ça veut dire que dans cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="id" value="<?= $news->id() ?>" />
    $news->id() est vide. Regarde le code source de la page et vérifie bien qu'il y a un id dans ce champ.

  14. #14
    Membre éprouvé

    Homme Profil pro
    Développeur PHP/Symfony // Mentor OpenClassrooms
    Inscrit en
    Octobre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur PHP/Symfony // Mentor OpenClassrooms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 203
    Points : 1 264
    Points
    1 264
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Tsilefy Voir le message
    Ça veut dire que dans cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="id" value="<?= $news->id() ?>" />
    $news->id() est vide. Regarde le code source de la page et vérifie bien qu'il y a un id dans ce champ.
    Hello et encore désolé du retard,

    Bon j'ai bien regardé le code et au vu de ce que j'ai écrit, j'ai repris du départ, pour faire plus simple, je me suis mis sur Symfony 3 et j'ai mis en branle un bundle Blog qui comporte un "mini-CMS" maison, je ne dit pas que c'est parfait mais le tout fonctionne correctement et permet de faire ce dont j'ai besoin, bien entendu, j'ai basculer le site complet sous Symfony afin de maximiser le résultat.

    Je tenais à te remercier pour ton aide et ton partage de connaissance qui m'a aidé à comprendre les erreurs de mon code.

    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Drupal] Ajout d'une News qui masque tout!
    Par Epitt dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 10
    Dernier message: 07/07/2013, 14h46
  2. Probleme d'ajout dans une map
    Par parano dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 12/04/2007, 17h05
  3. [DATE] probleme d'ajout d'une date
    Par omlip dans le forum Requêtes
    Réponses: 9
    Dernier message: 10/01/2006, 20h52
  4. Probleme ajout label dans une fenetre
    Par sorry60 dans le forum GTK+ avec C & C++
    Réponses: 11
    Dernier message: 05/11/2005, 18h51
  5. [LG]probleme d'ajout dans une liste chainée...
    Par misteryann dans le forum Langage
    Réponses: 5
    Dernier message: 08/03/2004, 21h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo