Aller au contenu

répartir une requete en deux colonnes


Sujets conseillés

Posté

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

Posté (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é par Noaric
Posté

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 ;)

Posté (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é par oxerrois
Posté

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.

<?php
mysql_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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...