par
sadeq » 26 juin 2007, 16:43
je ne m'en sort pas au niveau des boucles while() j'ai fait plusieurs tests mais ca me genere des boucles infinies donc mon navigateur bugé voici mon code.
c'est un listing des news que je veut afficher
Tu vois, là tu commence à confondre la notion d'objet et d'occurences d'objets et puis tu oublie que le programme objet doit répondre d'abord à un modèle.
Je m'explique:
Quand tu dis que ta classe est "news" et tu la définit comme ça:
class news
{
var $id;
var $titre;
var $auteur;
var $texte;
var $date;
var $image;
}
T'as pas le droit (conceptuel) de mettre une méthode (fonction) listing à l'intérieur car l'objet "news" est un élément de listing, puisque "listing" sous-entend: liste de news.
La preuve c'est que la fonction listing fait un "select * from news"
Et l'erreur est d'ailleurs au niveau de cette méthode est de vouloir affecter plusieurs titres extraits de la table "news" dans un seul et même titre de la classe "news".
Pour corriger cette erreur me dirais-tu, il suffit d'utiliser $this->titre[] comme un tableau mais là on rentre en conflit avec le caractère d'unicité de l'objet "news" et on serait ammené à transformer toutes les propriétés en tableau car qui dit plusieurs titres, dit plusieurs id, ...
A mon avis, pour mieux situer les choses un modèle conceptuel est primordial:
D'abord, le mot "news" veut dire "ensemble d'articles ou messages à diffuser"
Nommer donc une classe unitaire "news" n'est pas correct, l'unité est "article" ou "message"
La classe doit être nommée "article" et ses occurences doivent être regroupées dans un conteneur nommé "news".
- NEWS ------ 1,N ---------> ARTICLE
un article est défini par
class article
{
var $id;
var $titre;
var $auteur;
var $texte;
var $date;
var $image;
}
Et des news sont définis par une association de 1..N articles
class news {
//tableau de relation news/article (1,N)
var $articles = array();
//Listing à partir de la base
public function listing($nbn=null) { //paramètre facultatif
//vider le tableau résultat
$this->articles = array();
//Extraire les articles
$query = mysql_query("SELECT * FROM news ORDER BY id DESC ".($nbn>0?" LIMIT $nbn":""));
while($row = mysql_fetch_assoc($query)) {
//création d'un objet article bien formé
$un_article = new article();
$un_article->titre = $row["titre"];
//idem pour les autres propriétés
//Ajout dans la liste des articles à retourner
$this->articles[] = $un_article; //mise en relation article/news
} //fin while
//retour du résultat
return $this->articles;
}
}
Dans ta classe principale, exécutable, tu pourra déclencher donc l'extraction des news en manipulant simplement la classe news:
//objet de travail
$news = new news();
//affichage des news
echo "<pre>";
print_r($news->listing()); //tous les articles
echo "</pre>";