oxerrois Posté 25 Août 2009 Posté 25 Août 2009 Bonjour, Je rencontre une difficulte. J'ai une table produit avec ID, nom_produit et prix. j'aimerais récupérer ces infos, ça je sais faire, mais après pour l'affichage j'aimerais l'afficher dans un tableau à double colonne. pour donner exemple ça ferait ça : Produit prix - produit prix ----------------------------- Produit prix - produit prix ----------------------------- Produit prix - produit prix ----------------------------- le probleme c'est que je ne vois pas comment "répartir" les données que je récupère. J'avais pensé à mettre dans la colonne 1 les ID pairs et dans la colonne 2 les ID impairs. Mais d'abord je ne voyais pas comment faire, et en plus les produits que j'affiche ne se suivent pas forcément dans la base donc je ne peux pas être sûr d'avoir un ID impair et un ID pair à chaque fois. Je voulais donc savoir si vous aviez une idée. merci d'avance pierre
Noaric Posté 25 Août 2009 Posté 25 Août 2009 (modifié) Bonjour, je te propose une petite astuce toute simple qui résoudrait ton problème : (j'ai utilisé un array mais le principe est le même pour afficher les données de ta base, il faut juste utiliser un while au lieu du foreach) <?php $i=0;$tab=array('1','2','3','4','5','7','42','26','38');$count=count($tab);echo '<table border=1>';foreach($tab as $value){ if($i%2==0){echo'<tr><td>'.$value.'</td>';} else{echo'<td>'.$value.'</td></tr>';} $i++;}if($count%2!==0){echo'<td> </td></tr>';}echo '</table>'; Bon code. Modifié 25 Août 2009 par Noaric
captain_torche Posté 25 Août 2009 Posté 25 Août 2009 Ca n'est pas "si" compliqué que ça, ne t'inquiètes pas. Le principe est simple : - tu boucles sur tes résultats - pour chaque résultat, tu affiches les balises <td> correspondantes - à chaque boucle, tu incrémentes une variable "compteur" - si ta variable "compteur" est un multiple de 2 (dans ce cas), tu fermes la ligne et en ouvres une autre - à la fin de la boucle, tu rajoutes au besoin autant de cellules vides que nécessaire pour obtenir un code propre. Voici un petit exemple. Je t'invite à modifier la variable "$nb_par_ligne", pour tester. <?php $tab = array( 'article 1' => '15', 'article 2' => '18', 'article 3' => '22', 'article 4' => '30', 'article 5' => '35', 'article 6' => '50', 'article 7' => '78' ); $nb_par_ligne = 2; $compteur = 0; echo '<table>'; echo '<tr>'; foreach($tab as $article => $prix) { $modulo = $compteur % $nb_par_ligne; if($modulo == 0 && $compteur != 0) echo '</tr><tr>'; echo '<td>'.$modulo.' - '.$prix.'€</td>'; // L'affichage de tes cellules $compteur++; } $modulo = $compteur % $nb_par_ligne; if($modulo != 0) { // Si on ne finit pas la dernière ligne, on affiche suffisamment de cellules vides $colspan = $nb_par_ligne - $modulo; echo '<td colspan="'.$colspan.'"></td>'; } echo '</tr>'; echo '</table>';?> Edit : grillé par noaric
oxerrois Posté 25 Août 2009 Auteur Posté 25 Août 2009 (modifié) Ok merci de vos réponses. Si j'ai compris le truc c'est que si le compteur est à (2k+1) on ouvre le <tr> et si c'est à (2K) on le ferme. Je teste le code de suite. pierre Edit : J'ai testé le code tout marche bien, je vous remercie Modifié 25 Août 2009 par oxerrois
oxerrois Posté 25 Août 2009 Auteur Posté 25 Août 2009 Excusez-moi de vous déranger à nouveau. Je suis pas super à l'aise avec foreach je ne sais pas vraiment comment ça marche donc je me suis bidouillé un truc à partir de votre code mais avec while. J'aimerais vous soumettre mon code pour me dire si il a l'air correct. <?phpmysql_connect("localhost", "root", "");mysql_select_db("XXXXXXX");$tab = mysql_query("SELECT * FROM `table_boissons` WHERE `ID_bdn`=1");$nb_par_ligne = 2;$compteur = 0;echo '<table>';echo '<tr>';while ($donnees = mysql_fetch_array($tab) ){$modulo = $compteur % $nb_par_ligne;if($modulo == 0 && $compteur != 0)echo '</tr><tr>';echo '<td>'.$donnees['nom'].' </td> <td> '.$donnees['prix'].'</td>'; // L'affichage de tes cellules$compteur++;}$modulo = $compteur % $nb_par_ligne;if($modulo != 0) { // Si on ne finit pas la dernière ligne, on affiche suffisamment de cellules vides$colspan = $nb_par_ligne - $modulo;echo '<td colspan="'.$colspan.'"></td>';}echo '</tr>';echo '</table>';?> Merci d'avance Pierre
captain_torche Posté 25 Août 2009 Posté 25 Août 2009 Si ça t'affiche ce que tu veux, c'est tout bon Par contre, comme tu mets deux cellules à chaque fois, pense à doubler la valeur du colspan, en fin de code.
oxerrois Posté 25 Août 2009 Auteur Posté 25 Août 2009 Ok je changerai le colspan. Sinon merci beaucoup pour votre aide.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant