Accueil > > > [PHP5] CLASSE DE NEWS
[PHP5] CLASSE DE NEWS
Information sur la source
Description
Bon après Hametsu21, je poste la mienne. Classe de news... utilisation très simple. Je fais une étendu de classe (parce que j'ai la flemme de refaire ma classe pour ne faire qu'un bloc :p) à partir d'une classe abstraite. Simple à comprendre ca aussi :p Allez zoup, le code :
Source
- <?php
- abstract class Objet {
-
- // Propriété de connection à la base de donnée
- protected $db;
-
- // Sortie des données de la classe
- public $output;
-
- //* Initialisation de la connection à la base de donnée *//
- protected function __construct($dbInit = TRUE) {
-
- if ( $dbInit ) {
- $this->db = mysql::GetInstance();
- } else {
- $this->db = NULL;
- }
-
- }
-
- //* Fait le vide de la mémoire *//
- public function __destruct() {
- unset($this->output);
- }
-
- }
- // Ca c'est juste la classe abstraite, voici la classe News :p
- ?>
- <?php
- class News extends Objet {
-
- public function __construct() {
- parent::__construct();
- }
-
- // Supprime une news
- // Retourne un booléen : TRUE/FALSE
- public function DeleteNews($id) {
-
- $this->db->prepare('DELETE FROM news WHERE id = {1}', $id);
- $this->db->query();
-
- return ( $this->db->affected_rows() === 1 ) ? TRUE : FALSE;
-
- }
-
- public function CountNews() {
-
- $this->db->query('SELECT COUNT(id) FROM news');
- $this->db->query();
-
- $data = $this->db->fetch_row();
- return ( (int) $data[0] );
-
- }
-
- public function GetUniqueNews($id) {
-
- unset($this->output);
-
- $this->db->prepare('SELECT id, titre, content, resume, DATE_FORMAT(date,"%d/%m/%Y à %H:%i") as date FROM news WHERE id = {1}',
- $id);
- $this->db->query();
-
- $this->output = $this->db->fetch_array();
-
- }
- // $start => début de la requète
- // $limit => Nombre d'enregistrement max
- // $comm => Active la récupération des commentaires ou non
- public function GetNews($start = 0, $limit = 30, $comm = 'count') {
-
- unset($this->output);
-
- switch ( strtolower($comm) ) {
- case 'count' :
- $this->db->prepare('SELECT news.id, news.titre, news.resume, DATE_FORMAT(news.date,"%d-%m-%Y") as date , COUNT(commentaires.id) as count , DATE_FORMAT( MAX(commentaires.date), "%d/%m/%Y") as lastcomm FROM news LEFT JOIN commentaires ON news.id = commentaires.id_news GROUP BY news.id ORDER by news.id DESC LIMIT {1},{2}',
- $start, $limit);
- break;
- case 'no' :
- $this->db->prepare('SELECT id, titre, content, resume, DATE_FORMAT(date,"%d/%m/%Y à %H:%i") as date FROM news ORDER BY id DESC LIMIT {1}, {2}',
- $start, $limit);
- break;
-
- }
- $this->db->query();
-
- while ( $data = $this->db->fetch_array() ) {
- $this->output[] = $data;
- }
-
- }
-
- // Récupére les commentaires d'une news
- // Retourne le nombre de commentaires
- public function GetComm($id, $start = 0, $limit = 10) {
-
- unset($this->output);
-
- $this->db->prepare('SELECT pseudo, content, ip FROM commentaires WHERE id_news = {1} ORDER BY id ASC LIMIT {2}, {3}',
- $id, $start, $limit);
- $this->db->query();
-
- while ( $data = $this->db->fetch_array() ) {
- $this->output[] = $data;
- }
-
- return $this->db->num_rows();
-
- }
-
- // Compte le nombre de commentaires d'une news
- public function CountComm($id) {
-
- $this->db->prepare('SELECT COUNT(*) FROM commentaires WHERE id_news = {1}', $id);
- $this->db->query();
-
- $data = $this->db->fetch_row();
- return ( (int) $data[0] );
-
- }
-
- // Ajoute un commentaire sur une news.
- public function AddComm($pseudo, $content, $id) {
-
- unset($this->output);
-
- $this->db->prepare("INSERT INTO commentaires (pseudo, content, id_news, ip, date) VALUES ('{1}', '{2}', {3}, '{4}', NOW() )",
- $pseudo, $content, $id, $_SERVER['REMOTE_ADDR']);
- $this->db->query();
-
- if ( $this->db->affected_rows() === 1 ) {
- $this->output = $this->db->insert_id();
- return true;
- } else {
- return false;
- }
-
- }
-
- // Ajoute une news
- // Retourne TRUE/FALSE en fonction de l'insertion dans la BDD
- public function AddNews($titre, $resume, $content) {
-
- unset($this->output);
-
- $this->db->prepare("INSERT INTO news (titre, resume, content, date) VALUES ('{1}', '{2}', '{3}', NOW() )",
- $titre, $resume, $content);
- $this->db->query();
-
- if ( $this->db->affected_rows() === 1 ) {
- $this->output = $this->db->insert_id();
- return true;
- } else {
- return false;
- }
-
- }
-
- // Update une news
- public function UpdateNews($titre, $resume, $content, $id) {
-
- $this->db->prepare("UPDATE news SET titre = '{1}', resume = '{2}', content = '{3}' WHERE id = {4}",
- $titre, $resume, $content, $id);
-
- if ( $this->db->affected_rows() === 1 ) {
- $this->output = $this->db->insert_id();
- return true;
- } else {
- return false;
- }
-
-
- }
-
- // Récupère l'ID qui va être inscrit dans la BDD
- public function LastIDNews() {
-
- $this->db->query('SELECT MAX(id)+1 FROM news');
-
- $data = $this->db->fetch_row();
- return ( (int) $data[0] ) ;
-
- }
-
- // Fin d'objet
- public function __destruct() {
- unset($this->output);
- }
-
- }
- ?>
- <?php
- CREATE TABLE `news` (
- `id` int(11) NOT NULL auto_increment,
- `titre` varchar(255) NOT NULL,
- `resume` varchar(255) default NULL,
- `content` text NOT NULL,
- `date` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM
-
- // Le timestamp peut être changé par un INT(11) ou un champ DATETIME ou autre :)
-
- CREATE TABLE `commentaires` (
- `id` int(11) NOT NULL auto_increment,
- `pseudo` varchar(255) NOT NULL,
- `content` text NOT NULL,
- `date` datetime NOT NULL,
- `id_news` int(11) NOT NULL,
- `ip` varchar(255) NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM
-
- ?>
- <?php
- // Utilisation :
- $news = new News;
- // Je récupère les 10 dernières news ainsi que le nombre de commentaire sur chaque news.
- $news->GetNews(0,10,'count');
- foreach ( $news->output as $data ) {
- // $code à l'intérieur :)
- // Ca reste de la mise en page
- }
- ?>
<?php
abstract class Objet {
// Propriété de connection à la base de donnée
protected $db;
// Sortie des données de la classe
public $output;
//* Initialisation de la connection à la base de donnée *//
protected function __construct($dbInit = TRUE) {
if ( $dbInit ) {
$this->db = mysql::GetInstance();
} else {
$this->db = NULL;
}
}
//* Fait le vide de la mémoire *//
public function __destruct() {
unset($this->output);
}
}
// Ca c'est juste la classe abstraite, voici la classe News :p
?>
<?php
class News extends Objet {
public function __construct() {
parent::__construct();
}
// Supprime une news
// Retourne un booléen : TRUE/FALSE
public function DeleteNews($id) {
$this->db->prepare('DELETE FROM news WHERE id = {1}', $id);
$this->db->query();
return ( $this->db->affected_rows() === 1 ) ? TRUE : FALSE;
}
public function CountNews() {
$this->db->query('SELECT COUNT(id) FROM news');
$this->db->query();
$data = $this->db->fetch_row();
return ( (int) $data[0] );
}
public function GetUniqueNews($id) {
unset($this->output);
$this->db->prepare('SELECT id, titre, content, resume, DATE_FORMAT(date,"%d/%m/%Y à %H:%i") as date FROM news WHERE id = {1}',
$id);
$this->db->query();
$this->output = $this->db->fetch_array();
}
// $start => début de la requète
// $limit => Nombre d'enregistrement max
// $comm => Active la récupération des commentaires ou non
public function GetNews($start = 0, $limit = 30, $comm = 'count') {
unset($this->output);
switch ( strtolower($comm) ) {
case 'count' :
$this->db->prepare('SELECT news.id, news.titre, news.resume, DATE_FORMAT(news.date,"%d-%m-%Y") as date , COUNT(commentaires.id) as count , DATE_FORMAT( MAX(commentaires.date), "%d/%m/%Y") as lastcomm FROM news LEFT JOIN commentaires ON news.id = commentaires.id_news GROUP BY news.id ORDER by news.id DESC LIMIT {1},{2}',
$start, $limit);
break;
case 'no' :
$this->db->prepare('SELECT id, titre, content, resume, DATE_FORMAT(date,"%d/%m/%Y à %H:%i") as date FROM news ORDER BY id DESC LIMIT {1}, {2}',
$start, $limit);
break;
}
$this->db->query();
while ( $data = $this->db->fetch_array() ) {
$this->output[] = $data;
}
}
// Récupére les commentaires d'une news
// Retourne le nombre de commentaires
public function GetComm($id, $start = 0, $limit = 10) {
unset($this->output);
$this->db->prepare('SELECT pseudo, content, ip FROM commentaires WHERE id_news = {1} ORDER BY id ASC LIMIT {2}, {3}',
$id, $start, $limit);
$this->db->query();
while ( $data = $this->db->fetch_array() ) {
$this->output[] = $data;
}
return $this->db->num_rows();
}
// Compte le nombre de commentaires d'une news
public function CountComm($id) {
$this->db->prepare('SELECT COUNT(*) FROM commentaires WHERE id_news = {1}', $id);
$this->db->query();
$data = $this->db->fetch_row();
return ( (int) $data[0] );
}
// Ajoute un commentaire sur une news.
public function AddComm($pseudo, $content, $id) {
unset($this->output);
$this->db->prepare("INSERT INTO commentaires (pseudo, content, id_news, ip, date) VALUES ('{1}', '{2}', {3}, '{4}', NOW() )",
$pseudo, $content, $id, $_SERVER['REMOTE_ADDR']);
$this->db->query();
if ( $this->db->affected_rows() === 1 ) {
$this->output = $this->db->insert_id();
return true;
} else {
return false;
}
}
// Ajoute une news
// Retourne TRUE/FALSE en fonction de l'insertion dans la BDD
public function AddNews($titre, $resume, $content) {
unset($this->output);
$this->db->prepare("INSERT INTO news (titre, resume, content, date) VALUES ('{1}', '{2}', '{3}', NOW() )",
$titre, $resume, $content);
$this->db->query();
if ( $this->db->affected_rows() === 1 ) {
$this->output = $this->db->insert_id();
return true;
} else {
return false;
}
}
// Update une news
public function UpdateNews($titre, $resume, $content, $id) {
$this->db->prepare("UPDATE news SET titre = '{1}', resume = '{2}', content = '{3}' WHERE id = {4}",
$titre, $resume, $content, $id);
if ( $this->db->affected_rows() === 1 ) {
$this->output = $this->db->insert_id();
return true;
} else {
return false;
}
}
// Récupère l'ID qui va être inscrit dans la BDD
public function LastIDNews() {
$this->db->query('SELECT MAX(id)+1 FROM news');
$data = $this->db->fetch_row();
return ( (int) $data[0] ) ;
}
// Fin d'objet
public function __destruct() {
unset($this->output);
}
}
?>
<?php
CREATE TABLE `news` (
`id` int(11) NOT NULL auto_increment,
`titre` varchar(255) NOT NULL,
`resume` varchar(255) default NULL,
`content` text NOT NULL,
`date` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM
// Le timestamp peut être changé par un INT(11) ou un champ DATETIME ou autre :)
CREATE TABLE `commentaires` (
`id` int(11) NOT NULL auto_increment,
`pseudo` varchar(255) NOT NULL,
`content` text NOT NULL,
`date` datetime NOT NULL,
`id_news` int(11) NOT NULL,
`ip` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM
?>
<?php
// Utilisation :
$news = new News;
// Je récupère les 10 dernières news ainsi que le nombre de commentaire sur chaque news.
$news->GetNews(0,10,'count');
foreach ( $news->output as $data ) {
// $code à l'intérieur :)
// Ca reste de la mise en page
}
?>
Conclusion
Voila, reste plus qu'à faire mumuse avec les autres méthodes. Ca marche sur le même principe : $news->method($args); foreach ( $news->output as $data ) { // }
Sauf certaines méthodes qui renvoient d'autres choses en plus :) C'est du basique, je compte l'améliorer prochainement... Mais alors comment :o
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Class POO retourné le nom de l'objet [ par MeTh ]
Bonjour,Comment retourné le nom de l'objet déclaré?exemple :$monobjet = new GridR();comment recuperé $monobjet dans ma class?Merci
requête count [ par Tomcube ]
Salut !J'ai une table news avec mes news, une table commentaires où sont stockés les commentaires de ces news. Dans ma page de news (qui en affiche 30
Problème affichage de la commentaires [ par dyto ]
bonjour les zéros, mon probleme c que je fai un tuto, et il y 2 champs, et kon on les remplies, il l'ajoute dans la bdd et l'affiche dans en haut, com
Ajouter des commentaires a des news [ par jeromeke ]
Bonjour,je suis à la recherche d'un script qui explique comment ajouter des commentaires à des news.Merci d'avance.Jérôme
Compteur de nombre de commentaires posté pour une news [ par jeromeke ]
Voila je comprend pas trop le principe alors si qqun pourrait m'aider je serais ravis!Merci d'avance,Jérôme
templates avec poo [ par lesnes ]
bonjours je reprogramme totalement mon site en poo et je souhaiterai utiliser les templates mais l'on ne peut pas faire appel a une class exterieur a
news [ par tomm123456 ]
bonjour et joyeuses fetes . voilà j'ai un probleme de mise à jour de news .Quand je veux modifier une news , il me renvoie bien les vale
Probléme avec GET_PAGE [ par matrixscript59 ]
donc voicie mon probléme quand je regarde les commentaire de mais news il veut pas me affiché la page 2 ou 3 etc... quand je clic sur 2 il me envoye
[POO] Une classe dans une classe [ par Mrreivax ]
Bonsoir.Et bien voila. J'ai créé une classe de gestion des images.J'ai par la suité créé une autre classe de gestion de banières.Mais, cette dernière
Pb avec la class de news de FhX [ par acidline ]
Bonjour à tous,Je me présente, je m'appelle Nicolas, j'ai 24ans et la POO en PHP est nouveau pour moi.Je me suis mis en tête d'utiliser la class de ne
|
Derniers Blogs
COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ?MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ? par junarnoalg
La prochaine session de MyTIC aura lieu à Namur, le 23 mars prochain. Pendant presque une heure, nous parlerons de SharePoint 2010. Voici un aperçu du programme.
Accueil : 17h30 Début de la session : 18h00 - Les nouvelles int...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
PHP MAIL :/PHP MAIL :/ par remitete
Cliquez pour lire la suite par remitete RE : PHP/SNMPRE : PHP/SNMP par enissay128
Cliquez pour lire la suite par enissay128 AU SECOURSAU SECOURS par trc382
Cliquez pour lire la suite par trc382
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|