modifica campo

ciao a tutti! ho seguito attentamente le istruzioni del file di modifica di uno o più campi.

ho scritto questo codice, lo riporto sotto, che funziona correttamente tranne che in un punto.

<?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,soldi,tettoia FROM fanta_squadra";

   // 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>Nome</th>
         <th>Soldi</th>
         <th>Tettoia</th>
         <th>&nbsp;</th>
      </tr>';

   while ($row = mysql_fetch_assoc($result))
   {
      $nome = htmlspecialchars($row['nome']);
      $soldi = intval($row['soldi']);
      $tettoia_arr = array('no','si');
      $tettoia = $tettoia_arr[$row['tettoia']];

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

      echo "<tr>
            <td>$nome</td>
            <td>$soldi</td>
            <td>$tettoia</td>
            <td><a href=\"$link\">modifica</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()
{
   // recupero gli altri campi del form
   $soldi = intval($_POST['soldi']);
   $tettoia   = intval($_POST['tettoia']);
   
   //definisco la variabile di costo
   $costo    = 1000000;
   $resto = $soldi - $costo;

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

   // preparo la query
   $query = "UPDATE fanta_squadra SET
            soldi   = $resto,
            tettoia = '$tettoia'

            WHERE id = $id";

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

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

   // chiudo la connessione a MySQL
   mysql_close();

   $messaggio = urlencode('Aggiornamento effettuato con successo');
   header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
}

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 tettoia FROM fanta_squadra 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($tettoia) = mysql_fetch_row($result);

   ?>
   <form name="form_tettoia" method="post" action="">
       <label>tettoia
       <select name="tettoia">
         <option value="1" <?if($tettoia==1) echo 'selected="selected"'?>>si</option>
      </select>
       </label>
     </p>
     <p>
       <input name="invia" type="submit" value="Invia" />
     </p>
   </form>
   <?
}
?>

in pratica il valore tettoia viene effettivamente aggiornato a 1, però la variabile soldi viene calcolata in modo errato.

infatti $resto viene restituita sempre uguale a -$costo

questo mi fa pensare che viene letta come nulla e non riesco a capire il perchè.

fate conto che il campo soldi sul database è un int(11) ed è pari a un valore numerico di 300000000

l'ho richiamata male oppure è qualcos'altro?

come posso risolvere l'errore?

grazie

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

Nella funzione aggiorna_record recuperi le variabili inviate con un form tramite array post suppondo:

   // recupero gli altri campi del form

   $soldi = intval($_POST['soldi']);

   $tettoia   = intval($_POST['tettoia']);

   //definisco la variabile di costo

   $costo    = 1000000;

   $resto = $soldi - $costo;

Il problema sta su $soldi.

Puoi farci vedere il codice html del form?

Prova a fare un echo della variabile $soldi a vedere che valore ha assunto.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

il codice della pagina è tutto quello dato che è una pagina di prova.

sto solo generando il codice e poi dopo provvederò ad inserirlo nelle pagine!

cmq con un echo '$soldi';

dopo averla definita $soldi = intval($_POST['soldi']);

il risultato della stampa è $soldi

quindi a quanto pare $soldi perde il valore numerico e diventa $soldi

risposto 6 anni fa
sinistro
X 0 X

Come hai fatto l'echo?

E scusa, l'unico form html che vedo è questo:

   ?>

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

       <label>tettoia

       <select name="tettoia">

         <option value="1" <?if($tettoia==1) echo 'selected="selected"'?>>si</option>

      </select>

       </label>

     </p>

     <p>

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

     </p>

   </form>

   <?

}

?>

Non capisco dove tu passi il valore soldi ($_POST['soldi']).

risposto 6 anni fa
Mario Santagiuliana
X 0 X

ah forse ho capito dov'è il problema.

il mio intento era quello di poter dare all'utente la possibilità di aggiornare la variabile 'tettoia',

ma di aggiornare automaticamente la variabile 'soldi' nel caso in cui venga aggiornata la variabile 'tettoia'

non è possibile fare una cosa cosi?

risposto 6 anni fa
sinistro
X 0 X

Si, è possibile...

Ma devi recuperare tutte le variabili, o che ti sono inviate o da database...

risposto 6 anni fa
Mario Santagiuliana
X 0 X

comunque ho provato a inserire questo

   $soldi = intval($_POST['soldi']);
   echo $soldi;

dopo la graffa di apertura della funzione mostra_record()

e il risultato che stampa è 0

quindi qualche problema a leggere quel valore c'è.

come posso risolvere?

risposto 6 anni fa
sinistro
X 0 X

quindi qualche problema a leggere quel valore c'è.

come posso risolvere?

O invii tramite il tuo form un input che sia "soldi" o recuperi il valore di "soldi" dal database...non ci sono tante alternative...

Non è un problema di lettura del valore, semplicemente non esiste nel tuo form e di conseguenza nel tuo $_POST.

risposto 6 anni fa
Mario Santagiuliana
X 0 X
O invii tramite il tuo form un input che sia "soldi" o recuperi il valore di "soldi" dal database...non ci sono tante alternative...

come posso fare in entrambi i casi a livello di codice?

e tu quale mi consiglieresti?

comunque la variabile soldi non dovrebbe poter essere modificata dagli utenti

risposto 6 anni fa
sinistro
X 0 X
comunque la variabile soldi non dovrebbe poter essere modificata dagli utenti

Allora la recuperi dal database (farla passare tramite una pagina html, anche se in forma non visibile all'utente è comunque una possibilità in più di modifica).

Prova così:

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

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

   // recupero campi del form
   $tettoia   = intval($_POST['tettoia']);
   
   //definisco la variabile di costo
   $costo    = 1000000;
   $resto = $soldi - $costo;

   // preparo la query
   $query = "UPDATE fanta_squadra SET
            soldi   = $resto,
            tettoia = '$tettoia'

            WHERE id = $id";

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

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

   // chiudo la connessione a MySQL
   mysql_close();

   $messaggio = urlencode('Aggiornamento effettuato con successo');
   header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
}
risposto 6 anni fa
Mario Santagiuliana
modificato 6 anni fa
X 0 X

ok perfetto! grazie mille davvero!

gli ho inserito ancora giusto un paio di if in modo che controlli altri due casi e funziona alla grande :D

ah un'ultima cosa solo:

se anzichè definire la variabile costo come un valore fisso impostato nella pagina, volessi richiamarla da una tabella del database diversa dalla tabella da cui richiamo i soldi, è possibile farlo vero?

basta che inserisco un'altra query che mi richiami quel valore giusto?

risposto 6 anni fa
sinistro
X 0 X

Si, dipende tutto da come imposti le query e dai database che usi.

Ciao

risposto 6 anni fa
Mario Santagiuliana
X 0 X

ok, grazie ancora!

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