problema modifica dati tabella con radio button

Ciao a tutti,

Ho creato un form per la modifica dei dati di una tabella sulla falsa riga dell'esempio riportato nella Vs lezione n°9 - Corso PHP/MySQL (aggiornamento dei dati).

Il problema é che non riesco ad aggiornare il  campo fin_account_tm (TINYINT(4)) al quale sono abbinati 3 radio button, praticamente quando cambio un opzione succede che ricevo sempre il valore 0 (nessun valore nella tabella del form).

Non so se qualcuno può darmi un aiuto?

Grazie in anticipo.

Amos

<code>

<?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']))

{

   edit_fin_account();

}

elseif(isset($_GET['id']))

{

   show_fin_account();

}

else

   show_fin_accounts();

function show_fin_accounts()

{

   // mostro un eventuale messaggio

   if(isset($_GET['msg']))

      echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';

   // preparo la query

   $query = "SELECT * FROM fin_accounts ORDER BY fin_account_code";

   // invio la query

   $result = mysql_query($query);

   // controllo l'esito

   if (!$result) {

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

   }

   $fin_account_tm_arr=array('&nbsp;','Operativo','Manovra','Tesoreria');

   echo '<h1 align="center">Lista codici finanziari<h1>

   <table border="1" align="center">

      <tr>

         <th>ID</th>

         <th>Codice</th>

         <th>Nome</th>

         <th>Tipo movimento</th>

         <th>&nbsp;</th>

      </tr>';

   while ($row = mysql_fetch_assoc($result))

   {

      $id                 = htmlentities($row['id']);

      $fin_account_code            = htmlentities($row['fin_account_code']);

      $fin_account_name         = htmlentities($row['fin_account_name']);

      if(!$fin_account_code)     $fin_account_code = '&nbsp;';

      if(!$fin_account_name)      $fin_account_name = '&nbsp;';

      $fin_account_tm   = $fin_account_tm_arr[$row['fin_account_tm']];

      // preparo il link per la modifica dei dati del record

      $link = $_SERVER['PHP_SELF'] . '?id=' . $row['id'];

      echo "<tr>

            <td>$id</td>

            <td>$fin_account_code</td>

            <td>$fin_account_name</td>

            <td>$fin_account_tm</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 edit_fin_account()

{

   // recupero i campi di tipo "stringa"

   $fin_account_code         = trim($_POST['fin_account_code']);

   $fin_account_name      = trim($_POST['fin_account_name']);

   // verifico se devo eliminare gli slash inseriti automaticamente da PHP

   if(get_magic_quotes_gpc())

   {

      $fin_account_code         = stripslashes($fin_account_code);

      $fin_account_name      = stripslashes($fin_account_name);

   }

   // effettuo l'escape dei caratteri speciali per inserirli all'interno della query

   $fin_account_code            = mysql_real_escape_string($fin_account_code);

   $fin_account_name         = mysql_real_escape_string($fin_account_name);

   //recupero gli altri campi del form

   $fin_account_tm         = isset($_POST['fin_account_tm']) ? intval($_POST['fin_account_tm']) : 0;

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

   // verifico la presenza dei campi obbligatori

   if(!$fin_account_code || !$fin_account_name)

   {

      $messaggio = urlencode("Non hai inserito i campi codice e/o nome: campi obbligatori");

      header("location: $_SERVER[PHP_SELF]?id=$id&msg=$messaggio");

      exit;

   }

   // preparo la query

   $query = "UPDATE fin_accounts SET

            fin_account_code = '$fin_account_code',

            fin_account_name = '$fin_account_name',

            fin_account_tm     = $fin_account_tm

            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 show_fin_account()

{

   // 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 * FROM fin_accounts 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($id,$fin_account_code,$fin_account_name,$fin_account_tm) = mysql_fetch_row($result);

   $fin_account_code        = htmlspecialchars($fin_account_code);

   $fin_account_name      = htmlspecialchars($fin_account_name);

   $fin_account_tm      = htmlspecialchars($fin_account_tm);

   ?>

   <h1 align="center">Modifica codici FIN</h1>

   <form name="form_edit_fin_account" method="post" action="" align="center">

   <table border="1" align="center">

     <tr><td><label><b>Codice:</b></label></td>

     <td><input name="fin_account_code" type="text" value="<?echo $fin_account_code?>" /></td></tr>

     <tr><td><label><b>Nome:</b></label></td>

     <td><input name="fin_account_name" type="text" value="<?echo $fin_account_name?>" /></td></tr>

     <tr><td><label><b>Tipo movimento:</b></label></td>

     <td><label><input type="radio" name="tipo_movimento" value="1" <?if($fin_account_tm==1) echo 'checked="checked"'?>/>Operativo</label><label><input type="radio" name="tipo_movimento" value="2" <?if($fin_account_tm==2) echo 'checked="checked"'?>/>Manovra</label><label><input type="radio" name="tipo_movimento" value="3" <?if($fin_account_tm==3) echo 'checked="checked"'?>/>Tesoreria</label></td></tr>

     </table>

     <table align="center"><tr><td colspan=\"2\" align="center" valign="middle"><input name="invia" type="submit" value="Invia" /></td></tr></table>

     </form>

     <?

}

?>

</code>

inviato 9 anni fa
amosse
X 0 X

fai un debug inserendo nel codice degli echo, ad esempio per monitorare il valore di $_POST['fin_account_tm'] e di $fin_account_tm  nella funzione edit_fin_account()

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Ho messo gli eco per i debug, sotto i gruppi di codice contraddistinti dai seguenti commenti:

// effettuo l'escape dei caratteri speciali per inserirli all'interno della query

<code>

echo "valore".($_POST['fin_account_tm']);

</code>

risultato: valore

//recupero gli altri campi del form

<code>

echo "valore.$fin_account_tm";

</code>

risultato: valore.0

Quindi $_POST['fin_account_tm'] é vuoto non ha ricevuto nessun valore.

Allora il problema é nella funzione precedente show_fin_account!

Ho provato a mettere degli echo sotto le tre variabili (htmlspecialchars) che si trovano sotto la funzione list

<code>

echo($fin_account_code);

echo($fin_account_name);

echo($fin_account_tm);

</code>

Sono tutte visualizzate, anche $fin_account_tm se provi  subito dopo l'inserimento di un record, ma dopo la prima modifica ti rimanda sempre il valore 0, ed i radio button non mantengono più alcun valore.

Se ho ben capito il problema risiede nella parte di codice dei radio button.

Non sarà mica l'utilizzo della tabella all'interno del form?

Se provo le modifiche ai radio nutton con il codice come da vs lezione n°9 funziona tutto senza problemi.

Non saprei?

Ciao

Amos

ps:

uso -  php 5.2.1. - MySQL 5.0.22 - Apache 2.2.4

risposto 9 anni fa
amosse
X 0 X

Ciao,

l'errore potrebbe essere perché il nome dei radiobutton sono > name="tipo_movimento" < mentre dovrebbero essere > name="fin_account_tm" < visto che usi la seguente riga di codice...

$fin_account_tm         = isset($_POST['fin_account_tm']) ? intval($_POST['fin_account_tm']) : 0;

Non ho avuto modo di testare  ;)

Fammi sapere se funziona!

Buona giornata

Zeta

risposto 9 anni fa
zeta80
X 0 X

Ciao e grazie per la risposta, scusami ma l'ho vista solo adesso.

Avevi ragione non mi ero accordo che il nome del radio button era sbagliato, l'ho modificato ed adesso funziona.

Grazie mille, ti giuro avevo messo in cassetta il problema, perché ci avevo perso così tanto tempo senza risultato.

Grazie di nuovo e alla prossima. :)

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