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

PHP & Base de données Discussion :

Boucle dans architecture MVC


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 15
    Par défaut Boucle dans architecture MVC
    Bonjour,

    Aprés plusieurs essais je me résoue à demander de l'aide

    Je voudrais afficher que la liste des articles à la connexion à la page et sur cette même page un article quand je veux le modifié avec la liste des articles.

    code la page:
    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
    if (isset($message))
    {
      echo $message, '<br />';
    }
    ?>              
            <?php if(isset($erreurs) && in_array(Billets::TITRE_INVALIDE, $erreurs)) echo 'Le titre est invalide.<br />'; ?>
            Titre : <input type="text" name="titre" value="<?php if (isset($billets)) echo $billets->titre(); ?>" /><br />
     
            <?php if (isset($erreurs) && in_array(Billets::CONTENU_INVALIDE, $erreurs)) echo 'Le contenu est invalide.<br />'; ?>
            Contenu :<br /><textarea id="formulaire" type="text" name="contenu"><?php if (isset($billet)) echo $billets->contenu(); ?></textarea><br />
    <?php
    if(isset($billet) && !$billet->isNew())
    {
    ?>
            <input type="hidden" name="id" value="<?= $billet->id() ?>" />
            <input type="submit" value="Modifier" name="modifier" />
    <?php
    }
    else
    {
    ?>
            <input type="submit" value="Ajouter" />
    <?php
    }
     
    ?>
        </p>
        </form>
     
        <p style="text-align: center">Il y a actuellement <?= $billetCount ?> billets. En voici la liste :</p>
     
        <table>
          <tr><th>Titre</th><th>Date d'ajout</th><th>Dernière modification</th><th>Action</th></tr>
    <?php
            foreach($billetList as $billets){
                 $date1 = date('d/m/y à H:i:s', strtotime($billets->dateAjout()));
                 $date2 = date('d/m/y à H:i:s', strtotime($billets->dateModif()));      
                 echo '<tr><td>',$billets->titre(), '</td><td>', $date1, '</td><td>', ($date1 == $date2 ? '-' : $date2),
                      '</td><td><a href="index.php?modifier='. $billets->id(),  '">Modifier</a> | <a href="index.php?supprimer='. $billets->id(),  '">Supprimer</a></td></tr>', "\n";
     
            }                  
            ?>   
        </table>         
    </body>
    </html>
    Le modèle:
    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
     
    class BilletsManager
    {
        private $db; 
     
        public function __construct(PDO $db)
        {
           $this->db = $db;
        }
        public function add(Billets $billets)
        {
        $q = $this->db->prepare('INSERT INTO billets(titre, contenu, dateAjout, dateModif) VALUES(:titre, :contenu, NOW(), NOW())');
     
        $q->bindValue(':titre', $billets->titre());
        $q->bindValue(':contenu', $billets->contenu());
     
        $q->execute();    
        }
        public function delete($id)
        {
        $this->db->exec('DELETE FROM news WHERE id = '.(int) $id);
        }
        public function count()
        {     
            return $this->db->query('SELECT COUNT(*) FROM billets')->fetchColumn();   
     
        }
        public function getList($debut = -1, $limite = -1)
        {
            $sql = 'SELECT id, titre, contenu, dateAjout, dateModif FROM billets ORDER BY id DESC';
     
            if ($debut != -1 || $limite != -1)
            {
                $sql .= ' LIMIT '.(int) $limite.' OFFSET '.(int) $debut;
            }
            $q = $this->db->query($sql);               
     
            $listeBillets = $q->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'App\Objet\Billets');          
     
            $q->closeCursor(); 
     
            return $listeBillets;                 
        }
        public function getUnique($id)
        {        
            $q = $this->db->prepare('SELECT id, titre, contenu, dateAjout, dateModif FROM billets WHERE id =:id');
     
            $q->bindValue(':id', (int) $id, PDO::PARAM_INT);
            $q->execute();      
     
            $billets = $q->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'App\Objet\Billets');         
     
            return $billets;
        }
        protected function update(Billets $billets)
        {
            $q = $this->db->prepare('UPDATE billets SET titre = :titre, contenu = :contenu, dateModif = NOW() WHERE id = :id');
     
            $q->bindValue(':titre', $billets->titre());
            $q->bindValue(':contenu', $billets->contenu());
            $q->bindValue(':id', $billets->id(), PDO::PARAM_INT);
     
            $q->execute();
        }
        public function save(Billets $billets)
        {
            if ($billets->isValid())
            {
                $billets->isNew() ? $this->add($billets) : $this->update($billets);
            }
            else
            {
                throw new RuntimeException('Le billet doit être valide pour être enregistré');
            }
        }
    }    
    ?>
    Le contrôleur:
    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
     
    <?php
    namespace App\Controller;
    use PDO;
    use App\Objet\Billets;
    use App\Objet\Connect;
    use App\Model\BilletsManager;
    require 'Librairies/Objet/Connect.php';
     
    class BilletController{     
     
           public function list(){       
                  $db = Connect::getPDO();            
                  $manager = new BilletsManager($db);
                  $billetList = $manager->getList(0, 5);                       
     
                  chdir('Librairies/View');
                  include('HomeView.php'); 
           }
           public function unique(){       
                  $db = Connect::getPDO();    
                  $manager = new BilletsManager($db);       
                  $billetId = $manager->getUnique((int)$_GET['id']); 
     
                  chdir('Librairies/View');
                  include('BilletView.php');         
           }
           public function adminList(){       
                  $db = Connect::getPDO();  
                  $manager = new BilletsManager($db);       
                  $billetList = $manager->getList();            ;          
                  $billetCount = $manager->count();           
     
                  chdir('Librairies/View');
                  include('AdminView.php');                    
           }       
           public function adminChange($billets){       
                  $db = Connect::getPDO();  
                  $manager = new BilletsManager($db);       
                  $billetUnique = $manager->getUnique($billets);  
     
                  $billetCount = $manager->count();   
     
                  chdir('Librairies/View');
                  include('AdminView.php');                
           }
           public function save($billets){
                  $db = Connect::getPDO(); 
                  $manager = new BilletsManager($db);             
                  $manager->save($billets);                              
     
                  chdir('Librairies/View');
                  include('AdminView.php'); 
           }
           public function delete($id){
                  $db = Connect::getPDO();    
                  $manager = new BilletsManager($db); 
                  $manager->delete($id);               
     
                  chdir('Librairies/View');
                  include('AdminView.php'); 
           }
    }
    Avec les tests que j'ai fais, soit j'ai une liste qui ce met sur l'article à modifié et la liste en plus. Soit le billet que je veux modifier + l'affiche du même billet à la place de la liste. Soit variable non défini pour le billet que je veux modifier. Soit variable non défini pour la liste.

    Merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    salut,

    le mieux c'est dans ton tableau des articles, de faire un peu de js : quand tu cliques sur une ligne, tu passes en modification de la ligne, tu sauvegardes la mise à jour via ajax et hop, tu repasses la ligne en mode lecture tableau.

    Ce n'est pas facultatif, tu dois aérer ton code.
    Puis si tu finis le nom d'une classe avec un s comme Billets, cela veut dire que Billets est une collection, or cela ne semble pas être le cas dans ton code.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 15
    Par défaut
    Bonjour,

    j'ai résolu le problème en modifiant ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
           public function adminChange($billets){       
                  $db = Connect::getPDO();  
                  $manager = new BilletsManager($db);       
                  $billetUnique = $manager->getUnique($billets);  
     
                  $billetCount = $manager->count();   
     
                  chdir('Librairies/View');
                  include('AdminView.php');                
           }
    par ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public function adminChange(){       
                  $db = Connect::getPDO();  
                  $manager = new BilletsManager($db);       
                  $billetUnique = $manager->getUnique((int)$_GET['modifier']);                                                    
                  $billetCount = $manager->count();                              
                  $billetList = $manager->getList(); 
     
                 chdir('Librairies/View');      
                 include('ChangeView.php');
    Merci quand même pour ton aide.

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

Discussions similaires

  1. [POO] insérer autoload dans architecture mvc
    Par laurentSc dans le forum Langage
    Réponses: 4
    Dernier message: 06/08/2019, 11h30
  2. Réponses: 1
    Dernier message: 08/03/2013, 14h06
  3. Frame, MenuBar et Panel dans architecture MVC
    Par maccormick dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 05/12/2012, 17h31
  4. Boucles dans structure MVC souple.
    Par DrWilly dans le forum Langage
    Réponses: 4
    Dernier message: 09/02/2010, 23h57
  5. [Spring MVC] Architecture MVC dans spring
    Par Alec6 dans le forum Spring Web
    Réponses: 4
    Dernier message: 11/10/2006, 12h35

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