inverser le sens d'affichage des donner

Mammouth du PHP | 558 Messages

23 déc. 2008, 12:43

je butte sur le probleme depuis une semaine et la je bloque.
sur mon site le soucis c'est que les derniers ajouts sont afficher a la fin et je voudrais les mettre au debut en en affichant que quatre a la fois je vous met ou j'en suis.
cela n'est que ce qui concerne mon probleme
j'arrive a rien cela me les inverse bien mais les 4 premier seulement alors qu'au debut je voudrais les quatre dernier au debut
$page=intval($_GET['page']);
if($page < 1)
{
$page = '1';
}
$controle_page=$page;
if($table!='cathegorie'){$table='type';}elseif($table!='type'){$table='cathegorie';}
$nombre_article1=mysql_query("SELECT COUNT(*) FROM `produit` WHERE `$table` = '$type'  AND `stock` > 0");
$nombre_article=mysql_fetch_array($nombre_article1);
$nombre_page = ceil($nombre_article['COUNT(*)']/'4');
$page1=$page*'4'-'4';

$mod1 = mysql_query("SELECT * FROM produit WHERE $table = '$type'  AND stock > 0  ORDER BY id DESC LIMIT $page1,4 ");
while ($mod=mysql_fetch_assoc($mod1))
{}
merci de votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 déc. 2008, 15:42

Je vois pas bien ce qui pourrait clocher... pour trier par ordre décroissant, il suffit effectivement de spécifier un "ORDER BY champ DESC" dans ta requête, donc ton dernier while devrait bien t'afficher tes résultats du plus grand id au plus petit.

Peux-tu nous décrire d'avantage le problème ?

A noter que ce que tu mets entre apostrophes/guillemets est considéré par php comme une chaine, et qu'un nombre n'a pas besoin d'être converti en chaine pour être utilisé :
$nombre_page = ceil($nombre_article['COUNT(*)']/4); 
$page1 = $page*4 - 4;
sera tout aussi efficace, voire plus performant, et surtout plus lisible
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 558 Messages

23 déc. 2008, 17:27

le script en lui meme fonctionne c'est dans la presentation des resultats que ce n'est pas ce que je veux.
le soucis que j'ai c'est d'afficher mes articles du plus recent au plus ancien 4 par 4 mais la premiere pages me donne toujours les plus ancien et pas les plus recent.

Mammouth du PHP | 881 Messages

23 déc. 2008, 18:37

C'est parce que dans ton code tu as ORDER BY id DESC
plutôt que ORDER BY NomChamptDate DESC
Soyez artisans de paix

Mammouth du PHP | 558 Messages

24 déc. 2008, 12:43

j'ai pas compris tu peux expliquer un peu merci j'ai pas de champs date dans ma table

Invité
Invité n'ayant pas de compte PHPfrance

24 déc. 2008, 16:58

Il te sera impossible de trier par date si tu n'enregistre pas la date.

Présente-nous la structure de ta table à trier (CREATE TABLE produit ...)
Tu obtiendras cela dans phpmyadmin via la fonction "exporter" (un taquet en tête de page lorsque tu affiche la table produit

Mammouth du PHP | 558 Messages

24 déc. 2008, 19:19

cette solution n'est donc pas bonne je ne vais pas refaire toute la page pour cela merci quand meme

Code : Tout sélectionner

CREATE TABLE `produit` ( `id` int(11) NOT NULL auto_increment, `code_produit` varchar(255) NOT NULL default '', `cathegorie` varchar(255) NOT NULL default '', `type` varchar(255) NOT NULL default '', `petite_image` varchar(255) NOT NULL default '', `grande_image` varchar(255) NOT NULL default '', `image1` varchar(255) NOT NULL default '', `image2` varchar(255) NOT NULL default '', `image3` varchar(255) NOT NULL default '', `description` text NOT NULL, `prix` varchar(255) NOT NULL default '', `taille` varchar(255) NOT NULL default '', `stock` varchar(255) NOT NULL default '0', `recherche` text NOT NULL, PRIMARY KEY (`id`), FULLTEXT KEY `recherche` (`recherche`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=73 ;

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 déc. 2008, 19:37

Euh... on a pas nécessairement besoin d'une date pour trier des enregistrements chronologiquement. En l'occurence, si l'id est en auto_increment, les id les plus grands seront les plus récents, pas besoin de revoir toute la structure pour ça.

Ceci étant, et vu ton code (order by id desc), je ne comprends pas ce qui ne fonctionne pas dans ton tri... sur ta première page tu as les 4 derniers éléments triés de façon décroissante (id = 54, 53, 52 et 51 par exemple) et quand tu passes à la page 2 tu les retrouves par ordre croissant ? (id = 1, 2, 3 et 4 ??)

si tel est le cas, c'est que tu ne passes pas par le code mentionné ci-dessus ou que t'as des problèmes dans les valeurs du limit :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 558 Messages

26 déc. 2008, 14:19

je suis en auto increment.
et le probleme que j'ai c'est que la premiere page me donne 4,3,2,1 au lieu de 69,68,67,66 et pour moi 4321 ou 1,2,3,4 c'est exactement la meme chose en page deux j'ai 8,7,6,5 etc...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 déc. 2008, 02:11

Bizare....

et si on oublie la pagination quelques instants, et que tu fais juste un

Code : Tout sélectionner

"SELECT * FROM produit WHERE $table = '$type' AND stock > 0 ORDER BY id DESC"
(sans le LIMIT donc) quelle que soit la valeur de $page

Est ce que tu as bien depuis le dernier id jusqu'au premier ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 558 Messages

27 déc. 2008, 18:14

sa y'est c'est bon j'ai debuguer et sa fonctionne tres bien merci a tous pour votre aide.