• User Newbie

    Verifica disponibilità di un record in determinate date.

    Buon giorno,
    vi pongo il mio quesito:
    dovrei verificare la disponibilità alla prenotazione di un mezzo per un determinato periodo. Nel codice che vi posto io creo un form di insermento dati, dove l'utente prova a fare la prenotazione e se il mezzo risulta già occupato mi restituisce una stringa tipo" Ducato risulta già assegnato dal ... al ..." e se il mezzo risulta libero mi inserisce la prenotazione. Il problema è che anche se il mezzo risulta libero mi torna il messaggio di occupato. Vorrei sapere dove sbaglio.

    [PHP]<?php
    mysql_select_db($database_connessione, $connessione);
    $editFormAction = $_SERVER['PHP_SELF'];
    $id=$_POST['id'];
    $dal=$_POST['dal'];
    $al=$_POST['al'];
    ?>
    <body>
    <?php if(!isset($id) && !isset($al) && !isset($dal)){// se non sono presenti mostrami il form
    ?>
    <form id="form1" name="form1" method="POST" action="<?php echo $editFormAction; ?>">
    <label>ID
    <input type="text" name="id" id="id" />
    </label>
    <label>Dal <input type="text" name="dal" id="dal" /> </label>
    <label>al <input type="text" name="al" id="al" /> </label>
    <label>Invia <input type="submit" name="invia" id="invia" value="Invia" /> </label>
    </form>
    <?php
    }
    else { $query = "SELECT * FROM calendario_lavori WHERE id_mezzi='$id' AND (" . $dal . " <= dal AND " . $dal .">= al) OR (" . $al . " <= dal AND " . $al. ">= al)";
    $results = mysql_query($query) or die (mysql_error());
    if ($results){
    echo($id." è occupato dal: ".$dal." al: ".$al." " );}
    else{$query_ins="INSERT INTO calendario_lavori (id_mezzi, dal, al) VALUES ('$id', '$dal', '$al')";
    $results_ins = mysql_query($query_ins) or die (mysql_error());
    echo ("ok");}

    }
    ?>[/PHP]

    Grazie per l'aiuto.


  • User Attivo

    Ciao, la funzione mysql_query () invia una query, e restituisce, in caso ci siano record che soddisfino la clausola WHERE, un resourcead.
    Quindi se vai a testare il risultato di tale funzione risulterà sempre true, tranne se l'sql risulta sintatticamente sbagliata.
    Per fare ciò che serve si potrebbe eseguire un conteggio dei record restituiti, es:
    $results = mysql_query($query) or die (mysql_error());
    $num = mysql_num_rows($results);
    if ($num==0){
    echo($id." è occupato dal: ".$dal." al: ".$al." " );
    }else{
    $query_ins="INSERT INTO calendario_lavori (id_mezzi, dal, al) VALUES ('$id', '$dal', '$al')";
    $results_ins = mysql_query($query_ins) or die (mysql_error());
    echo ("ok");}
    }


  • User Newbie

    Ciao, grazie per aver risposto...
    ho provato, ma ottengo il risultato opposto. Adesso inserisce i dati anche quando non dovrebbe. Hai qualche altra soluzione? Te ne sarei grato.:gthi:


  • User Attivo

    Mi devi scusare, bisogna invertire il contenuto dell'if con il contenuto dell'else, ovvero:
    if ($num==0){
    echo($id." è occupato dal: ".$dal." al: ".$al." " );
    }else{
    $query_ins="INSERT INTO calendario_lavori (id_mezzi, dal, al) VALUES ('$id', '$dal', '$al')";
    $results_ins = mysql_query($query_ins) or die (mysql_error());
    echo ("ok");}
    }
    diventa:
    if ($num==0){
    $query_ins="INSERT INTO calendario_lavori (id_mezzi, dal, al) VALUES ('$id', '$dal', '$al')";
    $results_ins = mysql_query($query_ins) or die (mysql_error());
    echo ("ok");
    }else{
    echo($id." è occupato dal: ".$dal." al: ".$al." " );
    }

    Questo perchè la query di insert va effettuata quando non ci sono record relativi alla query di selezione rispetto al periodo.


  • User Newbie

    Avevo già provato a mettere la condizione $num > 0 ottenendo lo stesso risultato... ma continua a non funzionare.

    Adesso mi chiedo, ma può essere che sia la query SELECT ad avere problemi?


  • User Attivo

    Se fosse sbagliata la select ti stamperebbe l'errore relativo, visto che c'è die(mysql_error());


  • User Newbie

    Problemi a livello di logica, che non trova niente... Secondo me dovrebbe andare bene per la ricerca che deve fare, secondo te?


  • User Attivo

    Posta la struttura della tabella calendario_lavori (potresti postare la query per la creazione)
    così eseguo qualche test.


  • User Newbie

    Grazie per l'aiuto...

    [PHP]CREATE TABLE IF NOT EXISTS calendario_lavori (
    id_calendario int(3) NOT NULL AUTO_INCREMENT,

    id_mezzi int(3) NOT NULL,

    desc_cantiere varchar(50) NOT NULL,

    dal date NOT NULL,

    al date NOT NULL,

    conferma int(1) NOT NULL,

    PRIMARY KEY (id_calendario),

    KEY id (id_calendario)
    ) TYPE=MyISAM AUTO_INCREMENT=1 ;[/PHP]


  • User Attivo

    Allora ci sono in effetti ci sono 2 errori nella query di SELECT, uno è la mancanza di apici quando esegui il confronto con le date, mentre l'altro è relativo al confronto delle date, prova con la query seguente:
    $query = "SELECT * FROM calendario_lavori
    WHERE id_mezzi='$id'
    AND (" . $dal . " <= dal AND
    " . $dal . ">= al) OR
    (" . $al . " <= dal AND " . $al . ">= al)";


  • User Newbie

    niente da fare...:x


  • User Attivo

    Allora prova a postare il codice che hai aggiornato e posta anche i dati che utilizzi per fare il test.