Comment calculer chiffre d'affaire avec php /mysql tous les ans
Fermé
Olivier
-
Modifié le 31 oct. 2017 à 21:23
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 1 nov. 2017 à 12:52
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 1 nov. 2017 à 12:52
A voir également:
- Comment calculer chiffre d'affaire avec php /mysql tous les ans
- Application pour écrire les chiffre en lettre - Télécharger - Outils professionnels
- Comment calculer une moyenne sur excel - Guide
- Easy php - Télécharger - Divers Web & Internet
- Mysql download - Télécharger - Bases de données
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
3 réponses
yg_be
Messages postés
22724
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 avril 2024
1 476
31 oct. 2017 à 21:40
31 oct. 2017 à 21:40
bonsoir, je te suggère de procéder ainsi:
1) fais le travail pour une année, par exemple 2016 (tu y es presque, encore un petit effort)
2) quand cela fonctionnera parfaitement, généralise-le et puis fais le pour chaque année.
1) fais le travail pour une année, par exemple 2016 (tu y es presque, encore un petit effort)
2) quand cela fonctionnera parfaitement, généralise-le et puis fais le pour chaque année.
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
4 650
1 nov. 2017 à 00:58
1 nov. 2017 à 00:58
Bonjour,
Déjà.... https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
Je suis étonné que Yg_be ne te l'ai pas indiqué...; il aurait du commencer par ça !
Je t'invite fortement à passer à PDO ou au pire à mysqli.
Ensuite....
pour ce qui est de ton affichage...
Comme tu l'as fait actuellement :
Tu fais
- une requête qui te liste tout (pour l'affichage des données)
- Une requête qui fait la SUM (en ajoutant un GROUP BY pour regrouper par année)
Pour ton tableau...
Tu parcours le résultat de la requête et, à chaque "tour" tu regardes si l'année que tu vas afficher est la même que celle que tu viens d'afficher. Si oui.. tu ajoutes une ligne à ton tableau ... si non, tu mets le total et créés un nouveau tableau.
Bref, juste avec un ou deux if/else .. tu peux y arriver sans soucis.
Déjà.... https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
Je suis étonné que Yg_be ne te l'ai pas indiqué...; il aurait du commencer par ça !
Je t'invite fortement à passer à PDO ou au pire à mysqli.
Ensuite....
pour ce qui est de ton affichage...
Comme tu l'as fait actuellement :
Tu fais
- une requête qui te liste tout (pour l'affichage des données)
- Une requête qui fait la SUM (en ajoutant un GROUP BY pour regrouper par année)
Pour ton tableau...
Tu parcours le résultat de la requête et, à chaque "tour" tu regardes si l'année que tu vas afficher est la même que celle que tu viens d'afficher. Si oui.. tu ajoutes une ligne à ton tableau ... si non, tu mets le total et créés un nouveau tableau.
Bref, juste avec un ou deux if/else .. tu peux y arriver sans soucis.
Dans ce goût là
GROUP BY C'est que ça m'affiche que les années moi je souhaiterais que ça m'affiche les mois aussi, c'est pour ça que j'ai fait une condition sur le mois de janvier afin d'avoir une petite différence quand on regarde le tableau.
// information pour la connection à le DB $host = 'localhost'; $user = '*****'; $pass = '******'; $db = 'CA'; // connection à la DB $link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); mysql_select_db($db) or die ('Erreur :'.mysql_error()); // requête SQL qui compte le nombre total d'enregistrement dans la table et qui //récupère tous les enregistrements $select = 'SELECT * FROM chiffre_affaire WHERE annee GROUP BY annee'; $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); $total = mysql_num_rows($result); // si on a récupéré un résultat on l'affiche. if($total) { // debut du tableau echo '<table bgcolor="#FFFFFF" align="center">'; // première ligne on affiche les titres prénom et surnom dans 2 colonnes echo '<tr>'; echo '<td bgcolor="#669999" width="200"><b><u>Mois</u></b></td>'; echo '<td bgcolor="#669999" width="200" align="center"><b><u>Chiffre Affaire</u></b></td>'; echo '<td bgcolor="#669999" width="90" align="center"><b><u>Année</u></b></td>'; echo '</tr>'; // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne. while($row = mysql_fetch_array($result)) { // Condition if : si le mois est janvier alors on l'affiche en gras dans le tableau. $mois = $row["mois"]; echo '<tr>'; if ($mois == "Janvier") { echo '<td bgcolor="#CCCCCC"><b>'.$row["mois"].'</b></td>'; echo '<td bgcolor="#CCCCCC" align="center">'.$row["ca_mois"].'</td>'; echo '<td bgcolor="#CCCCCC" align="center"><b>'.$row["annee"].'</b></td>'; echo '</tr>'; // Cacule chiffre d'affaire $sql = mysql_query("SELECT SUM(ca_mois) FROM chiffre_affaire WHERE annee GROUP BY annee"); $somme = mysql_result($sql,0); echo '<tr>'; echo '<td bgcolor="#CCCCCC" width="200" align="center"><b>CA Total</b></td>'; echo '<td bgcolor="#CCCCCC" width="200" align="center"><font color="red">'.$somme.'€</font></td>'; echo '<td bgcolor="#CCCCCC" width="90" align="center">########</td>'; echo '<tr>'; } else { echo '<td bgcolor="#CCCCCC">'.$row["mois"].'</td>'; echo '<td bgcolor="#CCCCCC" align="center">'.$row["ca_mois"].'</td>'; echo '<td bgcolor="#CCCCCC" align="center">'.$row["annee"].'</td>'; echo '</tr>'; } } echo '<table bgcolor="#FFFFFF" align="center">'; echo '<tr>'; echo '<td bgcolor="#CCCCCC" width="200"> </td>'; echo '<td bgcolor="#CCCCCC" align="center" width="200"> </td>'; echo '<td bgcolor="#CCCCCC" align="center" width="90"> </td>'; echo '</tr>'; echo '</table>'; } else echo 'Pas d\'enregistrements dans cette table...'; // on libère le résultat mysql_free_result($result);
GROUP BY C'est que ça m'affiche que les années moi je souhaiterais que ça m'affiche les mois aussi, c'est pour ça que j'ai fait une condition sur le mois de janvier afin d'avoir une petite différence quand on regarde le tableau.
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
4 650
>
Olivier
1 nov. 2017 à 10:16
1 nov. 2017 à 10:16
Tu n'as pas appliqué ma première recommandation
Et tu n'as sûrement pas testé tes requêtes DIRECTEMENT dans ta bdd..
Et tu n'as sûrement pas testé tes requêtes DIRECTEMENT dans ta bdd..
Olivier
>
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
1 nov. 2017 à 11:20
1 nov. 2017 à 11:20
J'ai ajouté groupe by comme tu me la indiquée mais si j'ajoute ça justement ça me liste toute les années dans le tableau hors ce n’est pas ce que je souhaiterais faire, ma première idée est bonne, je liste toute les entrée de la base dans le tableau, là j'ai effectué une condition pour faciliter la lecture sur le mois de janvier.
Mais pour listée toute les entrée j'ai mis ça dans une boucle while, voilà ce que je veux faire une image exemple sera plus parlante :
https://img4.hostingpics.net/pics/364799caanne.png
Ça liste déjà tout ce qui se trouve dans la base de donnée et pour le calcul de chiffre d''affaire ça fait un SUM de la colonne qui contient le chiffre d'affaire du moi.
La actuellement le code liste déjà toute les infos avec while (une boucle) qui va répéter chaque entré de la base
Mais pour listée toute les entrée j'ai mis ça dans une boucle while, voilà ce que je veux faire une image exemple sera plus parlante :
https://img4.hostingpics.net/pics/364799caanne.png
Ça liste déjà tout ce qui se trouve dans la base de donnée et pour le calcul de chiffre d''affaire ça fait un SUM de la colonne qui contient le chiffre d'affaire du moi.
La actuellement le code liste déjà toute les infos avec while (une boucle) qui va répéter chaque entré de la base
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
4 650
>
Olivier
1 nov. 2017 à 11:50
1 nov. 2017 à 11:50
Tu as vu mon autre réponse ??
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
4 650
Modifié le 1 nov. 2017 à 12:15
Modifié le 1 nov. 2017 à 12:15
Voici ton code refait au propre (et corrigé).
NB : Je l'ai écrit de tête sans tester, il peut y avoir quelques erreurs qu'il faudra corriger.
Par contre je l'ai plutôt bien commenter... tu devrais comprendre....
Voila :
Déjà... je t'invite à lire ceci avec attention :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
On place le code de connexion à la bdd dans un fichier à part...
(je pars du principe que tu passes en PDO... il faudra le modifier en conséquence si tu veux être en mysqli) (et modifier la façon de faire les requêtes également ....)
donc.. en pdo, pour se connecter à une bdd : Connexion PDO
Ensuite, ton code à proprement parlé :
Cordialement,
Jordane
NB : Je l'ai écrit de tête sans tester, il peut y avoir quelques erreurs qu'il faudra corriger.
Par contre je l'ai plutôt bien commenter... tu devrais comprendre....
Voila :
Déjà... je t'invite à lire ceci avec attention :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
On place le code de connexion à la bdd dans un fichier à part...
(je pars du principe que tu passes en PDO... il faudra le modifier en conséquence si tu veux être en mysqli) (et modifier la façon de faire les requêtes également ....)
donc.. en pdo, pour se connecter à une bdd : Connexion PDO
<?php //fichier : cnxbdd.php // information pour la connection à le DB $host = 'localhost'; $user = '*****'; $pass = '******'; $db = 'CA'; try{ $bdd =new PDO('mysql:host='.$host.'; dbname='.$db.'; charset=utf8', $user, $pass); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); }
Ensuite, ton code à proprement parlé :
<?php //-----------------------------------------------------------------------------------// //activation des erreurs php //-----------------------------------------------------------------------------------// error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //-----------------------------------------------------------------------------------// //connexion à la bdd //-----------------------------------------------------------------------------------// require_once "cnxbdd.php"; //-----------------------------------------------------------------------------------// //on récupère la liste //-----------------------------------------------------------------------------------// $sql = 'SELECT * FROM chiffre_affaire ORDER BY annee'; $datas = NULL; try{ $requete = $bdd->prepare($sql); $requete->execute($datas); // retourne le résultat dans un array $arr_Liste = $requete->fetchAll(); }catch(Exception $e){ echo " ERREUR ! " . $e->getMessage(); } // je retravaille l'array pour avoir un array plus facile à utiliser pour la suite $liste = array(); if(!empty($arr_Liste)){ foreach($arr_Liste as $R){ $liste[$R['annee']][$R['ref_mois']] = array('id'=>$R['id'] ,'ca_mois'=>$R['ca_mois'] ,'mois'=>$R['mois'] ); } } //-----------------------------------------------------------------------------------// //on récupère les totaux par Années et par mois //-----------------------------------------------------------------------------------// $sql = "SELECT SUM(ca_mois) AS total FROM chiffre_affaire GROUP BY annee"; $datas = NULL; try{ $requete = $bdd->prepare($sql); $requete->execute($datas); // retourne le résultat dans un array $arr_total = $requete->fetchAll(); }catch(Exception $e){ echo " ERREUR ! " . $e->getMessage(); } // je retravaille l'array pour avoir un array plus facile à utiliser pour la suite $totaux = array(); if(!empty($arr_total)){ foreach($arr_total as $R){ $totaux[$R['annee']] = $R['total'] ; } } //-----------------------------------------------------------------------------------// //maintenant... j'effectue l'affichage //-----------------------------------------------------------------------------------// if(!empty($liste)){ //on défini les entêtes du tableau à créer $arr_TH = array(); $arr_TH[] = array('text'=>'Mois' , 'style'=> 'width:200px ; background-color:#669999' , 'class'=>''); $arr_TH[] = array('text'=>'Chiffre Affaire' , 'style'=> 'width:200px; background-color:#669999' , 'class'=>''); $arr_TH[] = array('text'=>'Année' , 'style'=> 'width:90px; background-color:#669999' , 'class'=>''); //-----------------------------------------------------------------------------------// // Fonctions pour créer les tableaux //-----------------------------------------------------------------------------------// // J'ai découpé la création des différentes partis de tes tableaux dans des fonctions //c'est plus simple pour les générer dans les différentes boucles /** * créé (et rempli) le tableau utilisé pour affiche le total */ function add_tableau_total($somme = 0){ $result = '<table bgcolor="#FFFFFF">'; $result .= '<tr>'; $result .= '<td bgcolor="#CCCCCC" width="200" align="center"><b>CA Total</b></td>'; $result .= '<td bgcolor="#CCCCCC" width="200" align="center"><font color="red">'.$somme.'€</font></td>'; $result .= '<td bgcolor="#CCCCCC" width="90"> </td>'; $result .= '<tr>'; $result .= '</table>'; return $result; } /** * Initialise un tableau * et affiche les en-têtes (TH) */ function add_tbl($entetes){ // debut du tableau $result = '<table bgcolor="#FFFFFF">'; // première ligne on affiche les titres prénom et surnom dans 2 colonnes $result .= '<thead>'; $result .= '<tr>'; foreach($entetes as $TH){ $result .= '<th style="'.$TH['style'].'" class="'.$TH['class'].'"><b><u>'.$TH['texte'].'</u></b></th>'; } $result .= '</tr>'; $result .= '</thead>'; return $result; } /** * Ajout les lignes dans le tbody du tableau */ function add_rows($rowDatas){ $result = ""; if(!empty($rowDatas)){ foreach($rowDatas as $ref_mois=>$R){ $result .= "<tr id='tr_".$ref_mois."'>"; $result .= "<td>".$R['mois']."</td>"; $result .= "<td>".$R['ca_mois']."</td>"; $result .= "<td>".$R['annee']."</td>"; $result .= "</tr>"; } } return $result; } //-----------------------------------------------------------------------------------// //maintenant.. on s'occupe de générer les tableaux //-----------------------------------------------------------------------------------// $tableau = ''; $annee_prec = NULL; $tableau = ""; //on parcours la liste pour créer le tableau foreach($liste as $annee=>$MoisrowDatas){ if($annee <> $annee_prec){ //si ce n'est pas le premier tableau if($annee_prec != NULL){ $tableau .='</body></table>'; $somme = !empty($totaux[$R[$annee_prec]) ? $totaux[$R[$annee_prec] : 0; $tableau .= add_tableau_total($somme); } //si c'est une nouvelle année, on créé un tableau $tableau .= add_tbl($arr_TH); $tableau .= '<body>'; } //ajout des lignes dans le body du tableau $tableau .= add_rows($MoisrowDatas); // On actualise la variable annee_prec avec l'annee en cours $annee_prec = $annee; } // on termine les tableaux : $tableau .='</body></table>'; //Et pour finir ... Affichage des tableaux que ta page: echo $tableau; } ?>
Cordialement,
Jordane
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
4 650
1 nov. 2017 à 12:16
1 nov. 2017 à 12:16
Petite correction au niveau de la requête pour les totaux.
J'avais oublié le GROUP BY annee
J'avais oublié le GROUP BY annee
Je vais devoir revérifier le code du coup puisque quand je l’exécute j’ai une erreur 500 sur la page en gros comme si la page n’existait pas.
Ç’a m’avais fait le coup avec mon code PHP précédemment à cause de syntaxe, mais je croit que je vais procéder autrement, car sinon je n’ai pas finie de vérifier toutes les syntaxes...
Merci beaucoup en tout qu’a de ton aide ...
Ç’a m’avais fait le coup avec mon code PHP précédemment à cause de syntaxe, mais je croit que je vais procéder autrement, car sinon je n’ai pas finie de vérifier toutes les syntaxes...
Merci beaucoup en tout qu’a de ton aide ...
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
4 650
>
Olivier
1 nov. 2017 à 12:52
1 nov. 2017 à 12:52
Je vois une erreur ici
A changer par :
Après.. si tu as toujours un souci... file moi un DUMP de ta BDD que je puisse tester chez moi
$somme = !empty($totaux[$R[$annee_prec]) ? $totaux[$R[$annee_prec] : 0;
A changer par :
$somme = !empty($totaux[$R[$annee_prec]]) ? $totaux[$R[$annee_prec]] : 0;
Après.. si tu as toujours un souci... file moi un DUMP de ta BDD que je puisse tester chez moi
Modifié le 31 oct. 2017 à 21:50
1- Comment le faire pour chaque année
2- Comment faire en sorte que les tableaux de toute les année s'affiche sur la page.
Un petit exemple peut être ?
31 oct. 2017 à 22:21
31 oct. 2017 à 22:44