Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555

    Bloccare istruzione se variabile uguale a zero

    Salve ragazzi,
    il problema è questo. Ho un form che permette di effettuare degli acquisti di biglietti per determinati eventi. Nel form ho un campo chiamato "biglietti totali", una select che permette di acquistare sino a 5 biglietti per ogni singolo utente. Un altro campo chiamato disponibilità che se è uguale a zero mi stampa "non c'è più disponibilità".

    Il tutto passa ad un file di controllo in php. IN questo file ho questa query di aggiornamento del database.

    Codice PHP:
    <?php
    //imposto la query che aggiorna il database con il nuovo numero di biglietti disponibili

    $newdisponibilita $disponibilita $numero;

    while (
    $newdisponibilita>0
    {
    include(
    "config.php");
    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");

    mysql_query("UPDATE eventi SET disponibilita = '".$newdisponibilita."'") or die(mysql_error());
    }

    ?>
    Cosa succede? che la nuova disponibilità è data dalla disponibilità iniziale (totale) meno il numero di acquisti effettuato dall'utente collegato in quel momento. Mi piacerebbe che la variabile disponibilità non possa mai scendere al di sotto dello zero, cioè che giunta a zero non popoli più il database.

    Come fare?

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    L'ho elaborata così:

    Codice PHP:
    while ($disponibilita>=0
    {
    $newdisponibilita $disponibilita $numero;

    include(
    "config.php");
    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");

    mysql_query("UPDATE eventi SET disponibilita = '".$newdisponibilita."' where event_id='".$_POST['id']."'") or die(mysql_error());

    Ma non so se è corretto. Mi piacerebbe che, una volta che la disponibilità è pari a zero, se un utente prova ad acquistare tramite form gli esca la scritta "non puoi effettuare ulteriori acquisti, disponibilità terminata".

  3. #3
    Scusa eh.... a lume di naso:

    while ($disponibilita>=0)
    Significa: fintanto che la variabile è maggiore di zero, lo script deve eseguire le query che stanno all'interno dello WHILE.
    Significa che se la disponibilità è 13, la query di UPDATE viene eseguita 13 volte. No??
    A prescindere che scritta così, comunque il ciclo non dovrebbe funzionare perché non è mostrata alcuna condizione che ti permette di uscire dal ciclo stesso!

    Secondo me, prima devi estrarre la quantità di biglietti residui dal DB, quindi fare un controllo del tipo:

    • C'è disponibilità;
    • La disponibilità è comunque superiore al numero di biglietti richiesti;
    • non c'è disponibilità.

    Mi sembra più logico e funzionale usare delle condizioni piuttosto di un ciclo.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Potresti farmi un esempio terra terra di che tipo di codice utilizzeresti?

  5. #5
    Semplicemente prova a mettere un "IF" invece del "WHILE", IF(se) disponibilita' > biglietti richiesti allora aggiorna il db; ELSEIF(altrimenti se) disponibilita' < biglietti richiesti echo "Nun ce stanno li bietti sei arrivato tardi"

  6. #6
    Per DavidePad
    Si. Intendevo qualcosa del genere.
    Divertenti i commenti, soprattutto!!!

    Per marckhh
    Prima devi andare a controllare la disponibilità dei biglietti nel DB (con una query di select, magari), poi confronti il numero con la richiesta del tuo utente.

    Se proprio ne hai necessità, ti mando un po' di codice.

    Codice PHP:
    $sql "
    SELECT disponibilita_biglietti 
    FROM tabella_relativa
    WHERE evento = 'identificativo_evento'
    "
    ;

    $query mysql_query($sql);
    $disponibilita mysql_result($query0'disponibilita_biglietti');
    mysql_free_result($query):

    if (
    $disponibilita == 0) {
    echo 
    "
    <h3>Spiacente, ma l'evento &egrave; sold-out e le prevendite sono chiuse.</h3>"
    ;
    } elseif (
    $disponibilita $richiesta) {
    echo 
    "
    <h3>Spiacente, ma sono dispobilii solo 
    $disponibilita biglietti.</h3>Torna alla form se vuoi comprarli te";
    } else {
    // i biglietti ci sono procedere con la compravendita
    // qiu metti il codice che a te serve

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  7. #7
    Aveva chiesto qualcosa terra terra.....piu terra terra di cosi......
    Cmq anche io ho lo stesso problema pero devo riuscire ad interfacciarlo con i dati su paypal.......cioe' una volta che l'acquirente ha pagato tramite paypal il totale viene aggiornato; ovviamente prima viene fatto un controllo se la disponibilita' e' maggiore della richiesta....altrimenti "non ce stanno!!!!!"

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Grazie per le risposte ragazzi. Nel pomeriggio testerò il codice e vi farò sapere che viene fuori.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Allora, ho impostato la query ma non funziona, ossia, continua ad eseguire la query di update al database, effettuando pertanto l'ordine anche se non c'è disponibilità di biglietti.

    Per farvi capire meglio posto tutto il codice:

    Codice PHP:
    <?
    session_start
    ();
    $_SESSION['username'];
    include(
    "config.php");
    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{
    $dati mysql_query("SELECT utenti. *, eventi. * from utenti, eventi WHERE utente_id='".$_SESSION['username']."' AND event_id='".$_POST['id']."'") or die( mysql_error() . "
    $sql) ;
    $array mysql_fetch_array($dati);
    }
    ?>

    <?php
    $event_id 
    $array['event_id'];
    $utente_id $array['utente_id'];
    $disponibilita $array['disponibilita'];
    $numero htmlentities(strip_tags($_POST["numero"]));
    $totale htmlentities(strip_tags($_POST["totale"]));

    mysql_query("insert into ordini (numero, totale, event_id, utente_id) values ('$numero', '$totale', '$event_id', '$utente_id')") or die( mysql_error() . "
    $sql) ;
    $ultimo_id mysql_insert_id();
    ?>
    <table width="400" bgcolor="#f5f5f5" align="center" cellpadding="0" cellspacing="5" border="0"> 
    <tr> 
    <td> 
    <div align="center"> 
    <h1><font color="#000000" size="4">Dettaglio acquisti</font></h1> 
    </div>
    </td></tr> 
    </table> 

     
    <table width="400" bgcolor="#FFFFFF" align="center" cellpadding="0" cellspacing="5" border="0"> 
    <tr><td> 
    <?php
    //imposto la query che aggiorna il database con il nuovo numero di biglietti disponibili
    $sql "
    SELECT disponibilita
    FROM eventi
    WHERE event_id='"
    .$_POST['id']."'
    "
    ;

    $query mysql_query($sql);
    $disponibilita mysql_result($query0'disponibilita');
    mysql_free_result($query);

    $newdisponibilita $disponibilita $numero;

    if (
    $disponibilita == 0) {
    echo 
    "
    <h3>Spiacente, ma l'evento &egrave; sold-out e le prevendite sono chiuse.</h3>"
    ;
    } elseif (
    $disponibilita $numero) {
    echo 
    "
    <h3>Spiacente, ma sono dispobilii solo 
    $disponibilita biglietti.</h3>Torna alla form se vuoi comprarli te";
    } else {
    // i biglietti ci sono procedere con la compravendita
    // qiu metti il codice che a te serve
    mysql_query("UPDATE eventi SET disponibilita = '".$newdisponibilita."' where event_id='".$_POST['id']."'") or die(mysql_error());

    }


    ?>
    L'ultima parte è quella che mi avete suggerito, adattata al mio database. Ma è evidente che sto sbagliando qualcosa

    L'ultima query viene eseguita sempre e comunque. Questo quello che mi stampa se procedo all'acquisto dal form:


    Dettaglio acquisti


    Spiacente, ma sono dispobili solo -13 biglietti.
    Torna alla form se vuoi comprarli te

    Numero biglietti:
    2

    Totale:
    40

    Esegue sempre e comunque l'inserimento dell'ordine in database, come si vede dalla riga qui sopra. 2 Biglietti per un totale di 40 euro. Invece dovrebbe bloccarsi se non trova disponibilità, ossia se disponibilità = a zero oppure se numero (che sarebbe la richiesta di biglietti da parte dell'utente) supera la disponibilità.
    Acquistato il 09-03-2008 alle 17:10

    In poche parole esegue l'if, ma poi continua con l

  10. #10
    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($query0'disponibilita'); 
    mysql_free_result($query); 

    if (
    $disponibilita == 0) {
    echo 
    "<h3>Spiacente, ma l'evento &egrave; 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.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.