While et affichage

Invité
Invité n'ayant pas de compte PHPfrance

06 mars 2008, 18:24

Bonjour, je selectionne des données de cette facon :
$req=mysql_query("SELECT * FROM de ORDER BY rand()");
while ($resu = mysql_fetch_array($req) )
{
$ps = $resu['ps'];
$ur = $resu['ur'];
$mes= $resu['mes'];

} 
Et j'affiche le résultat comme ceci :
echo'<marquee scrollamount="2">- '.$ps.' | '.$mes.' | <a href="'.$ur.'" target="_blank">'.$ur.'</a> -</marquee>';
Là, il m'affiche 1 résultat aléatoire...

J'ai cherché mais je trouve pas comment faire pour afficher plusieurs résultat à la fois qui défile dans la balise <marquee>, par exemple 10 résultats.

Merci à ceux qui pourront m'aider :wink:

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

07 mars 2008, 11:17

La requête que tu utilises te retourne l'ensemble des éléments de ta table "de" trié dans un ordre aléatoire. Ta boucle permet de les parcourir un par un (en écrasant la valeur de chacune de tes variable avec les valeurs de l'enregistrement qui est lu). Si ton echo se trouve en dehors de la boucle, cela signifie qu'il a parcouru l'ensemble des enregistrement et que tu affiches le dernier :)

Pour que ton echo puisse afficher plusieurs enregistrements, il faut qu'il soit dans la boucle.
Pour que l'ensemble des éléments soient présent dans le marquee, il faut que celui-ci soit autour de la boucle.
Enfin, pour que seulement 10 éléments ne soient affichés et non pas tout le contenu de la table, tu peux utiliser la commande LIMIT de MySQL qui permet à ta requête de ne retourner que les 10 premiers enregistrements : " ... ORDER BY rand() LIMIT 0, 10" (soit 10 enregistrements à partir de l'enregistrement 0)

HTH
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 1996 Messages

08 mars 2008, 04:03

Question ? Si il met 0,10 dans limit il fera un rand que sur la portion entre 0 et 10 ?
$req=mysql_query("SELECT `ps`,`ur`,`mes` FROM `de` ORDER BY rand() LIMIT 0,10");
$k=0;
while ($resu = mysql_fetch_assoc($req) )
{
$tab_sortie[$k]['ps'] = $resu['ps'];
$tab_sortie[$k]['ur'] = $resu['ur'];
$tab_sortie[$k]['mes'] = $resu['mes'];
$k++;
}
//après tu travailles sur ton tableau comme tu veux :
foreach ($tab_sortie as $valeur)
{
echo'<marquee scrollamount="2">- '.$valeur['ps'].' | '.$valeur['mes'].' | <a href="'.$valeur['$ur'].'" target="_blank">'.$valeur['ur'].'</a> -</marquee>';
}

Edit : j'ai fais un petit truc pour sortir tout tes résultats et remplacer mysql_fetch_array par mysql_fetch_assoc pour libérer de la mémoire (merci encore à ce forum de me l'avoir instruit !)
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

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

08 mars 2008, 13:46

Question ? Si il met 0,10 dans limit il fera un rand que sur la portion entre 0 et 10 ?
Nope, le LIMIT ne fait que restreindre le nombre d'enregistrements retournés par MySQL, il n'affecte en rien l'exécution de la requête :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...