provo a riportare il codice intero, non so se vi possa essere d'aiuto
Codice PHP:
<?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,variabile FROM db_prova";
// 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>variabile</th>
<th> </th>
</tr>';
while ($row = mysql_fetch_assoc($result))
{
$nome = htmlspecialchars($row['nome']);
$soldi = intval($row['soldi']);
$variabile_arr = variabile('no','si');
$variabile = $variabile_arr[$row['variabile']];
// 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>$variabile</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 = $_POST['soldi'];
$soldi = (int)$_POST['soldi'];
$variabile = intval($_POST['variabile']);
//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 = '$variabile'
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 variabile 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($variabile) = mysql_fetch_row($result);
?>
<form name="form_variabile" method="post" action="">
<label>variabile
<select name="variabile">
<option value="1" <?if($variabile==1) echo 'selected="selected"'?>>si</option>
</select>
</label>
</p>
<p>
<input name="invia" type="submit" value="Invia" />
</p>
</form>
<?
}
?>
nel database 'variabile' è definita come tinyint(2) e ridefinendola come array visualizza 0--> no, 1--> si
invece la variabile 'soldi' è definita come int(11).
lo scopo di tutto è che l'utente possa modificare la variabile, passando da 0 (cioè no) a 1 (cioè si). e questo funziona.
nel passaggio da 0 a 1 deve modificare, oltre 'variabile' anche 'soldi', facendolo diventare soldi-costo. cosa che non fa perchè fa ritornare sempre un valore pari a -costo, leggendo quindi 'soldi' come valore nullo, anche se non lo è.
risolto il problema di aggiornamento di 'soldi' in teoria dovrei aggiungere ancora una condizione che mi permetta di effettuare la modifica di 'variabile' da 0 a 1 solo nel caso soldi sia >= di costo, in modo che non mi possa ritornare un valore negativo alla fine.