Salve amici,
volevo un vostro parere su questo script che ho scritto perché c'è una parte che non funziona e al momento non ne vengo a capo.
Breve spiegazione sul funzionamento.
ho un DB con 3 tabelle:
menu (dove inserisco gli eventi disponibili)
tmp_ordine (entra in azione quando un utente prenota un dato evento, mi serve per raccogliere i dati prima che l'utente confermi la prenotazione via mail)
ordine (tabella definitiva dove verrà inserito l'ordine finale una volta confermato via mail dall'utente)
La funzione di questo script è quella, una volta ricevuta conferma via mail, di verificare prima di tutto che il numero di "biglietti" (quant) disponibili per l'evento sia superiore oppure uguale ai biglietti che l'utente vuole prenotare. Se ci sono abbastanza biglietti confermo l'ordine, diminuisco il quantitativo disponibile (perché ovviamente sono stati prenotati dei biglietti) sposto i dati da tmp_ordine a ordine e cancello tmp_ordine.
Ecco lo script
Codice PHP:
<?php
class NewOrder
{
public $conn;
protected function DbConnect() // ci connettiamo al DB
{
include "config.php";
$this->conn = mysql_connect($db_host,$db_user,$db_pass) OR die("Impossibile connettersi al database");
mysql_select_db($db_name, $this->conn);
}
public function Verify() //con questa funzione invieremo i dati dalla tabella temporanea a quella definitiva
{
$sql = "SELECT * FROM tmp_ordini WHERE key_control='$_GET[key]'";
$this->DbConnect();
$res = mysql_query($sql,$this->conn);
if($row = mysql_fetch_array($res))
{
$id = $row['id'];
$cognome = $row['cognome'];
$nome = $row['nome'];
$mail = $row['mail'];
$telefono = $row['telefono'];
$paese = $row['paese'];
$title = $row['title'];
$data = $row['data'];
$quant = $row['quant'];
$sq_menu = "SELECT * FROM menu WHERE title='$title'";
$this->DbConnect();
$res_menu = mysql_query($sq_menu,$this->conn);
$row_menu = mysql_fetch_array($res_menu);
$quant_menu = $row_menu['quant'];
if ($quant <= $quant_menu) // se il quantitativo prenotato è inferiore o uguale a quello disponibile
{
$query0="UPDATE menu SET quant=quant-'$quant' WHERE title='$title'"; //allora scaliamo il quantitativo disponibile
mysql_query($query0,$this->conn);
$query1="INSERT INTO ordini (cognome, nome, mail, telefono, paese, title, data, quant) VALUES ('$cognome', '$nome', '$mail', '$telefono', '$paese', '$title', '$data', '$quant')"; // inseriamo il record in ordine
mysql_query($query1,$this->conn);
$query2="DELETE FROM tmp_ordini WHERE id='$id'"; // e cancelliamo il record temporaneo
mysql_query($query2,$this->conn);
mysql_close($this->conn);
echo "Prenotazione confermata con successo!";
}
else
{
echo "La prenotazione non può essere confermata! Il numero dei Menù ancora disponibili è inferiore a quelli da te prenotati oppure sono esauriti!";
}
}
else
{
echo "La prenotazione non può essere confermata!";
}
}
}
?>
La parte finale dello script funziona bene, sposta i dati e cancella quelli vecchi. Il problema è che non mi effettua il controllo su $quant, o meglio mi da sempre risultato negativo anche se sono disponibili più biglietti di quelli prenotati, quindi non fa partire lo script.
Se invece provo a cambiare (<=) con (!=) lo script funziona ma invece di scalare i biglietti totali del dato evento del numero prenotato mi porta a 0 tutti i valori quant presenti nella tabella menu.
Forse un occhio esterno può notare qualcosa che mi è sfuggito.
EDIT: mi sono accorto che non so se ho inserito il post nella sezione giusta, visto che nella descrizione ho letto che si riferisce ai forum, in caso avessi sbagliato vi chiedo di spostare la discussione se potete. Attendo comunque un parere, sto facendo qualche test ma ancora non ho trovato il motivo dell'errore
EDIT2: dopo innumerevoli test ho trovato l'errore. Lo script è assolutamente perfetto, l'errore risiedeva nella trasmissione dei dati a una delle tabelle che non convertiva correttamente i caratteri speciali, per cui quando cercavo di confrontarli non mi dava alcun risultato perché erano diversi. Non immaginate che gioia sia quando riesci a sistemare il problema ;)