Visualizzazione risultati 1 fino 1 di 1

Discussione: Controllo e UPDATE tabella

  1. #1
    zyro non è connesso Utente
    Data registrazione
    08-05-2010
    Messaggi
    105

    Predefinito Controllo e UPDATE tabella

    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 ;)
    Ultima modifica di zyro : 08-05-2014 alle ore 20.14.29

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •