problème d'affichage

refka
Invité n'ayant pas de compte PHPfrance

25 nov. 2005, 11:00

Bonjour!
J'ai un probleme au niveau de l'affichage du resultat d'une requete,
je veux afficher le resultat d'une requete sur deux colonnes:
j'ai une table domaine et une table sous domaines, j'ai deux requete avec deux boucles while qui m'affiche les domaines avec leurs sous domaines correspondants(chaque enregistrment dans une ligne), mais je veux dans chaque ligne j'aurait deux domaines avec leurs sous domaines(sur deux colonnes); j'arrive pas à mettre ça en place.
voici les deux boucles:
$req=  mysql_query ("select * from domaines order by id ");
$num=mysql_num_rows($req);


while($res=mysql_fetch_array($req))
{ ?>
<table background="images/fonddebase.jpg"> <tr><td class="lien" colspan="2" ><img src="images/icone.gif"><b><a  class="lien" href="sousdomaines.php?id=<?php echo $res['id']; ?>"><? echo $res["nom"]; 

?> </a></b> </td></tr>
<tr>
<? $id=$res['id'];
 $sql=  mysql_query ("select * from sousdomaine  where idsect='$id' order by idsous ");
 $nomb=mysql_num_rows($sql);
 while($rs = mysql_fetch_array($sql))
{ $idsous = $rs[idsous]; ?><tr> <td class="lien"><a class="lien" href="entreprise.php?idsous=<?php echo $rs["idsous"] ; ?>"><? echo $rs["nomsous"]; 
?> </a> </td></tr> 


 <? }?> </tr> <? } ?></table>
Merci de m'aider

Mammouth du PHP | 768 Messages

25 nov. 2005, 15:16

2 requêtes sont superflus.
avec une jointure, il est possible d'afficher le résultat en une seule boucle.
Peux tu nous donner la structure de tes tables ?
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Eléphanteau du PHP | 11 Messages

26 nov. 2005, 10:41

Merci pour votre réponse,
Je suis arrivée à lettre en place mon code( pour afficher les domaines sur deux colonnes) voila le code:
$req=  mysql_query ("select * from secteur where id  order by id ");
$num=mysql_num_rows($req);

$i=-1;
while($res=mysql_fetch_array($req))
{

 $i=$i+1; ?>
<? 

$j = $i%2 ;
if($j==0){
?> 

<tr><td><b><a  class="lien" href="soussecteur.php?id=<?php echo $res['id']; ?>"><? echo $res["nomsec"]; ?> </a></b> </td> <? } ?>

<?  if($j!=0){ ?><td  background="images/fonddebase.jpg" class="lien"> <a href="soussecteur.php?id=<?php echo $res['id']; ?> "> <? echo $res["nomsec"]; ?> 

</a></td></tr> <? }} ?>
</table>
mais maintenant j'ai un autre soucis!
sous chaque domaine je dois afficher les sous domaines de la façon suivante:

Code : Tout sélectionner

domaine1 domaine2 sousdom1,sousdom2, sousdom1,sousdom2, soudom3,.... soudom3,....

j'essaie de le faire mais ça m'affiche chaque sous domaine dans une ligne et en plus pour certains domaine il ne m'affiche pas tous les sous domaines.

Merci de m'aider. et si ce n'est pas encore claire je rééxplique
la structure de ma base:
table domaine(id, nom)
table sousdom(id, iddom, nom)

ça me prend la tete depuis quelques jours et je suis débutante

Mammouth du PHP | 19672 Messages

26 nov. 2005, 11:16

Le problème se situe à la base au niveau de ta requête SQL : tu nous parles de tables domaine et sous-domaine maistu récupères les infomrmations de la table secteur...

Ensuite, je comprends mal ta présentation de sortie : Tu veux une colonne par domaine ou une ligne par domaine ? Dans ce dernier cas, ce serait moins compliqué parce que si tu veux une colonne par domaine, le nombre de domaine pouvant varier, ça va finir par poser un problème de place horizontale à l'affichage.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 11 Messages

26 nov. 2005, 14:53

je suis désolée pour cette faute(base de données et code), mais c'est juste au niveau de mon code.
J'ai pas compris ta question pour l'affichage ligne par domaine ou colonne par domaine.
Mais je te réexplique ce que je veux.
en fait , j'ai plusieurs domaines et dans chaque domaines j'ai aussi plusieurs sous domaines.
j'affiche les domaines sur deux colonnes
domaine1 domaine2
domaine 3 domaine 4
.......
et ainsi de suite, j'ai pu mettre ça en place en agissant par le %2 (les paires dans une colonne et les impaire dans une autre)
Maintenant, je trouve une difficulté d'affichage pour les sous domaines, en fait je veux afficher(dans la meme page) sous chaque domaine les sous domaines correspondants,en les séparant par des virgules, comme ça:
domaine1
sous domaine1, sousdomain2,
sousdomaines3,......


J'ai pensé à la concaténation des resultats des sous domaines ça m'affiche des sous domaines mais c'est pas juste, je ne trouve pas de solution!
Aidez moi!
Merci

ViPHP
pjl
ViPHP | 2119 Messages

27 nov. 2005, 12:51

Et si tu commencais par le commencement ainsi que l'a souligné Mario il y a deux jours : faire une requête correcte.
L'affichage viendra après.

Eléphanteau du PHP | 11 Messages

28 nov. 2005, 10:05

Bonjour,
Mais oui, je fais une requete juste par rapport à ma table(sinon j'aurai des messages d'erreur, au moins je n'aurais pas des enregistrements qui s'affichent), j'ai dis dans mon dernier message que c'est une faute que je fais ici seulement et c'est juste au niveau de mon code.
strucrure des tables
table: secteur(id,nomsec)
table soussecteur(idsous, idsect, nomsous).
Et vous avez bien mes requetes.
J'espère que c'est clair maintenant et que vous pouvez m'aider.

ViPHP
pjl
ViPHP | 2119 Messages

28 nov. 2005, 14:38

Donne nous donc ta requête complète alors.

Eléphanteau du PHP | 11 Messages

28 nov. 2005, 15:42

voila ma requete:
$req=  mysql_query ("select * from secteur order by id ");
$num=mysql_num_rows($req);

$i= -1;
while($res=mysql_fetch_array($req))
{

 $i=$i+1; ?>
<? 

$j = $i%2 ;
if($j==0){
?> 

<tr><td><b><a  class="lien" href="soussecteur.php?id=<?php echo $res['id']; ?>"><? echo $res["nomsec"]; ?> </a></b> </td> <? } ?>

<?  if($j!=0){ ?><td  background="images/fonddebase.jpg" class="lien"><b><a href="soussecteur.php?id=<?php echo $res['id']; ?> "> <? echo $res["nomsec"]; ?> 

</a></b></td></tr> <?
$idp=$i;
$idimp=$i+1;
$id=$res['id'];
 $sql=  mysql_query ("select * from soussecteur  where idsect='$idp' order by idsous ");
 $nbp=mysql_num_rows($sql);
 
 $sqlimp=  mysql_query ("select * from soussecteur  where idsect='$idimp' order by idsous ");
 $nbimp=mysql_num_rows($sqlimp);
 
 $nomb=mysql_num_rows($sql);
$resutimp= mysql_fetch_array($sqlimp);

 while(($rs = mysql_fetch_array($sql)) &&($resutimp = mysql_fetch_array($sqlimp)))
{ 


 $idsous = $rs[idsous]; 
 
 for($cptp=0; $cptp<=$nbp; $cptp++){
 $sousecteur="";
 $sousecteur.=$rs['nomsous'] ;
$sousecteur.="," ;
 
 ?><tr>
 
 

  <td class="lien" ><a class="lien" href="entreprise.php?idsous=<?php echo $rs["idsous"] ; ?>"><? echo $sousecteur ; 
?> </a> </td> <? }  

for($cptimp=0; $cptimp<$nbp; $cptimp++){ 
$sousecteurimp="";

$sousecteurimp.=$resutimp['nomsous'] ;
$sousecteurimp.="," ;
 ?>
<td class="lien" ><a class="lien" href="entreprise.php?idsous=<?php echo $resutimp["idsous"] ; ?>"><? echo $sousecteurimp; 
?> </a></td> </tr> 

<?  }}}} ?>
mais ça ne m'affiche pas correctement les sous secteurs.
SVP aidez moi!

Modération (Zeus) : merci d'utiliser les balises
 pour poster du code[/color]

ViPHP
pjl
ViPHP | 2119 Messages

28 nov. 2005, 18:04

Je demandais à voir une requête, pas tout le code. :roll:
2 requêtes sont superflus.
avec une jointure, il est possible d'afficher le résultat en une seule boucle.
Alors, pourquoi persistes-tu à faire plusieurs requêtes ?

Eléphanteau du PHP | 11 Messages

28 nov. 2005, 19:38

merci d'abord pour ta réponse,
je suis débutant en programmation et en php, et j'ai pas compris la solution de mario.
Vous pouver me proposer une solution claire?
Merci

ViPHP
ViPHP | 2144 Messages

28 nov. 2005, 19:49

Vous pouver me proposer une solution claire?
La solution que Mario t'a proposé est celle que tu dois utiliser. l'usage d'une seule requête avec une jointure entre les deux tables, est la solution (en tout cas la seule qui soit propre)

Je ne saurais trop te conseiller de lire la doc sur les jointure.

Commence par nous donner la structure exactes des deux tables, qu'on puisse t'expliquer comment marche une jointure dans ton cas précis.

Eléphanteau du PHP | 11 Messages

29 nov. 2005, 11:07

bonjour,
merci por votre réponse et voila les structures de mes tables:
# Structure de la table `secteur`
#

CREATE TABLE secteur (
id int(10) NOT NULL auto_increment,
nomsec varchar(255) NOT NULL default '',
PRIMARY KEY (id),
KEY id (id)
) TYPE=MyISAM;



# Structure de la table `soussecteur`
#

CREATE TABLE soussecteur (
idsect varchar(10) NOT NULL default '0',
idsous int(10) NOT NULL auto_increment,
nomsous varchar(255) NOT NULL default '',
PRIMARY KEY (idsous)
) TYPE=MyISAM;

j'espère que vous m'aider à mettre en place ma requete.
Merci

ViPHP
ViPHP | 2144 Messages

29 nov. 2005, 15:17

select s.nomsec, ss.nomsous from secteur s, soussecteur ss where s.id = ss.idsect

Et ensuite une seule répetiive avec une rupture de séquence pour n'afficher le secteur, que lors qu'il est différents de celui précédement affiché.

Eléphanteau du PHP | 11 Messages

29 nov. 2005, 16:25

Merci pour cette réponse.
Mais justement je suis bloquée à ce point;
Voila ce que je fais comme boucle:
$i= -1;
while($res=mysql_fetch_array($req))
{

$i=$i+1;
$j = $i%2 ;
if($j==0){
?>

<tr><td><b><a class="lien" href="soussecteur.php?id=<?php echo $res['id']; ?>"><? echo $res["nomsec"]; ?> </a></b>

</td>
<table><tr><td><? echo $res["nonsous"]; ?></td></tr></table>

<? } ?>

<? if($j==1){ ?><td background="images/fonddebase.jpg" class="lien"> <a href="soussecteur.php?id=<?php echo $res['id']; ?> "> <? echo $res["nomsec"]; ?>

</a></td>
<table><tr><td><? echo $res["nonsous"]; ?></td></tr></table>
</tr>


mais ça me répete les secteurs, et sous chaque secteur il m'affiche un seul soussecteur.
je ne sais pas comment faire la repture et comment avoir toutes les sous secteurs.
Aidez moi SVP!
Merci