IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Regroupement d'informations pour meilleur affichage


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Cuisinier
    Inscrit en
    Août 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Cuisinier

    Informations forums :
    Inscription : Août 2017
    Messages : 51
    Points : 14
    Points
    14
    Par défaut Regroupement d'informations pour meilleur affichage
    Bonjour,

    Le titre n'est pas d'une grande aide, car je ne sais pas comment appeler ce que je veux faire.
    Mais avec cette image, je pense que vous allez comprendre :

    Nom : Capture du 2017-09-03 00-31-39.png
Affichages : 136
Taille : 32,9 Ko

    Voilà, donc en fait, voici l'explication :
    - lorsque je rentre une recette dans ma base de données, cela me crée une ligne pour chaque ingrédient qui composera cette recette.
    - donc logiquement, pour l'affichage que vous voyez, il va me chercher chaque ligne correspondant à chaque ingrédient.
    - sachant qu'une recette à un ID, il faudrait que j'arrive à regrouper ce qui va ensemble.
    - ici, il serait normal de voir dans le tableau 'Recettes', qu'une seule ligne 'Sauce Carbonara'.
    - et lorsque je sélectionne une recette dans la liste, les tableaux 'Détails de la recette' et 'Calculs' et 'Observations' doivent se remplir en conséquences.

    Voici le code de ma page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    <?php
      require_once( '../app/table/functions.php' );
      $recettes = getRecettes( $connect );
      $ingredients = getRecettes( $connect );
      $quantites = getRecettes( $connect );
      $prix = getIngredients( $connect );
     
      // Calcul du coût de revient
      $total = 0;
      foreach( $recettes as $row )
      {
        $montant = ($row["quantites"] * $row["prix"]);
        $total = $montant + $total;
      }
      $c_revient = ($total / $row["nbpersonnes"]);
      $marge = 4;
      $ttc = $c_revient * $marge;
    ?>
     
              <h3 align="center">Gestion des recettes</h3>  
              <br />
     
              <!-- Visualiser la liste des recettes -->
              <div class="table-responsive col-md-4">
              <h4 class="sub-header">Liste des recettes</h4>
                  <div class="table-responsive">
                      <table id="recettes" class="table table-bordered table-striped table-hover">
                          <thead>
                              <tr>
                                <th>Recettes</th>
                              </tr>
                          </thead>
                            <?php foreach( $recettes as $recette ) { ?>
                              <tr>
                                <td><?php echo $recette["recettes"]; ?></td>
                              </tr>
                            <?php } ?>
                      </table>
                  </div>
              </div>
     
              <!-- Visualiser le détail de la recette sélectionnée -->
              <div class="table-responsive col-md-5">
              <h4 class="sub-header">Détail de la recette</h4>
                  <div class="table-responsive">
                      <table  id="composition_recettes" class="table table-striped table-bordered">
                          <thead>
                              <tr>
                                <th>Ingrédients</th>
                                <th width="10%">Quantités</th>
                                <th width="20%">Prix au kg</th>
                                <th width="15%">Coûts</th>
                              </tr>
                          </thead>
                          <tfoot>
                              <tr>
                                <td colspan="3" align="right">Coût de revient de la recette HT - TOTAL</td>
                                <td><span id=""><?php echo round($total, 2) ?></span> &euro;</td>
                              </tr>
                          </tfoot>
                          <tbody>
                            <?php foreach( $recettes as $row ) { ?>
                              <tr>
                                <td><?php echo $row["ingredients"]; ?></td>
                                <td><span id=""><?php echo $row["quantites"]; ?></span></td>
                                <td><span id=""><?php echo $row["prix"]; ?></span></td>
                                <td><span id=""><?php echo round($row['quantites'] * $row['prix'], 2) ?></span> &euro;</td>
                              </tr>
                            <?php } ?>
                          </tbody>
                      </table>
                  </div>
              </div>
     
              <!-- Effectuer les calculs -->
              <div class="table-responsive col-md-3">
              <h4 class="sub-header">Calculs</h4>
                  <div class="table-responsive-vertical">
                      <table id="recettes" class="table table-stripped table-bordered">
                          <tr>
                            <th width="70%">Nombre de personnes</th> 
                            <?php foreach( $recettes as $nbpersonne ) { ?>
                              <td><?php echo $nbpersonne["nbpersonnes"]; ?></td>
                            <?php } ?>
                          </tr>
                          <tr>
                            <th width="70%">Coût de revient / pers.</th>
                            <td><?php echo round($c_revient, 3); ?></td>
                          </tr>
                          <tr>
                            <th width="70%">Marge</th>
                            <td><?php echo $marge; ?></td>
                          </tr>
                          <tr>
                            <th width="70%">Prix de vente TTC</th>
                            <td><?php echo round($ttc, 2); ?></td>
                          </tr>
                      </table>
                      <div class="group-form">
                          <label>Observations</label>
                          <?php foreach( $recettes as $observation ) { ?>
                          <textarea class="form-control" id="Observations" rows="3"><?php echo $observation["observations"]; ?></textarea>
                          <?php } ?>
                      </div>
                  </div>
              </div>
    Merci d'avance !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je suppose que tu as un SELECT avec une jointure entre la recette et les ingrédients.
    Fait plutôt un SELECT pour la recette et un SELECT pour les ingrédients.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Cuisinier
    Inscrit en
    Août 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Cuisinier

    Informations forums :
    Inscription : Août 2017
    Messages : 51
    Points : 14
    Points
    14
    Par défaut
    En effet, dans le fichier functions.php, je fais appel à getRecettes comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    /*	RECETTES	*/
    	function getRecettes( $connect ) {
    		$query = "
    			SELECT C.categories, C.id, R.recettes, R.nbpersonnes, I.ingredients, quantites, I.prix, observations
    			FROM categories C
    					JOIN recettes R
    						ON C.id=R.categories_id
    					JOIN composition_recettes CR
    						ON R.id=CR.recettes_id 
    					JOIN ingredients I
    						ON I.id=CR.ingredients_id
    			ORDER BY recettes DESC";
    		$result = mysqli_query($connect, $query);
     
    		return mysqli_fetch_all( $result, MYSQLI_ASSOC );
    	}
    La table 'ingredients' et la table 'recettes' sont jointes par la table 'composition_recettes'.

  4. #4
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Non faites une requête simple qui n'affiche que les recettes sans jointure dans getRecettes et une autre pour les details (appelons la getDetailsRecette qui aura un prototype comme ça getDetailsRecette($connection, $id_recette) par exemple ) , vous copiez le contenu de la requête de getRecettes dans getDetailsRecette avec un WHERE id de la recette en question ).
    Par défaut, l'affichage sera une liste des recettes sous forme de liens ?id_recette = id_recette et quand on clique sur le lien , les autres tableaux seront remplis à l'appel de getDetailsRecette .
    La partie Observations peut porter à confusion, observation de quoi ?

    PS: L'arrondi ne fausse t-il pas des calculs ?
    Le bienfait n'est jamais perdu

  5. #5
    Membre à l'essai
    Homme Profil pro
    Cuisinier
    Inscrit en
    Août 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Cuisinier

    Informations forums :
    Inscription : Août 2017
    Messages : 51
    Points : 14
    Points
    14
    Par défaut
    Vous voulez tous les deux me casser mon modèle qui était pour moi logique et comme ceci :

    Nom : dbcuisine.png
Affichages : 105
Taille : 48,2 Ko

    Pour la partie 'Observations', en effet, au début je ne l'avais pas fait. Mais en fait je me suis dit qu'il me faudrait un petit 'endroit' où mettre des annotations personnelles concernant la recette affichée !

    Je ne vois pas où l'arrondi fausse les calculs !

  6. #6
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Parce que round(0.345, 2) donne 0.34 , vous trouvez ça intéressant ?
    La logique n'est pas cassée, elle doit être revue.
    Les tableaux du centre et celui de droite dépendent bien des recettes non ?
    Donc liste des recettes --> Affichage des détails par recette
    ça fait quand même bizarre les noms des colonnes qui ressemble à celui des tables, mais bon on parlera pas du MCD en lui même que je trouve problématique.
    Le bienfait n'est jamais perdu

  7. #7
    Membre à l'essai
    Homme Profil pro
    Cuisinier
    Inscrit en
    Août 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Cuisinier

    Informations forums :
    Inscription : Août 2017
    Messages : 51
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Willy_k Voir le message
    Parce que round(0.345, 2) donne 0.34 , vous trouvez ça intéressant ?
    Moi il m'affiche 0.35 ... donc ???

    Citation Envoyé par Willy_k Voir le message
    Les tableaux du centre et celui de droite dépendent bien des recettes non ?
    Donc liste des recettes --> Affichage des détails par recette
    Exact !

    Citation Envoyé par Willy_k Voir le message
    ça fait quand même bizarre les noms des colonnes qui ressemble à celui des tables, mais bon on parlera pas du MCD en lui même que je trouve problématique.
    Vous êtes le premier à me le dire. Il faut bien être premier dans quelque chose un jour.
    Je sais que la perfection n'existe pas, mais après diverses discussions, c'est cette modélisation qui ressort !

    Dans une table 'ingredients', vous voulez appeler les ingrédients comment ? Aliments ? Articles ? Matière première ...
    Une recette ... c'est une recette !!!

    Et le MCD problématique ?

  8. #8
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Effectivement 0.35, je suis allé tester avec Python autant pour moi.

    Pour le nommage , c'est plus un avis perso parce que je n'ai jamais eu à nommer mes colonnes comme mes tables. Pour la colonne ingrédients, j'aurai mis nom_ingredient
    Pour le MCD, j'aurai dû préciser qu'au niveau de la table "ingredients", les fournisseurs peuvent faire l'objet d'une table par exemple.

    Revenons au sujet principal, on a commencé déjà à dévier par ma faute tout de même..

    Pour le problème d'affichage, faites simplement une première requête qui va lister les recettes et vous les afficher sous forme de liste de liens, ne vous préoccuper pas des autres tableaux pour le moment, on va aller pas à pas
    Le bienfait n'est jamais perdu

  9. #9
    Membre à l'essai
    Homme Profil pro
    Cuisinier
    Inscrit en
    Août 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Cuisinier

    Informations forums :
    Inscription : Août 2017
    Messages : 51
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Willy_k Voir le message
    Effectivement 0.35, je suis allé tester avec Python autant pour moi.
    Revenons au sujet principal, on a commencé déjà à dévier par ma faute tout de même..
    Attitude que je respecte ! Je m'excuse aussi !

    Citation Envoyé par Willy_k Voir le message
    Pour le nommage , c'est plus un avis perso parce que je n'ai jamais eu à nommer mes colonnes comme mes tables. Pour la colonne ingrédients, j'aurai mis nom_ingredient. Pour le MCD, j'aurai dû préciser qu'au niveau de la table "ingredients", les fournisseurs peuvent faire l'objet d'une table par exemple.
    Lorsque j'ai commencé mon MCD tout seul au début, j'avais en effet mis des 'nom_....' et puis, je ne sais pas pourquoi, peut-être que je n'aime pas les '_'
    Pour les fournisseurs, on peut toujours tout séparer en effet, mais comme je n'ai rien à mettre à part le nom. Et j'en ai pas besoin à part dans le tableau qui liste mes ingrédients dans une autre page.
    A la base, j'avais fait la même chose pour 'familles', je l'avais intégré dans la table 'ingredients'. Mais j'ai décidé de faire une table à part car je m'en sers pour filtrer des recherches dans ma page lorsque je crée une recette.

    Citation Envoyé par Willy_k Voir le message
    Pour le problème d'affichage, faites simplement une première requête qui va lister les recettes et vous les afficher sous forme de liste de liens, ne vous préoccuper pas des autres tableaux pour le moment, on va aller pas à pas
    Donc, j'ai mes fonctions comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    /*	RECETTES	*/
    	function getRecettes( $connect ) {
    		$query = "
    			SELECT id, recettes, nbpersonnes, observations
    			FROM recettes
    			ORDER BY recettes ASC";
    		$result = mysqli_query($connect, $query);
     
    		return mysqli_fetch_all( $result, MYSQLI_ASSOC );
    	}
     
    	function getDetailRecette( $connect ) {
    		$query = "
    			SELECT C.categories, C.id, R.recettes, R.nbpersonnes, I.ingredients, quantites, I.prix
    			FROM categories C
    					JOIN recettes R
    						ON C.id=R.categories_id
    					JOIN composition_recettes CR
    						ON R.id=CR.recettes_id 
    					JOIN ingredients I
    						ON I.id=CR.ingredients_id
    			ORDER BY recettes DESC";
    		$result = mysqli_query($connect, $query);
     
    		return mysqli_fetch_all( $result, MYSQLI_ASSOC );
    	}
    Et ma page devient ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
    <?php
      require_once( '../app/table/functions.php' );
      $recettes = getRecettes( $connect );
      $calculs = getDetailRecette( $connect );
      $ingredients = getDetailRecette( $connect );
      $quantites = getDetailRecette( $connect );
      $prix = getIngredients( $connect );
     
      // Calcul du coût de revient
      $total = 0;
      foreach( $calculs as $row )
      {
        $montant = ($row["quantites"] * $row["prix"]);
        $total = $montant + $total;
      }
      $c_revient = ($total / $row["nbpersonnes"]);
      $marge = 4;
      $ttc = $c_revient * $marge;
    ?>
     
              <h3 align="center">Gestion des recettes</h3>  
              <br />
     
              <!-- Visualiser la liste des recettes -->
              <div class="table-responsive col-md-4">
              <h4 class="sub-header">Liste des recettes</h4>
                  <div class="table-responsive">
                      <table id="recettes" class="table table-bordered table-striped table-hover">
                          <thead>
                              <tr>
                                <th>Recettes</th>
                              </tr>
                          </thead>
                            <?php foreach( $recettes as $recette ) { ?>
                              <tr>
                                <td><a href="#"><?php echo $recette["recettes"]; ?></a></td>
                              </tr>
                            <?php } ?>
                      </table>
                  </div>
              </div>
     
              <!-- Visualiser le détail de la recette sélectionnée -->
              <div class="table-responsive col-md-5">
              <h4 class="sub-header">Détail de la recette</h4>
                  <div class="table-responsive">
                      <table  id="composition_recettes" class="table table-striped table-bordered">
                          <thead>
                              <tr>
                                <th>Ingrédients</th>
                                <th width="10%">Quantités</th>
                                <th width="20%">Prix au kg</th>
                                <th width="15%">Coûts</th>
                              </tr>
                          </thead>
                          <tfoot>
                              <tr>
                                <td colspan="3" align="right">Coût de revient de la recette HT - TOTAL</td>
                                <td><span id=""><?php echo round($total, 2) ?></span> &euro;</td>
                              </tr>
                          </tfoot>
                          <tbody>
                            <?php foreach( $calculs as $row ) { ?>
                              <tr>
                                <td><?php echo $row["ingredients"]; ?></td>
                                <td><span id=""><?php echo $row["quantites"]; ?></span></td>
                                <td><span id=""><?php echo $row["prix"]; ?></span></td>
                                <td><span id=""><?php echo round($row['quantites'] * $row['prix'], 2) ?></span> &euro;</td>
                              </tr>
                            <?php } ?>
                          </tbody>
                      </table>
                  </div>
              </div>
     
              <!-- Effectuer les calculs -->
              <div class="table-responsive col-md-3">
              <h4 class="sub-header">Calculs</h4>
                  <div class="table-responsive-vertical">
                      <table id="recettes" class="table table-stripped table-bordered">
                          <tr>
                            <th width="70%">Nombre de personnes</th> 
                            <?php foreach( $recettes as $nbpersonne ) { ?>
                              <td><?php echo $nbpersonne["nbpersonnes"]; ?></td>
                            <?php } ?>
                          </tr>
                          <tr>
                            <th width="70%">Coût de revient / pers.</th>
                            <td><?php echo round($c_revient, 2); ?></td>
                          </tr>
                          <tr>
                            <th width="70%">Marge</th>
                            <td><?php echo $marge; ?></td>
                          </tr>
                          <tr>
                            <th width="70%">Prix de vente TTC</th>
                            <td><?php echo round($ttc, 2); ?></td>
                          </tr>
                      </table>
                      <div class="group-form">
                          <label>Observations</label>
                          <?php foreach( $recettes as $observation ) { ?>
                          <textarea class="form-control" id="Observations" rows="3"><?php echo $observation["observations"]; ?></textarea>
                          <?php } ?>
                      </div>
                  </div>
              </div>
    Ce qui déjà, sans faire grand chose, me plaît beaucoup plus en affichage
    Nom : Capture du 2017-09-03 12-50-20.png
Affichages : 111
Taille : 34,1 Ko

  10. #10
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Pour la fonction getRecette, prenez seulement id, recettes dans le SELECT , vous n'avez pas besoin des autres colonnes.
    Pour le getDetailRecette je l'écrirai comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    function getDetailRecette( $connect, $id ) {
        $id = intval($id);
        $query = "
    	SELECT C.categories
           , C.id
           , R.recettes
           , R.nbpersonnes
           , I.ingredients
           , quantites
           , I.prix
           , (I.prix * quantites) AS cout
     
    	FROM categories C
    		JOIN recettes R
    		    ON C.id=R.categories_id
    		JOIN composition_recettes CR
    		    ON R.id=CR.recettes_id 
    		JOIN ingredients I
    		    ON I.id=CR.ingredients_id
            WHERE CR.recettes_id = $id
    	ORDER BY ingredients DESC";
        $result = mysqli_query($connect, $query);
         return mysqli_fetch_all( $result, MYSQLI_ASSOC );
    }
    Cette fonction retournera les détails par recette.
    Le coût de revient/personne , comment vous le calculez ,j'ai comme l'impression qu'il y a un problème.

    Dans le code de la page,
    - La partie qui affiche les liens sera comme ça <td><a href="?id=<?php echo $recette['id'] ?>"><?php echo $recette["recettes"]; ?></a></td>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?php
    require_once( '../app/table/functions.php' );
    $id = isset($_GET['id']) ? $_GET['id'] : 0; //ID de la recette choisie
    $recettes = getRecettes( $connect );
    $details = getDetailRecette($connect, $id);
    // Calcul du coût de revient
    $total = 0;
    foreach( $details as $row ) {
        $total += $row['cout'];
    }
    $c_revient = ($total / $row["nbpersonnes"]); //ici $row['nbepersonnes'] va contenir le nombre de personne de la dernière ligne
    $marge = 4;
    $ttc = $c_revient * $marge;
    ?>
    Dans le tbody, remplacez $calcul par $details.

    L'idée est que par défaut, les 2 autres tables soient vides et quand on clique sur une recette on a les infos associées. Le plus intéressant serait pour le titre "Détails de la recette" d'avoir "Détails de la recette - Sauce Carbonara".
    Le bienfait n'est jamais perdu

  11. #11
    Membre à l'essai
    Homme Profil pro
    Cuisinier
    Inscrit en
    Août 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Cuisinier

    Informations forums :
    Inscription : Août 2017
    Messages : 51
    Points : 14
    Points
    14
    Par défaut
    MAZETTE ... ça bug de partouuuutttt

    Citation Envoyé par Willy_k Voir le message
    Pour la fonction getRecette, prenez seulement id, recettes dans le SELECT , vous n'avez pas besoin des autres colonnes.
    Pour le getDetailRecette je l'écrirai comme ça
    Il faut bien que je récupère le nombre de personnes et les observations pour les afficher ?

    Citation Envoyé par Willy_k Voir le message
    Le coût de revient/personne , comment vous le calculez ,j'ai comme l'impression qu'il y a un problème.
    Le coût de revient par personne est tout simplement fait comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $c_revient = ($total / $row["nbpersonnes"]);
    $total -> le total du tableau 'Détail de la recette'

    Donc, là, je n'ai plus rien dans le détail de la recette, les calculs et observations !!!

  12. #12
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Quels sont les erreurs retournées?
    Pour l'observation, c'est une observation / recette non ?
    Pour le coût de revient /personne je demande parce qu'on voit dans le dernier tableau ou il y a le 6, il n y a rien .
    Le bienfait n'est jamais perdu

  13. #13
    Membre à l'essai
    Homme Profil pro
    Cuisinier
    Inscrit en
    Août 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Cuisinier

    Informations forums :
    Inscription : Août 2017
    Messages : 51
    Points : 14
    Points
    14
    Par défaut
    Alors :
    - il me dit que $total fait une division par 0, donc erreur sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $c_revient = ($total / $row["nbpersonnes"]);
    alors que cela fonctionnait avant.
    - le tableau 'Détail de la recette' est vide avec un total à 0
    - le tableau 'Calcul', nombre de personne est vide, coût de revient par personne et TTC indique NAN.

    Pour l'observation oui, un cadre Observations par recette.
    j'ai remis observations dans la fonction getRecettes et ça revient à l'affichage.

  14. #14
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Pour le détail et calcul , observation vides, c'est normal, l'idée de mon code est de cliquer sur une recette dans la liste pour afficher ces informations.
    La partie coût de revient , elle dépend aussi de la recette , si je comprends bien on prend "Sauce Carbonara" , si on a 4 personnes, on aura $total / 4 ?
    Dans ce cas, ajoutez la colonne "observations" dans la requête de getDetailRecette, et remplacez dans le dernier code les lignes 12 à 14 par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $marge = 4;
    $t_details = count($details);
    $nbre_personnes = ($t_details > 0) ? $details[0]['nbpersonnes'] : 0;
    $c_revient = ($nbre_personnes > 0) ? ($total / $nbre_personnes) : 0;
    $ttc = $c_revient * $marge;
    $observations = ($t_details > 0) ? $details[0]['observations'] : '';
    et dans la partie calcul, retirez la boucle et remplacez <td><?php echo $nbpersonne["nbpersonnes"]; ?></td> par <td><?php echo $nbre_personnes ?></td> et dans la partie observation retirez aussi la boucle pour avoir simplement <textarea class="form-control" id="Observations" rows="3"><?php echo htmlspecialchars($observations) ?></textarea>
    Le bienfait n'est jamais perdu

  15. #15
    Membre à l'essai
    Homme Profil pro
    Cuisinier
    Inscrit en
    Août 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Cuisinier

    Informations forums :
    Inscription : Août 2017
    Messages : 51
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Willy_k Voir le message
    La partie coût de revient , elle dépend aussi de la recette , si je comprends bien on prend "Sauce Carbonara" , si on a 4 personnes, on aura $total / 4 ?
    Oui, c'est ça !

    Avec ces changements, j'ai dû m'y perdre quelques parts !
    Mes fonctions sont ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    /*	RECETTES	*/
    	function getRecettes( $connect ) {
    		$query = "
    			SELECT id, recettes
    			FROM recettes
    			ORDER BY recettes ASC";
    		$result = mysqli_query($connect, $query);
     
    		return mysqli_fetch_all( $result, MYSQLI_ASSOC );
    	}
     
    	function getDetailRecette( $connect, $id ) {
        $id = intval($id);
        $query = "
    	SELECT C.categories
           , C.id
           , R.recettes
           , R.nbpersonnes
           , observations
           , I.ingredients
           , quantites
           , I.prix
           , (I.prix * quantites) AS cout
     
    	FROM categories C
    		JOIN recettes R
    		    ON C.id=R.categories_id
    		JOIN composition_recettes CR
    		    ON R.id=CR.recettes_id 
    		JOIN ingredients I
    		    ON I.id=CR.ingredients_id
            WHERE CR.recettes_id = $id
    	ORDER BY ingredients DESC";
        $result = mysqli_query($connect, $query);
         return mysqli_fetch_all( $result, MYSQLI_ASSOC );
    	}
    Mon fichier .php est ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    <?php
    require_once( '../app/table/functions.php' );
    $id = isset($_GET['id']) ? $_GET['id'] : 0;
    $recettes = getRecettes( $connect );
    $details = getDetailRecette( $connect, $id );
    // Calcul du coût de revient
    $total = 0;
    foreach( $details as $row ) {
        $total += $row['cout'];
    }
    $marge = 4;
    $t_details = count($details);
    $nbre_personnes = ($t_details > 0) ? $details[0]['nbpersonnes'] : 0;
    $c_revient = ($nbre_personnes > 0) ? ($total / $nbre_personnes) : 0;
    $ttc = $c_revient * $marge;
    $observations = ($t_details > 0) ? $details[0]['observations'] : '';
    ?>
     
              <h3 align="center">Gestion des recettes</h3>  
              <br />
     
              <!-- Visualiser la liste des recettes -->
              <div class="table-responsive col-md-4">
              <h4 class="sub-header">Liste des recettes</h4>
                  <div class="table-responsive">
                      <table id="recettes" class="table table-bordered table-striped table-hover">
                          <thead>
                              <tr>
                                <th>Recettes</th>
                              </tr>
                          </thead>
                            <?php foreach( $recettes as $recette ) { ?>
                              <tr>
                                <td><a href="?id=<?php echo $recette['id'] ?>"><?php echo $recette["recettes"]; ?></a></td>
                              </tr>
                            <?php } ?>
                      </table>
                  </div>
              </div>
     
              <!-- Visualiser le détail de la recette sélectionnée -->
              <div class="table-responsive col-md-5">
              <h4 class="sub-header">Détail de la recette</h4>
                  <div class="table-responsive">
                      <table  id="composition_recettes" class="table table-striped table-bordered">
                          <thead>
                              <tr>
                                <th>Ingrédients</th>
                                <th width="10%">Quantités</th>
                                <th width="20%">Prix au kg</th>
                                <th width="15%">Coûts</th>
                              </tr>
                          </thead>
                          <tfoot>
                              <tr>
                                <td colspan="3" align="right">Coût de revient de la recette HT - TOTAL</td>
                                <td><span id=""><?php echo round($total, 2) ?></span> &euro;</td>
                              </tr>
                          </tfoot>
                          <tbody>
                            <?php foreach( $details as $row ) { ?>
                              <tr>
                                <td><?php echo $row["ingredients"]; ?></td>
                                <td><span id=""><?php echo $row["quantites"]; ?></span></td>
                                <td><span id=""><?php echo $row["prix"]; ?></span></td>
                                <td><span id=""><?php echo round($row['quantites'] * $row['prix'], 2) ?></span> &euro;</td>
                              </tr>
                            <?php } ?>
                          </tbody>
                      </table>
                  </div>
              </div>
     
              <!-- Effectuer les calculs -->
              <div class="table-responsive col-md-3">
              <h4 class="sub-header">Calculs</h4>
                  <div class="table-responsive-vertical">
                      <table id="recettes" class="table table-stripped table-bordered">
                          <tr>
                            <th width="70%">Nombre de personnes</th> 
                            <td><?php echo $nbre_personnes ?></td>
                          </tr>
                          <tr>
                            <th width="70%">Coût de revient / pers.</th>
                            <td><?php echo round($c_revient, 2); ?></td>
                          </tr>
                          <tr>
                            <th width="70%">Marge</th>
                            <td><?php echo $marge; ?></td>
                          </tr>
                          <tr>
                            <th width="70%">Prix de vente TTC</th>
                            <td><?php echo round($ttc, 2); ?></td>
                          </tr>
                      </table>
                      <div class="group-form">
                          <label>Observations</label>
                          <textarea class="form-control" id="Observations" rows="3"><?php echo htmlspecialchars($observations) ?></textarea>
                      </div>
                  </div>
              </div>
    Et j'obtiens donc ceci :
    Nom : Capture du 2017-09-03 18-25-09.png
Affichages : 107
Taille : 19,8 Ko

  16. #16
    Membre à l'essai
    Homme Profil pro
    Cuisinier
    Inscrit en
    Août 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Cuisinier

    Informations forums :
    Inscription : Août 2017
    Messages : 51
    Points : 14
    Points
    14
    Par défaut
    1 - j'ai ajouté la marge à la base de données, car elle sera différente selon la recette ou selon la catégorie de la recette. (ça sera un autre sujet plus tard)

    2 - je pense que les tableaux vide, il n'aime pas. D'où le côté pas joli de 'Détail de la recette'. Dois-je pré-remplir cette partie comme on le fait pour le tableau 'Calcul' ? Ou alors, est-il possible de rendre la première recette de la liste active ? Comme cela, tous les champs seront remplis !!!

    3 - je m'interroge sur les liens !
    Les liens des recettes, selon ton modèle sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://localhost/Dev/monappli/public/index.php?id=1
    (1 = ID de la sauce Carbonara)

    Dans ma barre d'adresse, j'arrive sur la page 'Liste des ingrédients' avec ce lien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://localhost/Dev/monappli/public/index.php?p=listRecettes
    Donc, si je clique sur une recette, il me renvoie sur ma page d'accueil !

  17. #17
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    La page actuelle a cette url http://localhost/Dev/monappli/public...p=listRecettes c'est ça ? Faudrait faire en sorte d'avoir http://localhost/Dev/monappli/public...Recettes&id=xx (solution temporaire avoir http://localhost/Dev/monappli/public/index.php?p=listRecettes&id=<?php echo $recette['id'] ?> )
    Pour rendre une recette active, dans cette ligne $id = isset($_GET['id']) ? $_GET['id'] : 0;, remplacez 0 par l'Id de la recette par défaut. Pour la marge, mettez la en bas de la variable $c_revient, $marge = ($t_details > 0) ? $details[0]['marge'] : 0; (suppose ici que la colonne s'appelle marge)
    S'il y a des difficultés quand à mes modifs, je suis là pour d’éventuelles explications.
    Le bienfait n'est jamais perdu

  18. #18
    Membre à l'essai
    Homme Profil pro
    Cuisinier
    Inscrit en
    Août 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Cuisinier

    Informations forums :
    Inscription : Août 2017
    Messages : 51
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Cela fonctionne super bien ... ça fait plaisir !!!

    Un grand merci.

    J'avais déjà fait la modification pour la $marge oui.

    Je n'ai plus qu'à voir comment rendre visible la recette qui a été sélectionnée, avec la cellule du tableau en couleur par exemple !!!

    Bonne journée !

  19. #19
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Salut,
    content pour vous.
    Pour la couleur , vous pouvez tester un truc comme ça <tr class="<?php if($recette['id'] == $id): ?>current<?php endif ?>"> , ça va ajouter la classe "current" à la ligne de la recette active (remplacez évidemment "current" par la classe de votre choix) et faites la mise en forme dans votre CSS.

    Bonne continuation.
    Le bienfait n'est jamais perdu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/01/2015, 13h55
  2. vos suggestions pour un meilleur affichage
    Par zendok dans le forum Excel
    Réponses: 4
    Dernier message: 07/07/2009, 13h18
  3. Regroupement de valeur pour une date
    Par Erakis dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/06/2005, 21h00
  4. Recherche de doc pour un affichage animé
    Par Grinta dans le forum Assembleur
    Réponses: 2
    Dernier message: 07/05/2005, 10h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo