Problema con php per calcolo costo percentuale

Matteoarm99

Nuovo Utente
20 Mar 2020
6
0
1
Ciao,
Sto realizzando un gestionale che calcola il costo di ricette di pasticceria formate da ingredienti, semilavorati e prodotti finiti.
Avrei bisogno di calcolare il costo percentuale di ciascun ingrediente nella ricetta. Per esempio se metto 300 grammi di crema a 10 €/kg e 500 grammi di pasta frolla a 3 €/kg vorrei calcolare il costo percentuale come: $costo%crema = $prezzocrema * $pesocrema / $pesotot
Ho provato a scrivere questo codice ma non funziona.
PHP:
<table class="table table-striped" id="table_ingredienti">


              <thead class="bg-secondary text-white">

                <tr>

                  <th scope="col">Nome</th>

                  <th scope="col">Prezzo in €/kg</th>

                  <th scope="col">Peso in grammi</th>

                  <th scope="col">Costo</th>

                  <th scope="col">Costo percentuale</th>

                </tr>

              </thead>

              <tbody>

            <tr>

                    <?php

                  if($_GET["tablename"]==="product"){

                  $sql_query = "SELECT * FROM product_in_product, product WHERE product_in_product.id_prod1=136 and product_in_product.id_prod2=product.id";

                  $result = $conn->query($sql_query);

                  if ($result->num_rows > 0) {

                    while ($row=mysqli_fetch_row($result)){

                      //echo "$row[0].',.$row[1].,.$row[2].<p>";

                      $pesotot = "SELECT SUM(quantita) FROM product_in_product, product";

                      $price=(float)$row[6] * $row[2] / 1000;

                      $costoP=$row[6] * $row[2] / $pesotot;

                      echo "<tr>";

                      echo

                        "

                          <th>$row[4]</th>

                          <th>$row[6] €</th>

                          <th>$row[2]</th>

                          <th>$price</th>

                          <th>$costoP</th>";

                      }

                      echo "</tr>";

                  }else

                    echo "<tr>Non è stato inserito nessun elemento in questa</tr>";


                

                  }else if($_GET["tablename"]==="semiproduct"){

                    $sql_query = "SELECT * FROM product_in_semi, semiproduct, product WHERE semiproduct.idSemi=$_GET[id] and product_in_semi.id_semi=semiproduct.idSemi and product_in_semi.id_prod=product.id";

                  $result = $conn->query($sql_query);

                  if ($result->num_rows > 0) {

                    while ($row=mysqli_fetch_row($result)){

                      //echo "$row[0].',.$row[1].,.$row[2].<p>";

                      $pesotot = "SELECT SUM(quantita) FROM product_in_semi, semiproduct, product";

                      $price=(float)$row[11] * $row[2] / 1000;

                      $costoP=$row[11] * $row[2] / $pesotot;

                      echo "<tr>";

                      echo

                        "

                          <th>$row[9]</th>

                          <th>$row[11] €</th>

                          <th>$row[2]</th>

                          <th>$price</th>

                          <th>$costoP</th>";

                      }

                      echo "</tr>";

                  }else

                    echo "<tr>Non è stato inserito nessun elemento in questa</tr>";

                

                  }else if($_GET["tablename"]==="finiteproduct"){

                    $sql_query = "SELECT * FROM product_in_finite, finiteproduct, product WHERE finiteproduct.idFinite=$_GET[id] and product_in_finite.idF=finiteproduct.idFinite and product_in_finite.idP=product.id";

                  $result = $conn->query($sql_query);

                  if ($result->num_rows > 0) {

                    while ($row=mysqli_fetch_row($result)){

                      //echo "$row[0].',.$row[1].,.$row[2].<p>";

                      $pesotot = "SELECT SUM(quantita) FROM product_in_finite, finiteproduct, product";

                      $price=(float)$row[11] * $row[2] / 1000;

                      $costoP=$row[11] * $row[2] / $pesotot;

                      echo "<tr>";

                      echo

                        "

                          <th>$row[9]</th>

                          <th>$row[11] €</th>

                          <th>$row[2]</th>

                          <th>$price</th>

                          <th>$costoP</th>";

                      }

                      echo "</tr>";

                  }else

                    echo "<tr>Non è stato inserito nessun elemento in questa</tr>";

                

                  }

                ?>

                  </tr>

            </tbody>

            </table>
In allegato un'immagine del messaggio d'errore che compare.
Se mi sono spiegato male o necessitate di qualche informazione in più chiedete pure.
Grazie in anticipo a chi mi darà una mano.
 

Allegati

  • tabella-ingredienti.png
    tabella-ingredienti.png
    131,6 KB · Visite: 605
Ultima modifica di un moderatore:
accorperei le 3 select, dei componenti, semilavorati e componenti finiti in modo da ottenere un'unica query
magari inserendoci anche il totale della quantità
(si possono differenziare inserendo in ciascuna select una costante, 0 = totale, 1 = componenti …..)
in questo modo si semplifica molto lo script php
per scriverti la query dovresti pubblicare le 3 tabelle con i relativi campi
e magari un paio di ricette d'esempio
 
Ultima modifica:
accorperei le 3 select, dei componenti, semilavorati e componenti finiti in modo da ottenere un'unica query
magari inserendoci anche il totale della quantità
(si possono differenziare inserendo in ciascuna select una costante, 0 = totale, 1 = componenti …..)
in questo modo si semplifica molto lo script php
per scriverti la query dovresti pubblicare le 3 tabelle con i relativi campi
e magari un paio di ricette d'esempio
Allego le tre tabelle. Le ricette possono essere fatte casualmente intanto. Grazie mille
 

Allegati

  • tabella-finite-in-finite.png
    tabella-finite-in-finite.png
    195,4 KB · Visite: 551
  • tabella-product-in-finite.png
    tabella-product-in-finite.png
    180,3 KB · Visite: 554
  • tabella-semi-in-finite.png
    tabella-semi-in-finite.png
    194,3 KB · Visite: 540
Riguardo l'errore che hai postato, quello "A non-numeric value encountered in" dovrebbe essere dovuto al fatto che $pesotot chetu esprimi in una divisione indica soltanto una query, non un valore, quindi dovresti cambiare questa parte:
PHP:
$peso = "SELECT SUM(quantita) AS peso FROM product_in_finite, finiteproduct, product";
$res = $conn->query($peso);
while ($rowpeso=mysqli_fetch_row($res)){
$pesotot=$rowpeso['quantita']
In questo modo se la query che hai messo è giusta dovresti trovare un valore numerico.
Invece per risolvere il problema " Division by zero" penso ti basti mettere un if davanti alla riga 1179, tipo:
PHP:
if($row[2] != 0){
//riga 1179
}else{
//altre istruzioni
}
 
@Matteoarm99
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
PHP (2).png
quando posti del codice php, oppure la funzione codice dalla barra degli strumenti
box inserisci.png

Inoltre IMPORTANTE: Prima di creare una nuova discussione o di rispondere alle discussioni esistenti ricordati di leggere attentamente il Regolamento del Forum e l'eventuale regolamento specifico della sezione!
Grazie

Per questa volta te lo sistemo io ma mi raccomando per il futuro
 
Allego le tre tabelle. Le ricette possono essere fatte casualmente intanto. Grazie mille
alleghi 3 immagini, e devo riprodurre ricette casualmente,
mi costringi a lavorare più del dovuto per aiutarti,
aiutami tu per primo, postando tabelle ed esempi in formato testo, con cui io possa fare copia incolla senza spendere tempo

ps, poi manca la tabella prodotti richiamata nelle select….
 
Ultima modifica:

Discussioni simili