Mi sembra logico.
Te esegui una query di INSERT prima di andare a vedere se c'è disponibilità o meno di biglietti.
Nel tuo codice fai due query, sia inutili sia sbagliate nella cronologia di esecuzione:
Codice PHP:
// QUERY 1
$dati = mysql_query("
SELECT utenti. *, eventi. *
from utenti, eventi
WHERE utente_id='".$_SESSION['username']."'
AND event_id='".$_POST['id']."'")
or die( mysql_error() . "
" . $sql) ;
// QUERY 2
mysql_query("
insert into ordini (numero, totale, event_id, utente_id)
values ('$numero', '$totale', '$event_id', '$utente_id')")
or die( mysql_error() . "
" . $sql) ;
Poi esegui le due query che ti ho suggerito io.
Rimaneggiando un po', dovresti fare qualcosa del genere.
Codice PHP:
<?php
session_start();
$_SESSION['username'];
include("config.php");
$id_evento = $_POST['id']; // ID dell'evento da FORM
$numero = $_POST['numero']; // biglietti richiesti da FORM
mysql_connect($db_host,$db_user,$db_password,$db_name) or die ("non riesco a connettermi");
mysql_select_db("$db_name") or die ("Non riesco a selezionare il database");
if(empty($_POST["id"])){
echo"Non hai selezionato nulla";
}
else{
// controllo quanti biglietti sono disponibili
$sql = "
SELECT disponibilita
FROM eventi
WHERE event_id= $id_evento
";
$query = mysql_query($sql);
$disponibilita = mysql_result($query, 0, 'disponibilita');
mysql_free_result($query);
if ($disponibilita == 0) {
echo "<h3>Spiacente, ma l'evento è sold-out e le prevendite sono chiuse.</h3>";
} elseif ($disponibilita < $numero) {
echo "
<h3>Spiacente, ma sono disponibili solo $disponibilita biglietti.</h3>
Torna alla form se vuoi comprarli te
";
} else {
// metto l'ordine nel DB
mysql_query("
insert into ordini (numero, totale, event_id, utente_id)
values ('$numero', '$totale', '$event_id', '$utente_id')")
or die( mysql_error() . "
" . $sql) ;
// aggiorno le disponibilità
$newdisponibilita = $disponibilita - $numero;
mysql_query("UPDATE eventi SET disponibilita = '$newdisponibilita' where event_id=$id ")
or die(mysql_error());
}
}
?>
Spero che ora ti sia chiara la logica.
Peraltro noto una cosa: le variabili che passi dalla form (ad esempio $totale) ricordati di recuperarle con $_POST come ho scritto io ad inizio dello script.