Problème d'affichage de résultat dans un tableau php

Résolu/Fermé
Astolpho Messages postés 72 Date d'inscription vendredi 8 avril 2022 Statut Membre Dernière intervention 5 mars 2024 - 16 déc. 2022 à 17:55
Astolpho Messages postés 72 Date d'inscription vendredi 8 avril 2022 Statut Membre Dernière intervention 5 mars 2024 - 17 déc. 2022 à 19:15

Bonjour,

Je n'arrive pas à afficher le résultat d'un calcul dans un tableau. J'ai le bon résultat dans le champs price, mais dans le champs paid, il me met un paiement de 85 sur chaque ligne, alors qu'il n'y a même pas d'article sur les lignes 9-8 et 7 du tableau.

Le 85 affiché sur chaque ligne correspond a un 1er paiement de 85€ de la facture 6 dans le tableau.

<?php

require_once('../inc/connexion.php');
$db = getDB();

// invoice = nfacture
// SUM(price) = prixtotal

// SUM(amount) = paid

//WHERE a.nfacture=b.nfacture 



  try     //Connection a la bdd
  {
  }
  catch (Exception $e)
  {
    die('Erreur : ' . $e->getMessage());
  }
  $stmt = $db->query("  select a.nfacture, a.prixtotal, b.paid
from 
(select invoices.invoice as nfacture, SUM(price) as prixtotal from invoices  

   LEFT JOIN services ON (invoices.invoice=services.invoice) 
     LEFT JOIN customers ON (invoices.id_customers=customers.id_customers) 

  LEFT JOIN items ON (services.id_items=items.id_items) 
  LEFT JOIN states ON (invoices.invoice=states.invoice) 

  WHERE states.type = 1 AND states.state = 1 GROUP BY nfacture )
  as a,

  (select invoices.invoice as nfacture,  SUM(amount) as paid from payments
  LEFT JOIN invoices ON (payments.invoice=invoices.invoice) 

  GROUP BY nfacture DESC)

  as b 

  GROUP by nfacture DESC 

 ");

  echo '
  <div class="container-fluid">
  <div class="card">
  <div class="card-header">
  <h3 class="card-title">Factures</h3>
  </div>
  <!-- /.card-header -->
  <div class="card-body ">
  <table class="table table-striped table-bordered table-hover">
  ';
  echo '<tr>';
  echo '<th align="center" >ID</th>';
  echo '<th align="center" >Client</th>';
  echo '<th align="center" >Price</th>';
  echo '<th align="center" >Paid</th>';


  echo '</tr>';

            while($donnees = $stmt->fetch()) // Renvoit les valeurs de la bdd
            {  


              echo '<tr>';
              echo '<td align="center" width="5%" ><a href="'.URLSITE.'form/invoice.php?invoice='. $donnees['nfacture'] .' "><button type="button" class="btn btn-block btn-primary btn-xs btn-flat">' . $donnees['nfacture'] . '</td></button></a>';
              echo '<td align="left" width="30%"></td>';
              echo '<td align="left" width="30%"></>'. $donnees['prixtotal'] .' </td>';
              echo '<td align="left" width="30%">'. $donnees['paid'] .' </></td>';
              echo '<td>
              <div class="btn-group">
              <button type="button" class="btn btn-secondary btn-xs btn-flat ">Action</button>
              <button type="button" class="btn btn-secondary btn-xs btn-flat dropdown-toggle dropdown-hover dropdown-icon" data-toggle="dropdown">
              <span class="sr-only">Toggle Dropdown</span>
              </button>
              <div class="dropdown-menu" role="menu">
              <a class="dropdown-item" href="#">Action</a>
              <a class="dropdown-item" href="#">Another action</a>
              <a class="dropdown-item" href="#">Something else here</a>
              <div class="dropdown-divider"></div>
              <a class="dropdown-item" href="#">Separated link</a>
              </div>
              </div>
              </td>';
              echo '</tr>';
            }
            echo '</table></div></div></div></center>';
            $pdo = null;
            ?>

J'ai le résultat ci-dessous :

Quand j'ajoute le nom du client  à la ligne 22 j'ai le message ci-dessous :

( ! ) Notice: Undefined index: fullname in C:\wamp64\www\1678\app\array\invoices.php on line 92

alors que la table customers est bien jointe avec les autres.

Je pense que le problème vient des jointures et principalement de la table items, c'est la seule table ou je n'ai pas ,l'id_customers, ou le champs invoice, c'est normal je l'utilise juste pour l'id de l"item et pour récupérer son prix, dans la table invoice, je ne met que l'id de l'items et il va chercher les informations depuis son id.
Windows / Chrome 108.0.0.0

A voir également:

7 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
16 déc. 2022 à 18:03

Bonjour,

Commence par tester ta requête DIRECTEMENT dans ta BDD via, par exemple, PHPMYADMIN.

Montre nous ce que ça t'affiche et vérifie si cela correspond à tes attentes...

A noter que, ensuite, dans le php, seuls les champs présents dans la partie SELECT de ta requête ne peuvent être utilisés dans le code...


0
Astolpho Messages postés 72 Date d'inscription vendredi 8 avril 2022 Statut Membre Dernière intervention 5 mars 2024
Modifié le 16 déc. 2022 à 18:21

ça me donne les messages ci-dessous :

La sélection courante ne contient pas de colonne unique. Les grilles d'édition, les cases à cocher ainsi que les liens Éditer, Copier et Supprimer ne sont pas disponibles. 
 Warning: #1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead

Le champs pour le nom de l'utilisateur (fullname) est bien dans le select.

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
16 déc. 2022 à 18:41

Tu vois bien que ta requête ne retourne pas le résultat escompté et d'ailleurs dans le tableau qui s'affiche tu vois bien qu'il n'y a pas non plus le nom de l'utilisateur...

0
Astolpho Messages postés 72 Date d'inscription vendredi 8 avril 2022 Statut Membre Dernière intervention 5 mars 2024
16 déc. 2022 à 18:48

J'ai le même résulat que dans mon tableau, justement je cherche à savoir pourquoi.

0
Astolpho Messages postés 72 Date d'inscription vendredi 8 avril 2022 Statut Membre Dernière intervention 5 mars 2024
16 déc. 2022 à 19:13

Pour le nom du client, c'est bon, je viens de me rendre compte de mon erreur.

0
Astolpho Messages postés 72 Date d'inscription vendredi 8 avril 2022 Statut Membre Dernière intervention 5 mars 2024
16 déc. 2022 à 19:03

J'ai ajouté :

 WHERE a.nfacture=b.nfacture 

J'ai les bon résultat par contre je ne vois que les 2 lignes ou il y a un paiement.

0

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

Posez votre question
Astolpho Messages postés 72 Date d'inscription vendredi 8 avril 2022 Statut Membre Dernière intervention 5 mars 2024
16 déc. 2022 à 19:28

C'est bon j'ai trouvé c'est comme ci-dessous maintenant, les résultats attendu sont les bon.

  SELECT a.nfacture, a.prixtotal, customers, b.paid FROM
 
  (SELECT invoices.invoice as nfacture, SUM(price) as prixtotal, customers.fullname as customers 
  FROM invoices  

  LEFT JOIN customers ON (invoices.id_customers=customers.id_customers) 
  LEFT JOIN services ON (invoices.invoice=services.invoice) 
  LEFT JOIN items ON (services.id_items=items.id_items) 
  LEFT JOIN states ON (invoices.invoice=states.invoice) 

  WHERE states.type = 1 AND states.state = 1 GROUP BY nfacture )
  as a,

  (SELECT invoices.invoice as nfacture, SUM(amount) as paid FROM invoices
  LEFT JOIN payments ON (invoices.invoice=payments.invoice) 

  GROUP BY nfacture DESC)

  as b 
  WHERE a.nfacture=b.nfacture
  GROUP by nfacture DESC 
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
16 déc. 2022 à 20:41

Par contre, dans la partie SELECT de ta requête tu n'as toujours pas mis le fullname.

0
Astolpho Messages postés 72 Date d'inscription vendredi 8 avril 2022 Statut Membre Dernière intervention 5 mars 2024
Modifié le 17 déc. 2022 à 15:59

Bonjour jordane45,

j'ai mis le fullname sur la ligne 3 en "7"

customers.fullname as customers
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
17 déc. 2022 à 18:21

Oui.... mais si tu ne le mets pas dans le SELECT "principal"  de ta ligne 1 .....  il ne sera pas utilisable dans le code php ensuite..

Il suffit de voir le résultat que tu obtiens dans phpmyadmin pour te rendre compte des colonnes qui seront ensuite présentes dans ton code php...

0
Astolpho Messages postés 72 Date d'inscription vendredi 8 avril 2022 Statut Membre Dernière intervention 5 mars 2024
17 déc. 2022 à 19:15

C'est bon c'est fait.

Merci

0