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

Messages postés
458
Date d'inscription
lundi 24 août 2009
Dernière intervention
8 décembre 2018
- - Dernière réponse : msi79
Messages postés
458
Date d'inscription
lundi 24 août 2009
Dernière intervention
8 décembre 2018
- 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 

Votre réponse

3 réponses

Messages postés
23619
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2018
0
Merci
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
Messages postés
458
Date d'inscription
lundi 24 août 2009
Dernière intervention
8 décembre 2018
0
Merci
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
Messages postés
23619
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2018
-

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
Messages postés
23619
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2018
> jordane45
Messages postés
23619
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2018
-
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
Messages postés
458
Date d'inscription
lundi 24 août 2009
Dernière intervention
8 décembre 2018
0
Merci
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
Messages postés
458
Date d'inscription
lundi 24 août 2009
Dernière intervention
8 décembre 2018
-
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.