errore nel calcolare variabile

ciao a tutti! ho un altra pagina e non riesco a trovare l'errore.

vi riporto la parte di codice della pagina interessata

inserisco qui un problema del codice: i campi su database PREZZO e CAPIENZA possono assumere valori (0,1,2,3,4) e (0,1,2,3,4,5,6,7,8) ma a me serve che quando si calcola la variabile voce4, se il campo prezzo è 0 non moltiplichi per 0, ma bensi per un altro valore. e cosi via in tutti e 5 i casi. stesso discorso per capienza.

function aggiorna_record()
{
   $id = intval($_GET['id']);

        $query = "SELECT soldi,capienza,prezzo FROM fanta_squadra WHERE id = $id";
   $result = mysql_query($query);
        $soldi = mysql_result($result,0,0);
   $capienza = mysql_result($result,0,0);
   $prezzo = mysql_result($result,0,0);

apro la funzione e subito recupero 3 variabili che sono contenute in una tabella del database. i campi capienza e prezzo non dovranno essere modificati. il campo soldi invece si, ma non dall'utente bensi in automatico. soldi è un campo int(11), mentre gli altri due sono campi tiniynt(5).

$par1  = $_POST['par1'];
   $voce1  = $_POST['voce1'];
   $voce2  = $_POST['voce2'];
   $voce3  = $_POST['voce3'];
   $voce4 = $par1*$capienza*$prezzo/1000;
   $incr = $soldi + $voce1 + $voce2 + $voce3 + $voce4;

recupero i quattro valori numerici che vengono inseriti tramite form.

definisco la voce4 come la moltiplicazione di un parametro inserito tramite form con altri due che sono capienza e prezzo recuperati dal database in precedenza.

definisco l'incremento come la somma della voce soldi recuperata da database piu le 3 voci definite prima.

// preparo la query1
   $query1 = "UPDATE fanta_squadra SET
            soldi   = $incr
            WHERE id = $id";
   // invio la query
   $result1 = mysql_query($query1);
   // chiudo la connessione a MySQL
   mysql_close();
   // preparo la query2
   $query2 = "UPDATE db_prova SET
            voce1     = $voce1,
            voce2   = $voce2,
            voce3   = $voce3,
            voce4   = $voce4
            WHERE id = $id";
   // invio la query
   $result2 = mysql_query($query2);
   // chiudo la connessione a MySQL
   mysql_close();

   $messaggio = urlencode('Aggiornamento effettuato con successo');
   header("location: ");//redirect
   exit;
}

preparo,invio e chiudo le due query che mi permettono di modificare i valori e salvarli sul database.

chiudo la funzione aggiorna.

*da notare che il valore inserito come par1 tramite form a me non serve salvarlo sul database ma serve solo per eseguire il calcolo e calcolare la variabile voce4.

function mostra_record()
{
   // mostro un eventuale messaggio
   if(isset($_GET['msg']))
      echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';

   $id = intval($_GET['id']);

   // preparo la query
   $query = "SELECT voce1,voce2,voce3,par1 FROM db_prova WHERE id = $id";

   // invio la query
   $result = mysql_query($query);

   // controllo l'esito
   if (!$result) {
      die("Errore nella query $query: " . mysql_error());
   }

   // controllo che la SELECT abbia restituito un record
   // l'id passato via GET potrebbe essere stato manipolato
   if(mysql_num_rows($result) != 1) {
      die("l'ID passato via GET è errato");
   }

   list($voce1,$voce2,$voce3,$par1) = mysql_fetch_row($result);

   $voce1      = htmlspecialchars($voce1);
   $voce2         = htmlspecialchars($voce2);
   $voce3     = htmlspecialchars($voce3);
   $par1   = htmlspecialchars($par1);

   ?>
   <form name="form_registrazione" method="post" action="">
     <label>voce1:
     <input name="voce1" type="text" />
     </label>
     <label>voce2:
     <input name="voce2" type="text" />
     </label>
     <label>voce3:
     <input name="voce3" type="text" />
     </label>
     <label>parametro1:
     <input name="par1" type="text" />
     </label>
   
     <p>
       <input name="invia" type="submit" value="Invia" />
     </p>
   </form>
   <?
}

i valori delle varie voci che inserisco tramite form sono numerici e vanno poi moltiplicati o sommati.

inoltre il parametro par1 non dovendo essere salvato sul database è neccessario che venga per forza richiamato dal campo par1 sul database?

comunque il problema della pagina è che non calcola la variabile voce4. o meglio la calcola ma con dei valori casuali.

cos'ho sbagliato nella pagina?

grazie per l'aiuto!

inviato 6 anni fa
sinistro
modificato 6 anni fa
X 0 X

   // preparo la query

   $query = "SELECT voce1,voce2,voce3,par1 FROM db_prova WHERE id = $id";

   // invio la query

   $result = mysql_query($query);

   // controllo l'esito

   if (!$result) {

      die("Errore nella query $query: " . mysql_error());

   }

   // controllo che la SELECT abbia restituito un record

   // l'id passato via GET potrebbe essere stato manipolato

   if(mysql_num_rows($result) != 1) {

      die("l'ID passato via GET è errato");

   }

   list($voce1,$voce2,$voce3,$par1) = mysql_fetch_row($result);

   $voce1      = htmlspecialchars($voce1);

   $voce2         = htmlspecialchars($voce2);

   $voce3     = htmlspecialchars($voce3);

   $par1   = htmlspecialchars($par1);

   ?>

   <form name="form_registrazione" method="post" action="">

     <label>voce1:

     <input name="voce1" type="text" />

     </label>

     <label>voce2:

     <input name="voce2" type="text" />

     </label>

     <label>voce3:

     <input name="voce3" type="text" />

     </label>

     <label>parametro1:

     <input name="par1" type="text" />

     </label>

     <p>

       <input name="invia" type="submit" value="Invia" />

     </p>

   </form>

   <?

}

La query che fai la trovo abbastanza inutile, ricavi dei parametri che restano la, non fanno niente.

Per dir la verità tutta la funzione mostra_record non ne comprendo la logica...

Di conseguenza ti rispondo a :

inoltre il parametro par1 non dovendo essere salvato sul database è neccessario che venga per forza richiamato dal campo par1 sul database?

No, se non ti serve a niente nel database perchè l'hai creata?

Tu il calcolo di voce4 lo fai qui:

$par1  = $_POST['par1'];

$voce4 = $par1*$capienza*$prezzo/1000;

Non può assumere valori casuali, il tutto dipende dai valori di $par1, $capienza e $prezzo.

Hai fatto dei controlli sul valore che assumono tali variabili?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

come richiamo dei parametri che non servono a niente?!

i parametri voce1,voce2,voce3 vengono inseriti nel form e salvati su db e inoltre contribuiscono ad aggiornare la variabile soldi.

par1 allora posso toglierlo dal db e lasciare che venga inserito direttamente da form.

cmq i valori di capienza possono essere da 0 a 8 mentre i valori di prezzo da 0 a 4.

la variabile voce4 però va a caso. qualsiasi siano i valori impostati.

tra l'altro io quei valori da 0 a 8 e 0 a 4 dovrei convertirli in altri valori prima di moltiplicarli. solo che con l'array ho provato e non sono riuscito. c'è 1 altra soluzione?

risposto 6 anni fa
sinistro
X 0 X

come richiamo dei parametri che non servono a niente?!

i parametri voce1,voce2,voce3 vengono inseriti nel form e salvati su db e inoltre contribuiscono ad aggiornare la variabile soldi.

Scusa riguarda il codice di mostra_record(). Non serve a niente...come è che i valori delle variabili vengono inseriti nel form?

cmq i valori di capienza possono essere da 0 a 8 mentre i valori di prezzo da 0 a 4.

la variabile voce4 però va a caso. qualsiasi siano i valori impostati.

tra l'altro io quei valori da 0 a 8 e 0 a 4 dovrei convertirli in altri valori prima di moltiplicarli. solo che con l'array ho provato e non sono riuscito. c'è 1 altra soluzione?

Non può essere che va a caso. Questa è l'espressione che usi:

$voce4 = $par1*$capienza*$prezzo/1000;

Il valore di $voce4 non può cambiare a caso se non in funzione dell'espressione che hai indicato.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

la funzione mostra può bastare così?

function mostra_record()
{

   ?>
   <form name="form_registrazione" method="post" action="">
     <label>voce1:
     <input name="voce1" type="text" />
     </label>
     <label>voce2:
     <input name="voce2" type="text" />
     </label>
     <label>voce3:
     <input name="voce4" type="text" />
     </label>
     <label>parametro1:
     <input name="par1" type="text" />
     </label>
   
     <p>
       <input name="invia" type="submit" value="Invia" />
     </p>
   </form>
   <?
}

ho eliminato par1 dal database che tanto non serviva a nulla.

la variabile voce4 non varia a caso. ho scoperto cosa fa.

in pratica somma il valore che è presente sul database.

forse perchè non l'ho richiamata tramite una query.

posso svolgere un'altra query sotto quella precedente?

        $query = "SELECT voce 4FROM db_prova WHERE id = $id";
   $result = mysql_query($query);
        $voce4 = mysql_result($result,0,0);
risposto 6 anni fa
sinistro
modificato 6 anni fa
X 0 X

La tua funzione mostra_record alla fine può essere ridotta a come l'hai scritta.

la variabile voce4 non varia a caso. ho scoperto cosa fa.

in pratica somma il valore che è presente sul database.

E quando avviene questa somma? Ci hai per caso fornito solo spezzoni di codici?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

posto il codice come l'ho modificato, eliminando la parte in eccesso nella funzione mostra.

l'ho riscritto bene, eccolo

<?php
// richiamo il file di configurazione
require 'config.php';

// richiamo lo script responsabile della connessione a MySQL
require 'connect.php';

if($_POST && isset($_GET['id']))
{
   aggiorna_record();
}
elseif(isset($_GET['id']))
{
   mostra_record();
}
else
   mostra_lista();

function mostra_lista()
{
   // mostro un eventuale messaggio
   if(isset($_GET['msg']))
      echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';

   // preparo la query
   $query = "SELECT id,nome FROM fanta_entrate";

   // invio la query
   $result = mysql_query($query);

   // controllo l'esito
   if (!$result) {
      die("Errore nella query $query: " . mysql_error());
   }

   echo '
   <table border="1">
      <tr>
         <th>Id</th>
         <th>Nome</th>
         <th>&nbsp;</th>
      </tr>';

   while ($row = mysql_fetch_assoc($result))
   {
      $id   = htmlspecialchars($row['id']);
      $nome = htmlspecialchars($row['nome']);

      // preparo il link per la modifica dei dati del record
      $link = $_SERVER['PHP_SELF'] . '?id=' . $row['id'];

      echo "<tr>
            <td>$id</td>
            <td>$nome</td>
            <td><a href=\"$link\">aggiorna</a></td>
         </tr>";
   }

   echo '</table>';

   // libero la memoria di PHP occupata dai record estratti con la SELECT
   mysql_free_result($result);

   // chiudo la connessione a MySQL
   mysql_close();
}

function aggiorna_record()
{
   $id = intval($_GET['id']);

   // recupero la variabile soldi,capienza,prezzo
        $query = "SELECT soldi,capienza,prezzo FROM fanta_squadra WHERE id = $id";
   $result = mysql_query($query);
        $soldi = mysql_result($result,0,0);
   $capienza = mysql_result($result,0,0);
   $prezzo = mysql_result($result,0,0);

   // recupero campi del form
   $par1  = $_POST['par1'];
   $sponsor  = $_POST['sponsor'];
   $premi  = $_POST['premi'];
   $cessioni  = $_POST['cessioni'];

   $biglietteria = $par1*$capienza*$prezzo/1000;

   $incremento = $soldi + $sponsor + $premi + $cessioni + $biglietteria;
   // preparo la query1
   $query1 = "UPDATE fanta_squadra SET
            soldi   = $incremento
            WHERE id = $id";
   // invio la query
   $result1 = mysql_query($query1);
   // chiudo la connessione a MySQL
   mysql_close();
   // preparo la query2
   $query2 = "UPDATE fanta_entrate SET
            sponsor     = $sponsor,
            premi      = $premi,
            cessioni   = $cessioni,
            biglietti   = $biglietteria
            WHERE id = $id";
   // invio la query
   $result2 = mysql_query($query2);
   // chiudo la connessione a MySQL
   mysql_close();

   $messaggio = urlencode('Aggiornamento effettuato con successo');
   header("location: ");//redirect
   exit;
}
function mostra_record()
{

   ?>
   <form name="form_registrazione" method="post" action="">
     <label>sponsor:
     <input name="sponsor" type="text" />
     </label>
     <label>premi:
     <input name="premi" type="text" />
     </label>
     <label>cessioni:
     <input name="cessioni" type="text" />
     </label>
     <label>parametro1:
     <input name="par1" type="text" />
     </label>
   
     <p>
       <input name="invia" type="submit" value="Invia" />
     </p>
   </form>
   <?
}
?>

ho azzerato la variabile biglietti nel database. ho provato a inserire come par1 il valore 1.

dato che biglieteria è definita come par1*capienza*prezzo/1000 e dato ke capienza e prezzo sono entrambi 1 dovrebbe venire 1*1*1/1000=0,001 invece mi è uscito 1,165.

ho eseguito di nuovo il tutto, senza azzerare biglietti in database, non ho cambiato capienza e prezzo, e ho rimesso par1=1.

e mi cambia il risultato :| adesso fa 1,246

riesegue 1,336 :|

non capisco ?_?

risposto 6 anni fa
sinistro
modificato 6 anni fa
X 0 X

Fa l'eco delle variabili in gioco e vedi che valori hanno nel tuo database e che valori assumono prima di eseguire la funzione matematica.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

legge la variabile soldi

e poi fa diventare le variabili prezzo e capienza = alla variabile soldi.

in pratica legge la prima e da a tutte e tre il valore della prima

risposto 6 anni fa
sinistro
X 0 X

Per forza, il problema sta qui:

$result = mysql_query($query);

$soldi = mysql_result($result,0,0);

$capienza = mysql_result($result,0,0);

$prezzo = mysql_result($result,0,0);

Che stupido a non accorgemene prima, scusami...

Allora prova così:

$result = mysql_query($query);
$soldi = mysql_result($result,0,0);
$capienza = mysql_result($result,0,1);
$prezzo = mysql_result($result,0,2);
risposto 6 anni fa
Mario Santagiuliana
X 0 X

ok perfetto!

grazie anke x questa ;)

risposto 6 anni fa
sinistro
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda