Afficher requête sql sur 2 colonnes

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Afficher requête sql sur 2 colonnes

Re: Afficher requête sql sur 2 colonnes

par hafsa_rani » 05 août 2011, 13:33

Géniale ça fonctionne bien;
Merci infiniment. =D> :lol: :P :D

Re: Afficher requête sql sur 2 colonnes

par moogli » 29 déc. 2010, 17:37

peut tu cliquer sur le bouton résolu sur ton 1er message ?

@+

Re: Afficher requête sql sur 2 colonnes

par orell1 » 29 déc. 2010, 12:26

Je voulais tous vous remercier pour votre patience et votre aide car sans vous je ne sais pas si j'aurai réussi à faire ce que je voulais faire...
Tout est fonctionnel et comme je le souhaite!
voici donc le code final (peut-être que ça pourra aider quelqu'un) :
<table style="margin-top: -20px; margin-left:15px;"><tr>
<th width="50%">&nbsp;</th>
<th width="50%">&nbsp;</th>
</tr>
<?php
$cpt=0;
$nbCols=2;
$rs = mysql_query("SELECT * FROM coordonnees WHERE num_ad = '$num_ad'"); // exécution de la requête
// Nota : on pourrait tout aussi bien parcourir les éléments d'un tableau ou les fichiers d'un dossier

while ($row=mysql_fetch_assoc($rs)) { // parcours des résultats

  $tabActivite = explode(',',  $row['activite']); // construit le tableau d'activités

  foreach($tabActivite as $activite) { // on parcours le tableau

    // début d'une ligne
    if ($cpt%$nbCols==0) // on divise le nb d'élément par le nb de colonnes. Si le reste est de 0 ...
        echo '<tr>'; // ..., alors on est sur le premier élément d'une ligne

    // On place chaque élément dans une cellule du tableau
    echo '<td>';
    echo '<li>'.$activite .'</li>'; // affichage de tout ce qu'on veut dans la cellule
    echo '</td>';

    // fin d'une ligne
    if ($cpt%$nbCols==($nbCols-1)) // on divise le nb d'élément par le nb de colonnes. Si le reste est de ($nbCols-1) ...
        echo '</tr>'; // ..., on est sur le dernier élément d'une ligne

    $cpt++; // on incrémente le compteur pour savoir où on en est
  }
}
 ?>
</tr>
</table>
Merci encore!

STATUT : RESOLU

Re: Afficher requête sql sur 2 colonnes

par orell1 » 29 déc. 2010, 10:46

Oui je pense...
$cpt=0;
$nbCols=2;
pour le cpt je ne suis pas bien sur de la valeur par contre...

Re: Afficher requête sql sur 2 colonnes

par moogli » 29 déc. 2010, 04:28

hum comprend tu le terme "déclaration de variable" ?

au vue de ton code celle que j'ai indiqué ci dessus ne le sont pas ou mal ce qui provoque l'erreur

@+

Re: Afficher requête sql sur 2 colonnes

par orell1 » 29 déc. 2010, 02:32

$cpt50%$nbCols==2
Dois je le rédiger comme ceci?

Re: Afficher requête sql sur 2 colonnes

par moogli » 29 déc. 2010, 02:18

ou sont déclarée$cpt et $nbCols ? la division par zéro me fait dire que ce n'est pas le cas de $nbCols ou que celle ci vaut 0 !


@+

Re: Afficher requête sql sur 2 colonnes

par orell1 » 28 déc. 2010, 23:15

Effectivement les résultats affichés sont extraits d'une seule colonne d'une base.
je viens d'essayer ce code :
$rs = mysql_query("SELECT * FROM coordonnees WHERE num_ad = '$num_ad'"); // exécution de la requête
// Nota : on pourrait tout aussi bien parcourir les éléments d'un tableau ou les fichiers d'un dossier

while ($row=mysql_fetch_assoc($rs)) { // parcours des résultats

  $tabActivite = explode(',',  $row['activite']); // construit le tableau d'activités

  foreach($tabActivite as $activite) { // on parcours le tableau

    // début d'une ligne
    if ($cpt%$nbCols==0) // on divise le nb d'élément par le nb de colonnes. Si le reste est de 0 ...
        echo '<tr>'; // ..., alors on est sur le premier élément d'une ligne

    // On place chaque élément dans une cellule du tableau
    echo '<td>';
    echo $activite; // affichage de tout ce qu'on veut dans la cellule
    echo '</td>';

    // fin d'une ligne
    if ($cpt%$nbCols==($nbCols-1)) // on divise le nb d'élément par le nb de colonnes. Si le reste est de ($nbCols-1) ...
        echo '</tr>'; // ..., on est sur le dernier élément d'une ligne

    $cpt++; // on incrémente le compteur pour savoir où on en est
  }
}
 

mais il y a deux erreurs qui correspondent aux lignes ci dessous (ERREUR = Warning: Division by zero in..........)
1) if ($cpt%$nbCols==0) // on divise le nb d'élément par le nb de colonnes. Si le reste est de 0 ...
2) if ($cpt%$nbCols==($nbCols-1)) // on divise le nb d'élément par le nb de colonnes. Si le reste est de ($nbCols-1) ...
En revanche mes résultats s'affichent correctement MAIS dans la première colonne uniquement... :cry:

Re: Afficher requête sql sur 2 colonnes

par moogli » 28 déc. 2010, 21:50

hum j'ai oublié une partie de la fermeture de la balise td

ce qui donne
<table><tr>
<th>Colonne 1</th>
<th>Colonne 2</th>
</tr>
<?php
$retour = mysql_query("SELECT * FROM coordonnees WHERE num_ad = '$num_ad' ORDER BY ID DESC ");
$i = 0; initialisation du compteurs
$nbparligne = 2; // ici on indique le nombre d'élément que l'on veut sur chaque ligne
echo '<tr>';
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les résultats
{
if ( $i !=0 && ($i % $nbparligne)==0) {
echo '</tr><tr>';
}
echo '<td>',$donnees['activite'].'</td>';
$i++;
} // Fin de la boucle
//on ferme le tableau proprement
while ( ($i%$nbparligne)!=0) {
echo '<td>&nbsp;</td>';
$i++;
}
}
?>
</tr>
</table>
faudrait que tu vérifie ce que l'on te donne ;)

oublie le code de Simbert si tu ne connait pas PDO.

Pour ce qui est de ton code il est fonctionnel (je viens de le tester avec les données fournies) il faut utiliser correctement la taille car la tu obtient une colonne de 5050% ...

l'avis de Ryle est une bonne piste !

@+

Re: Afficher requête sql sur 2 colonnes

par Ryle » 28 déc. 2010, 21:41

En fait j'ai l'impression que toutes tes valeurs sont stockées dans un seul champ d'un même enregistrement... du coup puisque tu n'as qu'une seule "valeur", il est normale que celle-ci soit affichée dans la première colonne.

D'après ton code, il faudrait en fait que tu récupères la valeur que tu as en base, puis que tu construises un tableau à partir de chaque activité contenue dans cette valeur (vu qu'elles ont l'air d'être séparées par des virgules).

En gros, tu aurais deux boucles : un pour parcourir les enregistrements, l'autre pour parcourir les activités d'un enregistrement :
$rs = mysql_query("SELECT * FROM coordonnees WHERE num_ad = '$num_ad'"); // exécution de la requête
// Nota : on pourrait tout aussi bien parcourir les éléments d'un tableau ou les fichiers d'un dossier

while ($row=mysql_fetch_assoc($rs)) { // parcours des résultats

  $tabActivite = explode(',',  $row['activite']); // construit le tableau d'activités

  foreach($tabActivite as $activite) { // on parcours le tableau

    // début d'une ligne
    if ($cpt%$nbCols==0) // on divise le nb d'élément par le nb de colonnes. Si le reste est de 0 ...
        echo '<tr>'; // ..., alors on est sur le premier élément d'une ligne

    // On place chaque élément dans une cellule du tableau
    echo '<td>';
    echo $activite; // affichage de tout ce qu'on veut dans la cellule
    echo '</td>';

    // fin d'une ligne
    if ($cpt%$nbCols==($nbCols-1)) // on divise le nb d'élément par le nb de colonnes. Si le reste est de ($nbCols-1) ...
        echo '</tr>'; // ..., on est sur le dernier élément d'une ligne

    $cpt++; // on incrémente le compteur pour savoir où on en est
  }
}
Maintenant, le problème semble plus être un problème de conception, car tes activités stockées en base semblent difficilement exploitables... mais bon, au moins comme ça tu peux gérer l'affichage :)

Re: Afficher requête sql sur 2 colonnes

par SinBert » 28 déc. 2010, 21:30

Désolé, j'avais mis directement mon code mais ce dernier est à adapter.
J'ai considéré que la connection à la base était déjà établie.
Ceci devrait être plus clair :
<table>

<?php
          //Connection à ta base de donnée déjà établie

          $retour = mysql_query("SELECT * FROM coordonnees WHERE num_ad = '$num_ad'"); // Requête
  
          $i = 0; // Initialisation du compteur
          while($donnees = mysql_fetch_array($retour))
          {
                    if(($i % 2) == 0) // Si on est à la première case
                    {
                              echo '<tr> <td> ' . $donnees['activite'] ' . </td>';
                              $i++; // On incrémente le compteur
                    }
                    else //Si on est dans la deuxième
                    {
                              echo '<td> ' . $donnees['activite'] ' . </td> </tr>';
                              $i++; //Idem
                    }
         }
?>                            
</table>
Ainsi, lors de son premier passage dans la boucle, le compteur vaut 0. Donc 0 % 2 aussi. On peut donc créer la ligne du tableau et insérer la première cellule.
Lors de son deuxième passage dans la boucle, $i vaut 1. Donc 1 % 2 != 0. On rentre donc dans le else afin de créer la deuxième cellule et fermer la ligne.
Et ainsi de suite...
Tu peux paramétrer tes colones entre <table> et <?php (ligne 2).

Ainsi, le résultat de ta requête est afficher dans un tableau sur deux colones. C'est bien se que tu voulais? :?:

Re: Afficher requête sql sur 2 colonnes

par orell1 » 28 déc. 2010, 21:09

Merci beaucoup!
Je suis désolé mais je ne comprends pas ton code, pourtant il est bien expliqué !
En fait je ne sais pas ou je place ma connexion à la base, et ou dois-je paramétrer mes colonnes (par exemple mes résultats sont divisés par deux colonnes (le résultat est le fruit d'une seule requête))...
:cry: :cry: :cry:
que dois-je mettre à la place de $maRequete et $mesariables ???

Merci

Re: Afficher requête sql sur 2 colonnes

par SinBert » 28 déc. 2010, 20:53

J'étais dans le même cas que toi il y a peu et voila comment j'avais fait :
<?php
          $reponse = $base->prepare($maRequete); //Requete
          $reponse->execute(array($mesVariables));
  
          $i = 0; // Initialisation du compteur
          while($donnees = $reponse->fetch())
          {
                    if(($i % 2) == 0) // Si on est à la première case
                    {
                              echo '<tr> <td> Contenu de la première case </td>';
                              $i++; // On incrémente le compteur
                    }
                    else //Si on est dans la deuxième
                    {
                              echo '<td> Contenu deuxième case </td> </tr>';
                              $i++; //Idem
                    }
         }
?>                            
Le tableau générer est donc le suivant :
 <table> 
 <tr>
      <td> Contenu de la première case </td>
      <td> Contenu deuxième case </td> 
</tr>
<tr> 
      <td> Contenu de la première case </td>
      <td> Contenu deuxième case </td> 
</tr>
<tr>
      <td> Contenu de la première case </td>
      <td> Contenu deuxième case </td>
</tr>
[...]
</table> 
J'espère t'avoir permis d'avancer.
Bonne soirée ;)

Re: Afficher requête sql sur 2 colonnes

par orell1 » 28 déc. 2010, 20:24

Voici l'affichage HTML... Merci
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans nom</title>
</head>

<body>

<page class="page"><legend class="legend">SITS FRANCE</legend>

<table>
  <tr>
    <th style="width:5050%;">Colonne 1</th>
    <th style="width:5050%;">Colonne 2</th>

  </tr>
<td>Pose automatisée de caniveaux
, Pose mécanisée de câbles au soc et par trancheuse
, Pose de câble, signalisation, énergie, télécoms
, Forage dirigé et forage horizontal
, Manutention, levage, matage
, Signalisation, câblage ferroviaire
, Métallerie - serrurerie
, Pose de câble à fibre optique par flottage et par portage
, Génie civil 
, Réseaux fibre optique mono-mode / multi-mode
, Vidéo surveillance
, Électricité MT / BT
, Réseaux informatiques catégorie 5 et 6
, Contrôle d'accès - Alarme - Incendie
, Éclairage</td><td colspan="1">&nbsp;</td></tr>
</table>
 
</page>

    </div>


 </body>
</html>

Re: Afficher requête sql sur 2 colonnes

par Ryle » 28 déc. 2010, 18:59

Montre nous le code source du tableau qui est généré... on verra rapidement dans le html ou se trouve le problème d'affichage :)