Problème de recuperation de données en dans un tableau

Résolu
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 - 9 août 2017 à 22:38
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 - 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

3 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
9 août 2017 à 23:56
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....



0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
10 août 2017 à 00:36
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
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
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.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
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 ??
0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
10 août 2017 à 12:00
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>
0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
10 août 2017 à 23:08
bonsoir, s'il vous plait je veux de l'aide
0
Rejoignez-nous