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

Signaler
Messages postés
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
-
Messages postés
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
-
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

Messages postés
32474
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2021
347
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....



Messages postés
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
1
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
Messages postés
32474
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2021
347

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.
Messages postés
32474
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2021
347 >
Messages postés
32474
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2021

Encore une chose
Regarde tes lignes de code
<th width="10%" align="center"></td>

ne vois tu pas une erreur ?? TH -> /TD ??
Messages postés
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
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>
Messages postés
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
1
bonsoir, s'il vous plait je veux de l'aide