Boucle 'tant que' ... j'y arrive pas !

Mammouth du PHP | 545 Messages

04 sept. 2007, 13:29

Salut,

J'aimerai sortir sur ma page les 5 derniers enregistrements stockés dans une base de données. Je n'ai aucun problème pour tout lister mais comment dois-je faire pour ne voir apparaître que les X derniers enregistrements ?

J'ai pensé faire un espèce de compteur mais c'est un peu (beaucoup) foireux :
<?php
$compteur = 0;

if ( count($last) > 0 && count($compteur) < 5 ){
	foreach ($last as $lastlist){
		$compteur++;
?>
<td><div align="right">
			<?php
			setlocale(LC_TIME, "fr"); 
			$date = strftime('%a %d %b %Y', $lastlist->days);
			$heure = date('H\Hi', $lastlist->days);
			echo $date . ' ' . $heure;
			?></div>
		</td>
		<td><div align="right"><?php echo $lastlist->hits; ?></div></td>
	</tr>
</td>

<?php 
		} }else{
		echo '<td class=" ">' . 'Pas de message encore enregistré !' . '</td>'; 
	}
?>
Quelqu'un peut)il me remettre sur la bonne voie ?

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

04 sept. 2007, 13:43

C'est quoi la structure de ta table? car on peut faire ça par la requête SQL de sélection sans se prendre la tête à compter les boucles en php. Mais celà dépond de la structure de ta table et de si tu as une clé primaire autoincrémentée ou un champ date, critère sur lequel l'on peut s'appuyer pour reconnaître les derniers enregistrements. Il suffit alors de trier la sélection par ordre décroissant de ce critère et limiter la sortie à X premiers enregistrements.

Sinon la syntaxe générique pour ne sélectionner que X premiers enregistrements est la suivante:

Code : Tout sélectionner

SELECT * FROM table LIMIT X
où X est un nombre.

Moralité: "Les derniers deviennent premiers et les premiers deviennent derniers" grâce au tri.
Modifié en dernier par sadeq le 04 sept. 2007, 13:49, modifié 2 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 48 Messages

04 sept. 2007, 13:43

Code : Tout sélectionner

count($compteur)
tu fais un count (utilisation pour les tableaux) sur une variable qui est un chiffre ta condition n'est jamais vrai

Code : Tout sélectionner

$compteur <5
de plus tu mets ton foreach aprés ton if du coup

Code : Tout sélectionner

&& count($compteur) < 5
ne sert a rien en plus d'être faux

si je comprends bien ce que tu veux faire il faudrait que ta condition de vérification de $compteur soit sous ton foreach comme cela a chaque boucle on vérifie ta condition si elle est juste tu fais un break
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !
A.Einstein

Mammouth du PHP | 545 Messages

04 sept. 2007, 14:44

J'ai pris la 1er proposition qui me paraissait plus facile à mettre en oeuvre vu le nombre beaucoup plus élevé du nombre de ligne de code ... voici ce que cela donne :
$count = 5;
$query = "SELECT m.id as subjectid, m.name, m.time as days, m.subject, m.catid, m.hits, cc.name as catname, m.userid"
		. "\n FROM #__fb_messages AS m"
		. "\n INNER JOIN #__fb_categories AS cc ON cc.id = m.catid"
		. "\n ORDER BY days DESC"
		. "\n LIMIT $count"
		;
Un grand merci à vous 2
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!