Problème de recuperation de données en dans un tableau [Résolu]

msi79 388 Messages postés lundi 24 août 2009Date d'inscription 11 novembre 2017 Dernière intervention - 9 août 2017 à 22:38 - Dernière réponse : msi79 388 Messages postés lundi 24 août 2009Date d'inscription 11 novembre 2017 Dernière intervention
- 10 août 2017 à 23:08
Bonjour,
je voudrais afficher les dépenses faites par une entreprise. EXemple facture CIE, SALAIRE, FACTURE INTERNET etc.

les dépenses sont enregistrées chaque mois dans la base de données.
j'arrive a afficher mas pas comme je voudrais.

voici comment je voudrais que mon tableau soit :



voici mon tableau que j'ai obtenu qui loin de mes attentes.
Comment faire pour faire apparaitre les mois ?
Commet afficher les totaux??
Les mois doivent entre dans l'ordre . Janvier , février , mars ect


voici mon code pour récupérer les données dans un tableau.

  <?php if(isset($_GET['promo'])) $promo = urldecode($_GET['promo']); ?>
<?php 
// on crée la requête SQL
 $sql = "SELECT D.*
                ,TD.*
				,IFNULL(TD.montant,0)
             FROM depenses D
			      ,tbdepenses TD
			 WHERE D.id = TD.idDp
			 AND TD.promo = '".$promo."'
	       ";
//$sql = "SELECT * FROM inscription WHERE niv_act = '".$desgn."'  ORDER BY nom";
// on envoie la requête
$req = $pdo->query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
//echo $sql;
//$res2 = mysql_num_rows($req2);
$n_nbre = $req->rowCount();	

                             // 4 
?> 
<table id="datatable-buttons" width="100%" class="table table-striped table-bordered">
  <thead>
   <tr style="background-color:#FFD8D8">
   <th width="30%" >LIBELLE</th>
    <th width="10%" align="center"></td>
     <th width="10%" align="center"></td>
<?php
$elevPrec = "";
  $rang = 0;
  while($r_note = $req->fetch(PDO::FETCH_ASSOC)){
  $rang++;
?>

<?php
$matelev = $r_note["idDp"];
if ($matelev != $elevPrec){
  if($elevPrec !=""){
?>
  </tr></thead>
<?php
  }
?>
 <tr >
    <td><?= $r_note["depense"];?></td>
    <td align='center' style='color:red; font-weight:bold'><?= $r_note["montant"];?></td>


<?php
  }else{
?>
<td align='center' style='color:red; font-weight:bold'><?= $r_note["montant"];?></td>
<?php
}
$elevPrec = $matelev ;
}
 ?>
 </tr>

</table>



voici la structure de mes tables

Afficher la suite 

6 réponses

Répondre au sujet
jordane45 19246 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 14 décembre 2017 Dernière intervention - 9 août 2017 à 23:56
0
Utile
Msi....
Une bonne foie pour toutes.....

Si ta question concerne un souci de requête... tu postes dans le forum SQL ....
Mais si ta question concerne le PHP à proprement parlé (ce qui semble être le cas ici....) tu postes dans le forum PHP !
Vas tu enfin comprendre ???!!!!

Ensuite... qu'utilises tu pour te connecter à ta bdd ? PDO ou MYSQLI ?
Car ton code n'est vraiment pas bon....
En PDO on utilise des blocs TRY/CATCH pour trapper les erreurs... et en MYSQLI on utilise un IF
Dans les deux cas... l'instruction
mysql_error()
n'a rien à faire ici !

Si tu es en PDO ... on n'utilise par le rowCount() pour connaitre le nombre de lignes retournées par une requête... regarde la doc !

Bref...
Avant d'essayer de comprendre ton souci.. je te demanderai de remettre au propre ton code....



Commenter la réponse de jordane45
msi79 388 Messages postés lundi 24 août 2009Date d'inscription 11 novembre 2017 Dernière intervention - 10 août 2017 à 00:36
0
Utile
2
je me dis que c'est avec PHP que je dois construire mon tableau comme je le souhaite.

$n_nbre = $req->rowCount();
en PDO je sais pas trop. Au fait j’essaie de passer en PDO . Donc j'y vais en douce.

voici le code réécrit.
<?php 
  if(isset($_GET['promo'])) $promo = urldecode($_GET['promo']);
 // on crée la requête SQL
 $sql = "SELECT D.*
                ,TD.*
				,IFNULL(TD.montant,0)
             FROM depenses D
			      ,tbdepenses TD
			 WHERE D.id = TD.idDp
			 AND TD.promo = '".$promo."'
	       ";
//$sql = "SELECT * FROM inscription WHERE niv_act = '".$desgn."'  ORDER BY nom";
// on envoie la requête
try{
$req = $pdo->query($sql);
}catch(PDOException  $e){echo "ERREUR DE REQUETE";}
//echo $sql;
//$res2 = mysql_num_rows($req2);
$n_nbre = $req->rowCount();	

                             // 4 
?> 
<table id="datatable-buttons" width="100%" class="table table-striped table-bordered">
  <thead>
   <tr style="background-color:#FFD8D8">
   <th width="30%" >LIBELLE</th>
    <th width="10%" align="center"></td>
     <th width="10%" align="center"></td>
<?php
$elevPrec = "";
  $rang = 0;
  while($r_note = $req->fetch(PDO::FETCH_ASSOC)){
  $rang++;
?>

<?php
$matelev = $r_note["idDp"];
if ($matelev != $elevPrec){
  if($elevPrec !=""){
?>
  </tr></thead>
<?php
  }
?>
 <tr >
    <td><?= $r_note["depense"];?></td>
    <td align='center' style='color:red; font-weight:bold'><?= $r_note["montant"];?></td>


<?php
  }else{
?>
<td align='center' style='color:red; font-weight:bold'><?= $r_note["montant"];?></td>
<?php
}
$elevPrec = $matelev ;
}
 ?>
 </tr>

</table>


NB: je me suis inspiré d'une code que u m'avais donné pour afficher les notes pour essayer de realiser ce tableau mais j'arrive pas
jordane45 19246 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 14 décembre 2017 Dernière intervention - 10 août 2017 à 10:25

je me dis que c'est avec PHP que je dois construire mon tableau comme je le souhaite.

Oui nous sommes d'accord ... alors... pourquoi avoir posté ta question dans le forum SQL ??????

$n_nbre = $req->rowCount();

en PDO je sais pas trop. Au fait j’essaie de passer en PDO . Donc j'y vais en douce.

Donc.. comme indiqué dans mon message précédent... regarde... la DOCUMENTATION.
Ici : http://php.net/manual/fr/pdostatement.rowcount.php
Si la dernière requête SQL exécutée par l'objet PDOStatement associé est une requête de type SELECT, quelques bases de données retourneront le nombre de lignes retournées par cette requête. Néanmoins, ce comportement n'est pas garanti pour toutes les bases de données

A la place...
Tu peux faire un FETCHALL sur le résultat de ta requête pour tout mettre dans un array directement ... puis remplacer le rowcount par un COUNT de cette variable

Il est également conseillé d'utiliser les requêtes préparées au lieu de ->query
Comme ceci :
// on crée la requête SQL
 $sql = "SELECT D.* 
                ,TD.*
		,IFNULL(TD.montant,0)
             FROM depenses D
		      ,tbdepenses TD
	    WHERE D.id = TD.idDp
	    AND TD.promo = :promo  ";
$a_datas = array(':promo'=>$promo);

// on envoie la requête
try{
     $req = $pdo->prepare($sql);
     $req->execute($a_datas);
     $resultat = $req->fetchAll();
}catch(PDOException  $e){
     echo "ERREUR DE REQUETE : " . $sql . '  error : '.$e->getMessage();
}

//echo $sql;
$n_nbre = !empty($resultat) ? count($resultat) : 0;



Ensuite... pour ce qui est de ta question initiale .. à quelle endroit initialises tu les en-têtes de colonnes ?? (les mois )
Le plus simple serait de les mettre dans un Array.. puis de boucler dessus pour générer ton header.
Cet Array servira également pour savoir à quel endroit tu dois écrire les données de ta requête.
jordane45 19246 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 14 décembre 2017 Dernière intervention > jordane45 19246 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 14 décembre 2017 Dernière intervention - 10 août 2017 à 10:41
Encore une chose
Regarde tes lignes de code
<th width="10%" align="center"></td>

ne vois tu pas une erreur ?? TH -> /TD ??
Commenter la réponse de msi79
msi79 388 Messages postés lundi 24 août 2009Date d'inscription 11 novembre 2017 Dernière intervention - 10 août 2017 à 12:00
0
Utile
1
Bonjour jordane45 , merci pour ton aide.
Effectivement j'ai du me tromper en mettant le sujet des SQL. je m'en excuse.

Avec toi j'apprends beaucoup.

En ce que est de :

Ensuite... pour ce qui est de ta question initiale .. à quelle endroit initialises tu les en-têtes de colonnes ?? (les mois )
Le plus simple serait de les mettre dans un Array.. puis de boucler dessus pour générer ton header.
Cet Array servira également pour savoir à quel endroit tu dois écrire les données de ta requête.


vraiment je sais même pas par ou commencer c'est un de tes codes j'ai essayé d'adapter et je m'en sort pas . donc s'il te plait aide moi.

voici le code rectifié:

<?php 
  if(isset($_GET['promo'])) $promo = urldecode($_GET['promo']);
// on crée la requête SQL
 $sql = "SELECT D.* 
                ,TD.*
		,IFNULL(TD.montant,0)
             FROM depenses D
		      ,tbdepenses TD
	    WHERE D.id = TD.idDp
	    AND TD.promo = :promo  ";
$a_datas = array(':promo'=>$promo);

// on envoie la requête
try{
     $req = $pdo->prepare($sql);
     $req->execute($a_datas);
     $resultats = $req->fetchAll();
}catch(PDOException  $e){
     echo "ERREUR DE REQUETE : " . $sql . '  error : '.$e->getMessage();
}

//echo $sql;
$n_nbre = !empty($resultat) ? count($resultat) : 0;                             // 4 
?> 
<table id="datatable-buttons" width="100%" class="table table-striped table-bordered">
  <thead>
   <tr style="background-color:#FFD8D8">
   <th width="30%" >LIBELLE</th>
    <th width="10%" align="center"></th>
     <th width="10%" align="center"></th>
<?php
$elevPrec = "";
 foreach($resultats AS $resultat){
?>

<?php
$matelev = $resultat["idDp"];
if ($matelev != $elevPrec){
  if($elevPrec !=""){
?>
  </tr></thead>
<?php
  }
?>
 <tr >
    <td><?= $resultat["depense"];?></td>
    <td align='center' style='color:red; font-weight:bold'><?= $resultat["montant"];?></td>


<?php
  }else{
?>
<td align='center' style='color:red; font-weight:bold'><?= $resultat["montant"];?></td>
<?php
}
$elevPrec = $matelev ;
}
 ?>
 </tr>

</table>
msi79 388 Messages postés lundi 24 août 2009Date d'inscription 11 novembre 2017 Dernière intervention - 10 août 2017 à 23:08
bonsoir, s'il vous plait je veux de l'aide
Commenter la réponse de msi79

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.