Afficher des articles en POO

thibautB Messages postés 140 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonsoir, *
Je doit réaliser un affichage d'article pour un projet en POO.
Mon problème est que je ne sais pas comment afficher des articles en POO sans cliquer sur un bouton pour afficher les données de la BDD alors que j'ai créer une méthode pour les afficher dans ma classe contenant mes requêtes.
Je voudrais les afficher tout simplement sans cliquer sur un bouton avec ma méthode.

voici mes fichier

Page classe article
class Article
{
    private $id,
            $NomArticle,
            $Auteur,
            $Categorie,
            $DateArticle,
            $Contenu;

    public function __construct(array $donnees)
    {
        $this -> id = 0;
        $this -> NomArticle = $this -> Auteur = $this -> Categorie = $this->Contenu = "";
        $this -> DateArticle = new DateTime();
        $this ->hydrate($donnees);

    }
    public function hydrate(array $donnees)
    {
        foreach ($donnees as $key => $value)
        {
            $method = 'set'.ucfirst($key);

            if (method_exists($this, $method))
            {
                $this->$method($value);
            }
        }
    }
    public function nomValide()
    {
        return !empty($this->NomArticle);
    }

    //getter : lie les attributs

    public function  getId()
    {
        return $this->id;
    }
    public function getNomarticle()
    {
        return $this->NomArticle;
    }
    public function getAuteur()
    {
        return $this->Auteur;
    }
    public function getCategorie()
    {
        return  $this->Categorie;
    }
    public function getDateArticle()
    {
        return $this->DateArticle;
    }
    public function getContenu()
    {
        return $this ->Contenu;
    }
    //setter : modifie les attributs

    public function setId($id)
    {
        $id = (int) $id;

        if($id > 0)
        {
           $this->id = $id;
        }
    }

    public function setNom($nom)
    {
        if(is_string($nom))
        {
            $this -> nom = $nom;
        }
    }

    public function setAuteur($Auteur)
    {
        if(is_string($Auteur))
        {
            $this -> Auteur = $Auteur;
        }
    }

    public function setCategorie($categorie)
    {
        if(is_string($categorie))
        {
            $this -> Categorie = $categorie;
        }
    }

    public function setDateArticle($DateArticle)
    {
        $DateArticle = (DateTime::ATOM). $DateArticle;

        if($DateArticle = date('Y-m-d H:i:s'))
        {
            $this ->DateArticle = $DateArticle;
        }
    }
    public function setContenu($Contenu)
    {
        if(!empty($Contenu))
        {
            $this ->Contenu = $Contenu;
        }
    }

}



Page classe requête :
<?php

class RequeteArticle
{
    private $db;

    public function __construct($db)
    {
        $this -> setDB($db);
    }
    public function setDB(PDO $db)
    {
        $this -> db = $db;
    }

    public function nombreArticle()
    {
        return $this -> db ->query('select COUNT(*) from article') -> fetchColumn();
    }

    public function ajouterArticle(Article $article)
    {
        $q = $this->db->prepare('INSERT INTO article(NomArticle, Contenu) VALUES (:NomArticle,:Contenu)');

        $q -> bindValue(':NomArticle', $article->getNomarticle());
        $q -> bindValue(':Contenu', $article->getContenu());

        $q->execute();

        $article ->hydrate([
            'id' =>$this->db->lastInsertId(),
        ]);
    }

    public function supprimerArticle(Article $article)
    {
        $this->db->exec('DELETE FROM Article WHERE IdArticle = '.$article->getId());
    }

    public function miseajourArticle(Article $article)
    {
        $q = $this->db->prepare('UPDATE Article SET NomArticle = :NomArticle, Auteur = :Auteur, Categorie = :Categorie, DateArticle = :DateArticle, Contenu= :Contenu WHERE IdArticle = :id ');

        $q -> bindValue(':NomArticle', $article->getNomarticle()); //bindValue : donner un parametre autre qu'une chaine de caractere

        $q -> bindValue(':Auteur', $article->getAuteur());

        $q -> bindValue(':Categorie', $article->getCategorie());

        $q -> bindValue(':DateArticle', $article->getDateArticle());

        $q -> bindValue(':Contenu', $article->getContenu());

        $q -> bindValue(':id', $article->getId());

        $q ->execute();


    }

    public function selectionnerArticle($info)
    {
        if(is_int($info))
        {

            $q = $this ->db->query('select * from Article where id='.$info);

            $article = $q->fecth(PDO::FETCH_ASSOC); //FETCH_ASSOC : retourne une ligne de resultat sous forme de tableau associatif

            return new Article($article);

        }
        else
        {
            $q = $this->db->prepare('select * from Article where NomArticle = :NomArticle');

            $q -> execute([':info' => $info]);

            return new Article($q -> fetch(PDO::FETCH_ASSOC));
        }
    }

    public function afficherarticle($nom)
    {
        $article = [];

        $q = $this->db->prepare('select * from Article where NomArticle <> :nom ORDER BY NomArticle');

        $q->execute([':nom' => $nom]);

        while($donnees = $q->fecth(PDO::FETCH_ASSOC));
        {
            $article[] = new Article($donnees);
        }

        return $article;
    }


}

?>


Page afficher article
<?php
//fonction générer classe

function chargerClasse($classe)
{
    require $classe.'.php';
}

spl_autoload_register('chargerClasse');

session_start();

//connexion

$connexion = new PDO('mysql:host=localhost;dbname=test_poo;', 'root', '');

$connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$manage = new RequeteArticle($connexion);


if (isset($_SESSION['perso'])) // Si la session perso existe, on restaure l'objet.
{
    $article = $_SESSION['perso'];
}


?>
<!DOCTYPE html>
<html>
<head>

    <title> Article </title>

    <meta charset="utf-8" />

    <link href="bootstrap3/css/bootstrap.css" rel="stylesheet">

</head>
<body>
<div class="container">
        <nav class="navbar navbar-inverse">
            <div class="container-fluid">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                        <span class="sr-only">Toggle navigation</span>
                    </button>
                    <ul class="nav navbar-nav"> <!--met sur une ligne-->
                        <li> <a href="#" rel="nofollow noopener noreferrer" target="_blank"> Accueil </a> </li>
                    </ul>


                </div>
            </div>

            </nav><br />


</div>
<div class="container">
    <div class="row">
        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
         <section><label> Nombre d'artcile : </label><?= $manage->nombreArticle()?></section><br />
         <section> Atricle
         <br />
             <?php

            //zone pour afficher les articles

             ?>
         </section>
        </div>
    </div>
</div>

</body>
</html>



J'ai oublier de préciser que je début en POO PHP

EDIT : Ajout du LANGAGE dans les balises de code (pour avoir la couleur....)

1 réponse

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

1 - Pourquoi avoir fait deux class pour tes articles ? Une seule aurait suffit...

2 - Place le code de connexion à ta BDD dans une class .... tu n'auras ensuite que de faire un extend dessus pour le charger automatiquement dans tes autres classes.

3 - Pour répondre à ta question.. tu as créer une méthode (une fonction ) pour récupérer tes articles ... il te suffit de l'appeler dans ta page et de boucler dessus si tu en as plusieurs.

4 -Je t'invite vivement a activer la gestion des erreurs PDO dans ton code et à placer tes différentes requêtes dans des blocs try/catch
regarde ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs


0
thibautB Messages postés 140 Date d'inscription   Statut Membre Dernière intervention   1
 
ok pour l'affichage des articles peut tu juste me donner un exemple, je me débrouillerez avec
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > thibautB Messages postés 140 Date d'inscription   Statut Membre Dernière intervention  
 
Un exemple de ?
Tu sais faire une boucle ? Tu sais faire un echo ? Si oui... tu as tout ce qu'il te faut. ...
0