Gestion de news avec commentaires en POO

Rechercher

Gestion de news avec commentaires en POO

Par elscorto  -  4 reponses  -  Le 01/10/2009 13:44  -  Editer  - 

Bonjour voilà pour m'exercer à l'OO, je me suis donné un petit exercice, faire un système de news avec commentaires et un petit espace membre.

Les visiteurs ne peuvent que voir les news et commentaires

Les membres eux peuvent ajouter un commentaires

Les admins peuvent tout faire

Mon code fonctionne pour le momment, les commentaires sont bien liés aux news, et seul les admins peuvent supprimer ces commentaires, mais je sens que mon code ne va pas.En effet, jai une classe Gestion_utilisateur qui pour la gestion des droits a des constantes de droits et une méthode is_admin qui récupére les droits de l'user et la compare.Seulement je pense qu'il serai mieux de faire une classe Visiteur,Membre et Administrateur,mais je ne vois pas trop quoi mettre comme méthode.

Je vous donne la partie des commentaires,ça sera peut être plus simple avec du code.

<?php
session_start();
define('SERVEUR', 'localhost');
define('BASE', 'test_poo');
define('LOGIN', 'root');
define('PASS', '');
function __autoload($className){
    if(file_exists($className.'.class.php'))
        require($className.'.class.php');
    else echo 'erreur';
}
$erreur = '';
$id_news = '';
if(!empty($_SESSION['user']))
{
    $action = (!empty($_GET['action'])?$_GET['action']:'');
    if($action == 'ajouter')
    {
        if(isset($_POST['valid']))
        {
            $pseudo = $_POST['pseudo'];
            $message = $_POST['message'];
            $id_news = $_POST['id_news'];
            if($com = Gestion_Commentaires::create($pseudo,$message,$id_news));
            {
                if(Gestion_Commentaires::save($com))
                {
                    header('Location: index.php');
                }
                else
                {
                    $erreur = 'Erreur dans la méthode save';
                    include('form_comm.php');
                }
            }
            $erreur = 'Erreur dans la méthode create';
            include('form_comm.php');
        }
        else
        {
            $id_news = $_GET['id'];
            include('form_comm.php');
        }
    }
    elseif($action == 'supprimer')
    {
        $user = unserialize($_SESSION['user']);
    if(Gestion_utilisateurs::is_admin($user))
    {
      $id = $_GET['id'];
          if(Gestion_Commentaires::delete($id))
            header('Location: index.php');
          else header('Location: index.php');
    }
    else echo '<a href="index.php">dégage de là</a>';
  }
}
else
{
  echo 'T\'as rien à foutre ici,dégage de là!!!!<br />';
  echo '<a href="index.php">Revenir à ta place</a>';
}
?>

Voici ma classe Gestion_Commentaires

<?php
abstract class Gestion_Commentaires{
    public static function create($pseudo,$message,$id_news){
        $sql = "SELECT id FROM commentaires ORDER BY id DESC LIMIT 1";
        $connexion = PDO2::getInstance();
        $req = $connexion->prepare($sql);
        if($req->execute())
        {
            $result = $req->fetch(PDO::FETCH_OBJ);
            $id = ($result->id)+1;
            echo $id;
            return new Commentaires($id,$pseudo,$message,time(),$_SERVER['REMOTE_ADDR'],$id_news);
        }
    }
    public static function save(Commentaires $com){
        $connexion = PDO2::getInstance();
        $sql = "INSERT INTO commentaires(id,pseudo,contenu,date,ip,news_id) VALUES
                (:id,:pseudo,:contenu,NOW(),:ip,:news_id)";
        $req = $connexion->prepare($sql);
        $req->bindValue(':id',              $com->getId());
        $req->bindValue(':pseudo',          $com->getPseudo());
        $req->bindValue(':contenu',         $com->getContenu());
        $req->bindValue(':ip',              $com->getIp());
        $req->bindValue(':news_id',         $com->getNewsId());
        if($req->execute())
        {
            $req->closeCursor();
            return true;
        }
        else return false;
    }
    public static function getList(News $news){
        $collection = array();
        $sql = "SELECT * FROM news
                LEFT JOIN commentaires
                ON news.id=  commentaires.news_id
                WHERE commentaires.news_id = :id_news
                ORDER BY commentaires.id DESC";
        $connexion = PDO2::getInstance();
        $req = $connexion->prepare($sql);
        $req->bindValue(':id_news',     $news->getId());
        if($req->execute())
        {
            $result = $req->fetchAll(PDO::FETCH_OBJ);
            foreach($result as $collect)
            {
                $collection[] = new Commentaires($collect->id,$collect->pseudo,$collect->contenu,$collect->date,$collect->ip,$collect->news_id);
                $req->closeCursor();
            }
            return $collection;
        }
    }
    public static function count(News $news){
        $sql = "SELECT COUNT(*) FROM commentaires WHERE news_id = :news_id";
        $connexion = PDO2::getInstance();
        $req = $connexion->prepare($sql);
        $req->bindValue(':news_id',      $news->getId());
        if($req->execute())
        {
            $result = $req->fetchColumn();
            $req->closeCursor();
            return $result;
        }
    }
    public static function delete($id){
        $connexion = PDO2::getInstance();
        $sql = "DELETE FROM commentaires WHERE id = :id";
        $req = $connexion->prepare($sql);
        $req->bindValue(':id',              $id);
        if($req->execute())
        {
            $req->closeCursor();
            return true;
        }
        else return false;
    }
}
?>

ma classe Gestion_utilisateurs

<?php
abstract class Gestion_utilisateurs{
    const IS_SIMPLE_USER = 1;
    const IS_ADMIN = 2;
    public static function getList(){
        $collection = array();
        $connexion = PDO2::getInstance();
        $sql = "SELECT * FROM user";
        $req = $connexion->prepare($sql);
        if($req->execute())
        {
            $result = $req->fetchAll(PDO::FETCH_OBJ);
            foreach($result as $collect)
            {
                $collection[] = new Utilisateur($collect->id,$collect->pseudo,$collect->mdp,$collect->droits_id);
                $req->closeCursor();
            }
            return $collection;
        }
        else return false;
    }
    public static function getUser($pseudo,$pass){
        $collection = array();
        $connexion = PDO2::getInstance();
        $sql = "SELECT id,pseudo,mdp,droits_id FROM user
                WHERE pseudo = :pseudo AND mdp = :pass";
        $req = $connexion->prepare($sql);
        $req->bindValue(':pseudo',          $pseudo);
        $req->bindValue(':pass',            $pass);
        if($req->execute())
        {
            $result = $req->fetch(PDO::FETCH_OBJ);
            $collection = new Utilisateur($result->id,$result->pseudo,$result->mdp,$result->droits_id);
            $req->closeCursor();
            return $collection;
        }
        else return false;
    }
  public static function is_admin($user){
    if($user->getDroits() == self::IS_ADMIN)
      return true;
    else return false;
  }
}
?>

et ma classe Utilisateur

<?php
class Utilisateur{
    protected $_id;
    protected $_pseudo;
    protected $_pass;
    protected $_droits;
    public function __construct($id,$pseudo,$pass,$droits){
        $this->_id = $id;
        $this->_pseudo = $pseudo;
        $this->_pass = $pass;
        $this->_droits = $droits;
    }
    public function getId(){
        return $this->_id;
    }
    public function getPseudo(){
        return $this->_pseudo;
    }
    public function getPass(){
        return $this->_pass;
    }
    public function getDroits(){
        return $this->_droits;
    }
}
?>

Voilà donc c'est pour savoir ce que vous en pensez,comment puis je l'améliorer.Merci par avance.

 

Réponses apportées à cette discussion

Par Mimosa  -  Le 04/10/2009 18:45  -  Haut de page  - 

Salut,

Pourquoi ne pas créer directement ton objet commentaire dans dans ta 1ère partie au lieu de passer par une fonction create ?

Il suffit simplement de faire :

<?php
if(isset($_POST['valid'])) {
  $pseudo = $_POST['pseudo'];
  $message = $_POST['message'];
  $id_news = $_POST['id_news'];
  $com = new Commentaires($pseudo,$message,time(),$_SERVER['REMOTE_ADDR'],$id_news);
  if(Gestion_Commentaires::save($com)) {
    header('Location: index.php');
  } else {
    $erreur = 'Erreur dans la méthode save';
    include('form_comm.php');
  }
} else {
  $id_news = $_GET['id'];
  include('form_comm.php');
}
?>
 
Par elscorto  -  Le 05/10/2009 17:26  -  Haut de page  - 

Une méthode create pour Créer l'objet,une méthode save pour sauvegarder l'objet en base. 2 phases différentes qui l'est mieux de séparer pour une meilleure maintenance,du moins c'est ce qu'on m'a appris.

 
Par  -  Le 07/01/2012 06:39  -  Haut de page  - 

This is one of the most incredibleread in a very long time. The amount of information in here is stunning, like you practically wrote the book on the subject. discount ugg boots

 

 
Par YoussefQ  -  Le 29/02/2012 12:08  -  Haut de page  - 

Bonjour, est-ce qu'on peut avoir la base de donnés ? Merci :)

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |