ecco la funzione completa:
codice:

function aggiorna_record()  
{   
	$host="localhost";
	$username="root";
	$password="";
	$database="vetture";
	$conn=mysql_connect($host,$username,$password);
	mysql_select_db($database) or die("Impossibile selezionare il database");
    
	// recupero i campi di tipo "stringa"  
    $id=intval($_GET['id']);  
    $data_out=trim($_POST['data_out']);
	$ora_out=trim($_POST['ora_out']);
    $vettura=trim($_POST['vettura']);
	$telaio=trim($_POST['telaio']);
	$km_out=trim($_POST['km_out']);
	$km_in=trim($_POST['km_in']);
	$diff_km=trim($_POST['diff_km']);
	$targa=trim($_POST['targa']);
	$autista=trim($_POST['autista']);
	$passeggero=trim($_POST['passeggero']);
	$destinazione=trim($_POST['destinazione']);
	$sorvegliante=trim($_POST['sorvegliante']);
	$motivazione=trim($_POST['motivazione']);
	$note=trim($_POST['note']);
	$data_in=trim($_POST['data_in']);
	$ora_in=trim($_POST['ora_in']);

    if(get_magic_quotes_gpc())  
    {  
        $id = stripslashes($id);  
        $data_out = stripslashes($data_out);  
        $ora_out = stripslashes($ora_out);
		$vettura = stripslashes($vettura);
		$telaio = stripslashes($telaio);
		$km_out = stripslashes($km_out);
		$km_in = stripslashes($km_in);
		$diff_km = stripslashes($diff_km);
		$targa = stripslashes($targa);
		$autista = stripslashes($autista);
		$passeggero = stripslashes($passeggero);
		$destinazione = stripslashes($destinazione);
		$sorvegliante = stripslashes($sorvegliante);
		$motivazione = stripslashes($motivazione);
		$note = stripslashes($note);
		$data_in = stripslashes($data_in);
		$ora_in = stripslashes($ora_in);
    }  
    $id = mysql_real_escape_string($id);  
    $data_out = mysql_real_escape_string($data_out);  
    $ora_out = mysql_real_escape_string($ora_out);
	$vettura = mysql_real_escape_string($vettura);
	$telaio = mysql_real_escape_string($telaio);
	$km_out = mysql_real_escape_string($km_out);
	$km_in = mysql_real_escape_string($km_in);
	$diff_km = mysql_real_escape_string($diff_km);
	$targa = mysql_real_escape_string($targa);
	$autista = mysql_real_escape_string($autista);
	$passeggero = mysql_real_escape_string($passeggero);
	$destinazione = mysql_real_escape_string($destinazione);
	$sorvegliante = mysql_real_escape_string($sorvegliante);
	$motivazione = mysql_real_escape_string($motivazione);
	$note = mysql_real_escape_string($note);
	$data_in = mysql_real_escape_string($data_in);
	$ora_in = mysql_real_escape_string($ora_in);

    $query = "UPDATE vetture SET id='$id',data_out='$data_out',ora_out='$ora_out',vettura='$vettura',telaio='$telaio',km_out='$km_out',km_in='$km_in',diff_km='$diff_km',targa='$targa',autista='$autista',passeggero='$passeggero',destinazione='$destinazione',sorvegliante='$sorvegliante',motivazione='$motivazione',note='$note',data_in='$data_in',ora_in='$ora_in' WHERE id=$id";  

$query = "UPDATE vetture SET id='$id',
data_out='$data_out',
ora_out='$ora_out',
vettura='$vettura',
telaio='$telaio',
km_out='$km_out',
km_in='$km_in',

diff_km='($km_in-$km_out)',

targa='$targa',
autista='$autista',
passeggero='$passeggero',
destinazione='$destinazione',
sorvegliante='$sorvegliante',
motivazione='$motivazione',
note='$note',
data_in='$data_in',
ora_in='$ora_in' 
WHERE id=$id";
	
$query = "INSERT INTO storico ($id,$data_out,$ora_out,$vettura,$telaio,$km_out,$km_in,$diff_km,$targa,$autista,$passeggero,$destinazione,$sorvegliante,$motivazione,$note,$data_in,$ora_in) SELECT $id,$data_out,$ora_out,$vettura,$telaio,$km_out,$km_in,$diff_km,$targa,$autista,$passeggero,$destinazione,$sorvegliante,$motivazione,$note,$data_in,$ora_in FROM vetture WHERE id!=$id";
	
	$result = mysql_query($query);  
    if (!$result) {  
        die("Errore nella query $query: " . mysql_error());  
    }  
    mysql_close($conn);  
   
    $id = urlencode('Modifica effettuata con successo');  
    header("location: $_SERVER[PHP_SELF]?msg=$id");  
}
Però la stessa cosa me la fa anche dando il comando da mysql tramite prompt, quindi penso sia sbagliata la sintassi...


mysql> UPDATE vetture SET diff_km=('$km_in'-'$km_out') WHERE id=1;
Query OK, 0 rows affected, 2 warnings (0.03 sec)
Rows matched: 1 Changed: 0 Warnings: 0