Soucis d'affichege de données

Résolu
noun3t Messages postés 5 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 2 décembre 2009 - 1 déc. 2009 à 16:38
noun3t Messages postés 5 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 2 décembre 2009 - 2 déc. 2009 à 09:48
Bonjour,

Merci a ceux qui vont me lire.
mon soucis est simplement du traitement d'affichage.

j'ai une requete sql qui me retourne 3 enregistrement que voici :
dvs_id   	  dvs_num   	  dvs_cli_id   	  cha_id   	  cha_titre   	     cha_addr   	                     tra_id   	  tra_cha_id   	  tra_tache   	        tra_date
8 	          DE09RC0001 	      71 	              1 	  test titre chantier  43 avenue gabriel perrie 	1 	                1 	          ceci est une tache 	        2009-12-01
9 	          DE09RC0002 	      71 	              1 	  test titre chantier  43 avenue gabriel perrie 	1 	                1  	          ceci est une tache 	        2009-12-01
10 	         DE09RC0003 	      71 	              2 	  ajout via form      158 rue de la foret 	      NULL 	             NULL 	          NULL 	                        NULL

Ce sont les bonnes informations que je veut afficher!
je voudrais afficher comme ceci

Le chantier au 43 avenue gabriel perrie
Liste des devis et facture lié à ce chantier
* Devis n° DE09RC0001 : consulter
* Devis n° DE09RC0002 : consulter

Le chantier au 158 rue de la foret
Liste des devis et facture lié à ce chantier
* Devis n° DE09RC0003 : consulter

je n'arrive pas a regrouper les informations par ordre hiérarchique...

Si cela peut aider voici ma requete ainsi que mon code deja fait pour commencer a afficher
	$sql_suivi_chantier = " SELECT a.dvs_id, a.dvs_num, a.dvs_cli_id,
  b.cha_id, b.cha_titre, b.cha_addr,
  c.tra_id, c.tra_cha_id, c.tra_tache, c.tra_date
   FROM pv_gen_devis as a
   LEFT JOIN pv_gen_devis_chantier as z ON a.dvs_id = z.dvs_id
   LEFT JOIN pv_gen_chantier as b on b.cha_id = z.cha_id
   LEFT JOIN pv_gen_travaux as c ON b.cha_id = c.tra_cha_id
   WHERE a.dvs_cli_id ".$_SESSION['cli_id']." and a.dvs_etat1
   ";
/*if($debug == 1)*/echo $sql_suivi_chantier;
$query_suivi_chantier = mysql_query($sql_suivi_chantier);

while(list($dvs_id_a, $dvs_num_a, $dvs_cli_id_a,
   $cha_id_b, $cha_titre_b, $cha_addr_b,
   $tra_id_c, $tra_cha_id_c, $tra_tache_c, $tra_date_c) = mysql_fetch_row($query_suivi_chantier)){
   

if($cha_addr_b_old != $cha_addr_b){
$adresse_devis .=" Le chantier au $cha_addr_b 

";
}
$liste_devis . = "<li>Devis n° $dvs_num_a : consulter</li>";
$cha_addr_b_old = $cha_addr_b;
}
 
 
 ?>


Suivi de vos chantiers




<?=$adresse_devis?>
<h5>Liste des devis et facture lié à ce chantier<h5>


<?=$liste_devis?>


7 réponses

noun3t Messages postés 5 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 2 décembre 2009
2 déc. 2009 à 09:47
j'ai trouvé la solution c'était smiple je sais pas comment j'ai pas pus trouver des le début!
voila le code :
$sql_suivi_chantier = " SELECT a.dvs_id, a.dvs_num, a.dvs_cli_id,
  b.cha_id, b.cha_titre, b.cha_addr,
  c.tra_id, c.tra_cha_id, c.tra_tache, c.tra_date
   FROM pv_gen_devis as a
   LEFT JOIN pv_gen_devis_chantier as z ON a.dvs_id = z.dvs_id
   LEFT JOIN pv_gen_chantier as b on b.cha_id = z.cha_id
   LEFT JOIN pv_gen_travaux as c ON b.cha_id = c.tra_cha_id
   WHERE a.dvs_cli_id ".$_SESSION['cli_id']." and a.dvs_etat1
   ";
/*if($debug == 1)*/echo $sql_suivi_chantier;
$query_suivi_chantier = mysql_query($sql_suivi_chantier);
$i=0;
while(list($dvs_id_a, $dvs_num_a, $dvs_cli_id_a,
   $cha_id_b, $cha_titre_b, $cha_addr_b,
   $tra_id_c, $tra_cha_id_c, $tra_tache_c, $tra_date_c) = mysql_fetch_row($query_suivi_chantier)){

if($cha_addr_b_old != $cha_addr_b){
$adresse_devis .=($i > 0 ? "":"")." Le chantier au $cha_addr_b 

Liste des devis et facture lié à ce chantier<h5>
";
}	
$adresse_devis . = "<li>Devis n° $dvs_num_a : consulter</li>";

$cha_addr_b_old = $cha_addr_b;
$i++;
}
$adresse_devis .= "";
 
 ?>


<h4>Suivi de vos chantiers



<?=$adresse_devis?>


3
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
1 déc. 2009 à 19:15
Salut,

Qu'appelles-tu "par ordre hiérarchique" ?

Sinon, juste comme ça :

list($dvs_id_a, $dvs_num_a, $dvs_cli_id_a,
   $cha_id_b, $cha_titre_b, $cha_addr_b,
   $tra_id_c, $tra_cha_id_c, $tra_tache_c, $tra_date_c) = mysql_fetch_row($query_suivi_chantier))

C'est pas franchement lisible... Si tu ne veux pas utiliser de tableau et préfères utiliser des variables portant le nom de chaque champ, alors je te propose une alternative :

while ($row = mysql_fetch_assoc($query_suivi_chantier)) {
extract($row);
// La suite...
}


Ca revient au même, à deux différences près :
- c'est plus lisible, donc plus facile de comprendre ce qui se passe
- si un jour tu décides de récupérer un champ supplémentaire dans la table, la boucle while n'a pas besoin d'être modifiée, uniquement la requête et l'affichage des données.

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
noun3t Messages postés 5 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 2 décembre 2009
1 déc. 2009 à 19:47
merci de ta reponse!
en fait quand je dit par ordre hierarchique cela veut dire :
a un chantier(cha_id,cha_titre,cha_addr) est associé plusieur devis(dvs_id,dvs_num etc..)

je voudrais afficher dans ma page

le chantier au $cha_addr
la liste des devis correspondant a ce chantier
devis 1
devis 2

le soucis est que je ne eput pas boucler comme tu veut que je fasse etant donne que j'ai un systeme de pseduo parent enfants....
donc un coup mon adresse puis un ul li

mon adresse un autre ul li et ce tant qu 'il y a des devis et des chantier...
je pensais tout regrouper en tableau et les parcourir avec foreach mais je n'y arrive pas non plus de cette maniere je le fait sans doute mal je maitrise pas vraiment foreach
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
1 déc. 2009 à 21:02
Ok, je comprends un peu mieux. Bon, j'ai du monde chez moi, je regarde ça un peu plus tard dans la soirée ;)

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
noun3t Messages postés 5 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 2 décembre 2009
1 déc. 2009 à 21:24
c'est cool moi je suis encore dessus rien de bien concret encore je tourne en rond avec mon foreach je sais meme pas si c'est la bonne méthode..

le retour de ma requete peut surement t'aider a y voir plus clair


et le resulat que moi j'ai et tu pourra mieux piger comment je veut organiser ca!(Des images c'est plus parlant)

sur cette image tout est placé mais sur la liste des trois devis il y en deux associé au premier chantier et le dernier au deuxieme chantier

en fait DE09RC0001 et DE09RC0002 appartienne au premier(43 avenue gabriel perrie) et DE09RC0003 a 158 rue de la foret

Ps: c'est bête d'arriver a faire ce que je sais faire et pas trouver comment faire ca....jhe retourne coder^^
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
1 déc. 2009 à 23:59
Re, désolé pour le délai.

Je récapitule ce que je pense avoir compris. Sur ta capture, tu présentes les différents chantiers du client (qui est connecté).
Pour chaque chantier, il y a plusieurs devis. Ton problème est que les deux premiers devis s'affichent comme étant liés au deuxième chantier, alors qu'ils devraient être liés au premier.

Bon. Ta requête SQL me paraît correcte. On pourrait toujours en exécuter une par chantier, mais ce n'est pas forcément justifié.

Tu ne t'y prends pas comme il faut. Ou plus exactement, tu t'y prends bien pour la séparation du traitement et de l'affichage, ça fait plaisir à voir.
Par contre, quand tu boucles, tu stockes d'un côté les adresses, d'un autre les devis. Donc obligatoirement, tu vas avoir les deux adresses (voire 3 s'il y avait 3 chantiers) en premier puis tous les devis.
Ce que tu ois faire, c'est construire le document au fur et à mesure de la boucle while.
Le principe est d'avoir dans une variable temporaire l'id du chantier courant (celui en cours dans la boucle). Mettons par exemple $id_courant. Tu l'initialises à 0 (zéro) avant de boucler.
Au début de chaque itération, tu compares $id_courant et $cha_id. Si les valeurs diffèrent, alors tu affiches l'adresse du chantier. Sinon, tu continues d'afficher les devis qui correspondent au chantier.

Voilà en gros pour le principe. D'après ce que je vois, tu devrais être capable de mettre ça en application (bon ok, c'est aussi parce que je suis claqué et que j'ai un peu la flemme d'écrire un exemple complet).

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
noun3t Messages postés 5 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 2 décembre 2009
2 déc. 2009 à 09:48
merci neige de ton aide :)
0
Rejoignez-nous