problème d'affichage

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 : problème d'affichage

probleme d'affichage

par refkaben » 30 nov. 2005, 11:32

Bonjour,
Merci beaucoup sadeq, c'est génial ce vous m'avez donné comme solution, c'est exactement ce que je veux!
maintenant je constate que c'est simple, mais bon je débute, et j'apprends.
Merci encore une fois. :love1:

par sadeq » 29 nov. 2005, 17:52

Quelque soit la position d'un secteur il est dans une céllule et au moment où ton code place le secteur dans cette céllule il faut en profiter pour imprimer tous les sous-secteurs lui fesant référence (sous-forme de liste).
Mais tu ne dois imprimer le secteur qu'une fois.

Voilà les contraintes, maintenant passons à l'action:
1. $i : un compteur de secteurs, il servira à réguler le saut de ligne (raison=2 colonnes par ligne)

2. $nomsec_actuel : une mémoire pour concerver le secteur en cours de traitement pour éviter de l'imprimer plusieurs fois
L'idée est de ne changer de céllule que si le nomsec change.

Voici donc le code :
<table border>
<?php
//Requête de base : tous les sous-secteurs par secteur
$req = mysql_db_query(
"test", 
"SELECT idsect, nomsec, idsous, nomsous FROM secteur s, soussecteur ss WHERE s.id = ss.idsect ORDER BY idsect",
mysql_connect("localhost","root","root")
);

$nomsec_actuel = null; //Mémoire du secteur en cours
$i=0; //Compteur des secteurs imprimés

//Lecture du résultat
while($res = mysql_fetch_array($req)) 
{
	//Eviter d'imprimer le nom du secteur plusieurs fois
	if($res["nomsec"] != $nomsec_actuel) { 
		//Nouvelle ligne après 2 colonnes ou si première fois
		if ($i % 2 == 0) echo "<tr>";
		//Afficher le nom du secteur dans une céllule
?>
		<td><b><a class="lien" href="soussecteur.php?id=<?php echo $res['idsect']; ?>"><? echo $res["nomsec"]; ?> </a></b><br>
<? 
	//Mémoriser le secteur en cours
	$nomsec_actuel = $res["nomsec"];
	//Incrémenter le compteur des secteurs
	$i++;
} 
//Afficher les sous-secteur sous forme de liste dans la même céllule que le secteur
echo $res["nomsous"].",";

//Au suivant
}
?>
</table> 

probleme d'affichage

par refkaben » 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

par iclo » 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é.

probleme d'affichage

par refkaben » 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

Re: problème d'affichage

par iclo » 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.

problème d'affichage

par refkaben » 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

par pjl » 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 ?

probleme d'affichage

par refkaben » 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]

par pjl » 28 nov. 2005, 14:38

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

problème d'affichage

par refkaben » 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.

par pjl » 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.

probleme d'affichage

par refkaben » 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

par Cyrano » 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.

probleme d'affichage

par refkaben » 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