Newsgroup: it.comp.www.php
Titolo: modifica database dinamica

<?php
include "./common_db.inc";
$link_id = db_connect('ium');
   if(!$link_id) error_message(sql_error());
if ($_GET[num] > $_GET["numeroposti"]) {
  echo "Non ci sono abbastanza posti";
  } else {
   $volo = $v[volo];
   echo $_GET[num]." posti sono stati prenotati, grazie";
   mysql_query("UPDATE aereo SET posti = posti - $_GET[num] WHERE volo = 
   $volo, $link_id");
}
?>
queste righe dovrebbero far sì che nel caso di prenotazione eccessiva 
l'utente venga avvisato.. e nel caso di prenotazione normale il campo 
"posti" della tabella "aereo" venga riscritto con i nuovi parametri
ma non mi riscrive niente! quando ricarico la pagina e seleziono lo 
stesso volo mi ricompaiono esattamente gli stessi posti di prima..
perchè??

 perchè??
Perche' non hai dato retta a me!
:-P
Cmq. studia le "" che hai messe nella query (e metti il benedetto
mysql_error(), stai perdendo piu' tempo a postare nel NG che per mettere una
riga in piu' per risolvere subito i tuoi problemi).

    $volo;", $link_id);
Ti sei sbagliato nello scrivere la query:
hai messo $_GET[num] senza apici nč singoli nč doppi: $_GET['num']
hai messo i doppi apici dopo il link al database invece che alla fine
della query, e non hai messo il punto e virgola alla fine della query.
O in alternativa, memorizza i posti in una variabile a parte:
$seats=$_GET['num'];
mysql_query(" quelo che ti pare posti = (posti-$seats) ecc;",$link)
Ciao
Cla

 della query, e non hai messo il punto e virgola alla fine della query.
Giusto per gli apici.. invece per il punto e virgola gli funziona anche
senza...
Comunque ha ragione Jurgen sul fatto di mettere un bel mysql_error()
Io uso una funzioncina.. utile in fase di test.. che stampa anche la query
(nel caso fosse dinamica aiuta  molto vedere qual è la query effettivamente
utilizzata e che ha creato l'errore).
function query($query) {
     $risultati = mysql_query ($query)
     or die ("
     Errore nella riga: ".__LINE__."<br>
     Numero errore: ".mysql_errno()."<br>
     Errore generato da MySQL: ".mysql_error()."<br>
     <br>
     $query<br>
     ");
     return $risultati;
}

 }
Ottimo metodo.
Lo cambierei poco. La __LINE__ sara' sempre uguale se non passi la riga
nella quale fai la query.
per esempio:
 function query($query, $line) {
      $risultati = mysql_query ($query)
      or die ("
      Errore nella riga: ".$line."<br>
      Numero errore: ".mysql_errno()."<br>
      Errore generato da MySQL: ".mysql_error()."<br>
      <br>
      $query<br>
      ");
      return $risultati;
 }
[...]
query($q,__LINE__);
Quando poi lo metti online si potrebbe cambiare in un colpo (per evitare di
visualizzare possibili exploit).

 visualizzare possibili exploit).
Sì questo lo faccio già.. almeno la stampa della query la commento sempre...
se invece la cosa è più definitiva sostituisco il messaggio di die con
qualcosa di generico tipo.. "si è verificato un errore".

 volta in modo esplicito?
Purtroppo no. Bisognerebbe avere accesso allo Stack per implementare una
cosa simile. Cosi' si puo' fare un backtracking. Ma per ora non esiste. Non
sarebbe neanche troppo difficile di inserire una cosa simile nei sorgenti
del PHP (tipo una variabile $_STACK).
una alternativa al posto di modificare query():
php.ini:
  log_errors=on
  display_errors=off
  error_log=/var/log/php_errors