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 / Exemple :
<?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
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.