- Home
- Categorie
- Coding e Sistemistica
- Coding
- Verifica disponibilità di un record in determinate date.
-
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.
-
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");}
}
-
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.
-
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.
-
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?
-
Se fosse sbagliata la select ti stamperebbe l'errore relativo, visto che c'è die(mysql_error());
-
Problemi a livello di logica, che non trova niente... Secondo me dovrebbe andare bene per la ricerca che deve fare, secondo te?
-
Posta la struttura della tabella calendario_lavori (potresti postare la query per la creazione)
così eseguo qualche test.
-
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]
-
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)";
-
niente da fare...:x
-
Allora prova a postare il codice che hai aggiornato e posta anche i dati che utilizzi per fare il test.