style différent tous les 3 enregistrements sur une boucle php

Nouveau WRInaute
Bonjour,

Comment procéder pour que tous les trois enregistrements d'une requête MYSQL je puisse afficher un style différent.
Par exemple voici le résultats de ma boucle que j'aimerai avoir.

enregistrement1
enregistrement2
enregistrement3 style="color:red";
enregistrement4
enregistrement5
enregistrement6 tyle="color:red";
....etc
Si vous pourriez me donner une piste
 
WRInaute accro
Un petit check sur le reste de la division de ta variable d'itération par 3 (= modulo):

Code:
// en supposant que tu boucles sur $i

if($i % 3 = 0) {
 $foo .= ' style="color:red;" ';
}

...et le tour est joué ;)
 
WRInaute discret
Bonjour,

HawkEye donne la bonne réponse...sauf que vers 23h00 ces yeux de faucons doivent piqués un peu :wink: :
Code:
if($i % 3 = 0) {
$foo .= ' style="color:red;" ';
}
(

Dans le test if, il faut utiliser un opérateur de comparaison == et pas d'affectation = :mrgreen:

Bonne journée à tous
 
Nouveau WRInaute
Bonjour à tous !

Je souhaite rouvrir ce topic car je cale sur le même sujet que jjmortibus.

Je m'explique:
J'ai créé un moteur de recherche d'analyses médicales (pour mon boss), avec le système de template Bootsrtap.
Donc tout marche bien, sauf qu'au niveau présentation, je voudrais que tout les 3 résultats (blocs), il y ai un style différent.
Actuellement, quand les résultats s'affichent, le 1er bloc a un style propre (span4 first-child) et le 2ème et 3ème blocs ont leurs styles (span4). Tous les blocs à la suite ont les mêmes styles que le 2 et 3.

Mais voilà, je voudrais bien que tous les 3 résultats affichés, le 4ième redevienne avec le style du 1er (retour à la ligne).

Et la solution apporté au dessus et bien, je comprends pas comment et où la mettre dans ma boucle de résultats...
(boucle normal: while($data = mysql_fetch_object($resultat))...)
 
WRInaute accro
methode rustique mais tout aussi efficace pour les allergiques au modulo :wink:

Code:
$num_deco=1;
while (....)
{



   $num_deco++;
  if($num_deco == 4) { $num_deco=1 }
}
T'as vu j'ai bien mis == :mrgreen: mais c'est le matin aussi ...
 
Nouveau WRInaute
Zecat a dit:
methode rustique mais tout aussi efficace pour les allergiques au modulo :wink:

Code:
$num_deco=1;
while (....)
{
   $num_deco++;
  if($num_deco == 4) { $num_deco=1 }
}
T'as vu j'ai bien mis == :mrgreen: mais c'est le matin aussi ...

Merci pour m'aider Zecat, mais j'ai encore du mal...

Petite précision avec de commencer, j'utilise le Template Bootstrap.

Alors je vais mettre la base de mon code avec mes demandes en plus explicite.
Voici d'abord mon code (je vous évite des parties superflues):
Code:
 //recherche des résultats dans la base de données
 $resultat = mysql_query("SELECT * FROM analyses WHERE nomanalyse LIKE '%$search%' OR soustitre LIKE '%$search%' ORDER BY id ASC");
  // Condition
  if( mysql_num_rows ( $resultat ) == "" ) { // affichage d'un message "Aucuns résultats"
  ?>
  <div id="nb_resultats">...</div>
<?php } //Fin du If
  else { ?>
  <div class="row-fluid">//IMPORTANT
  <?php       
  while($data = mysql_fetch_object($resultat))
    { ?>
       <div class="span4">//IMPORTANT
           ... //1er résultat ici
        </div>
        <div class="span4">//IMPORTANT
           ... //2ème résultat ici
        </div>
        <div class="span4">//IMPORTANT
           ... //3ème résultat ici
        </div>
        <div class="span4">//IMPORTANT
           ... //4ème résultat ici
        </div>
        ETC...
 <?php 
 } //Fin du While 
} //Fin du Else

Donc voila, chaque résultat arrive dans une DIV.span4, les uns à la suite des autres.
Et tous ces résultats sont entourés de la DIV.row-fluid (Voir les morceaux de code où c'est marqué IMPORTANT).

Sauf ce que je voudrais, c'est que tous les 3 résultats (de la requête) une nouvelle DIV.row-fluid soit générée avec les 3 prochains résultats dans leur DIV.span4. Et ainsi de suite...

Et bien là, je coince...
 
Nouveau WRInaute
spout a dit:
http://codepad.org/21m4Rxb5
http://pastebin.com/gDCw0s74
(avec foreach, je n'itère jamais les records avec while)

Merci beaucoup pour tes liens Spout !
Le 1er marche très bien !

Juste pour info:
-1) Pourquoi tu dis: (avec foreach, je n'itère jamais les records avec while) ?
-2) Dans les liens, c'est quoi le PHP_EOL ?
 
Nouveau WRInaute
spout a dit:
http://codepad.org/21m4Rxb5
(avec foreach, je n'itère jamais les records avec while)

Bon alors j'ai quand même un souci...

Ton 1er lien marche très bien pour faire :
Code:
<div class="row-fluid">
<div class="span4">span4</div>
<div class="span4">span4</div>
<div class="span4">span4</div>
</div>
<div class="row-fluid">
<div class="span4">span4</div>
<div class="span4">span4</div>
<div class="span4">span4</div>
</div> etc...

Sauf que, dans la partie:
Code:
echo '<div class="span4">span4</div>'.PHP_EOL;
Quand je mets mes données (que j'avais dans le While), il me ressort toujours le même résultat, et non pas les uns à la suite des autres...
 
Nouveau WRInaute
Alors j'ai adapté le code donné dans le 1er lien de Spout.
Ce qui me donne ($search étant l'envoi du formulaire):
Code:
while($data = mysql_fetch_object($resultat))
    {
$search = range(0,0);
	$lastKey = end(array_keys($search));
	foreach ($search as $k => $row) {
		if (!($k % 3)) {
			echo '<div class="row-fluid">';
		} ?>
		<div class="span4 well2">
                 //Les données traitées
                </div>
	<?php if (!(($k + 1) % 3) || $k == $lastKey) {
		echo '</div>';
		}
	}  
 }//Fin du While

Le problème, avec ses coordonnées pour le "range(0,0)", je me retrouve avec chaque résultat comme ceci:
Code:
<div class="row-fluid">
   <div class="span4 well2">
       //donnée 1
   </div>
</div>
<div class="row-fluid">
   <div class="span4 well2">
       //donnée 2
   </div>
</div>
<div class="row-fluid">
   <div class="span4 well2">
       //donnée 3
   </div>
</div>
ETC
Au lieu d'avoir:
Code:
<div class="row-fluid">
   <div class="span4 well2">
       //donnée 1
   </div>
   <div class="span4 well2">
       //donnée 2
   </div>
   <div class="span4 well2">
       //donnée 3
   </div>
</div>
 
WRInaute accro
Le range(0, 20) c'était pour avoir des colonnes bidons pr te montrer l'exemple.
Avec un while/fetch, tu ne dois pas faire ce foreach, le $k tu dois le faire avec un compteur perso incrémenté.
 
Nouveau WRInaute
spout a dit:
Le range(0, 20) c'était pour avoir des colonnes bidons pr te montrer l'exemple.
Avec un while/fetch, tu ne dois pas faire ce foreach, le $k tu dois le faire avec un compteur perso incrémenté.
Excuse moi, mais je suis perdu à présent...

- Pour le range(0, 20), j'avais piger;
- Pour mon While, je ne dois pas faire le Foreach ? Mais je dois faire quoi alors...
- Pour le $k, c'est là que je suis encore plus perdu...

Si tu veux du code complet ou autre n'hésite pas !
 
WRInaute accro
Pour le $k:
- avant la boucle while: $k = 0;
- à la fin de la boucle while, mais toujours dedans: $k++;

Ainsi ça donnera le même genre de fonctionnement que le $k du foreach.
 
Nouveau WRInaute
spout a dit:
Pour le $k:
- avant la boucle while: $k = 0;
- à la fin de la boucle while, mais toujours dedans: $k++;

Ainsi ça donnera le même genre de fonctionnement que le $k du foreach.

Ok pour ça, mais donc, je dois enlevé le "foreach" et laissé mon "while" ?
 
Nouveau WRInaute
Bon je me réponds à moi même (et pour aider les autres), mais j'ai été un gros boulet sur ce coup...

Comme me l'a dis Spout, il fallait bien que j'enlève le Foreach.
Donc voici mon code final, pour un moteur de recherche PHP dynamique + jQuery:
Code:
$k = 0;       
  while($data = mysql_fetch_object($resultat))
    {
	$search = range(0,2);
	$lastKey = end(array_keys($search));
	
		if (!($k % 3)) {
			echo '<div class="row-fluid">';
		} ?>
		<div class="span4 well2">
                      //données
                </div>
		
	<?php	if (!(($k + 1) % 3) || $k == $lastKey) {
			echo '</div>';
		}
 $k++;
 }//Fin du While

Ce qui donne bien:
Code:
<div class="row-fluid">
   <div class="span4 well2">
       //donnée 1
   </div>
   <div class="span4 well2">
       //donnée 2
   </div>
   <div class="span4 well2">
       //donnée 3
   </div>
</div>

Pour ceux qui veulent plus de code (en entier), dites le moi !
 
Discussions similaires
Haut