Ik heb een reserveringsscript gemaakt voor een hotel hier in kan een kamer geboekt worden de gegevens zoals naam soortkamer en adres word gewoon in de database gezet alleen nu is de bedoeling dat er voor bijv. bij de aankomstdatum 23/05/2012 maar 5 reserveringen in de tabel gezet kunnen worden en als er dan weer 1 kamer vrij komt deze kamer dan weer 1x geboekt kan worden. hier onder voeg ik mijn stuke script ff toe.

<?php
// variabelen initialiseren:
$db= mysql_select_db('groep5', mysql_connect('localhost', 'groep5', '')) or die (mysql_error());

if($_SERVER['REQUEST_METHOD'] == 'POST'){
if($_POST['naam'] == '' OR $_POST['adres'] == ''){
$fout = 'Niet alles is ingevuld!';
}

if(isset($fout)){
echo 'Er is een fout opgetreden: <span style="font-weight: bold; color: red;">'.$fout.'</span>';
}else{

$id = ($_POST['id']);
$naam = ($_POST['naam']);
$adres = ($_POST['adres']);
$postcode = ($_POST['postcode']);
$woonplaats = ($_POST['woonplaats']);
$telefoon = ($_POST['telefoon']);
$email = ($_POST['email']);
$datuma = ($_POST['datuma']);
$datumv = ($_POST['datumv']);

$sql = 'INSERT INTO business (naam, adres, postcode, woonplaats, telefoon, email, datuma, datumv) VALUES ("'.$naam.'","'.$adres.'","'.$postcode.'","'.$woonplaats.'","'.$telefoon.'","'.$email.'","'.$datuma.'","'.$datumv.'");';
$result = mysql_query($sql);

if($result){
header("Location: index.html");
}else{
echo 'Er is een fout opgetreden bij het toevoegen aan de database!';
}
}
}else{
?>
ja maar de manier waarop jij het nu doet is alleen 24 mei dus dan moet je wel between gebruiken om te kijken of deze dag dat je wilt reserveren tussen 24-25 mei ligt voor de betreffende kamer. want elke kamer kan toch verschillend geboekt worden neem ik aan ;)
@Reshadd, ja idd waarom zou ik geen kamer voor 1 nacht kunnen boeken? Zat zakenmensen die maar voor 1 dag ergens zijn hoor.

Ik denk dat de database structuur en tabellen anders moeten als je het echt goed en efficient wilt doen.

Een tabel voor.
Hotels, kamers, users, reserveringen, afzeggingen, facturatie en dan gewoon met JOIN's werken.
ja maar een dag.. wat houd dat in? toch niet alleen 24 mei.. 1 nacht boeking is meestal 24mei tm 25 mei.. of ben ik nou niet helder aan het nadenken?
Dat weet ik niet of je helder aan het nadenken bent, wat zit er in je koffie? ;)

Klopt als je bij bestaande site's 1 nacht boekt is dat altijd van dag tot dag dus idd 1 nacht is 24-06 tot 25-06 bijvoorbeeld.

En dan moet hij dus WEL de BETWEEN gebruiken, ik had alleen gereageert op zijn laatste bericht, waar hij wilde filteren op 5 kamers max.
en daarom gaf ik hem de BETWEEN linkje omdat ik laatst nog zown script heb gemaakt om te reserveren het ging toen om restaurant tafels en niet om kamers maar het principe is hetzelfde. :)
Reshadd farid op 24/05/2012 12:22:13

ja maar een dag.. wat houd dat in? toch niet alleen 24 mei.. 1 nacht boeking is meestal 24mei tm 25 mei.. of ben ik nou niet helder aan het nadenken?

Je bent inderdaad niet helemaal helder. 1 nacht boeken kan maar voor 1 dag de kamer blokken, niet voor 2. Dus als je inchecked op 24 mei en uitchecked op 25 mei dan moet een boeking op 24 mei niet meer mogelijk zijn, maar op de 25e wel. Als je nu een 'BETWEEN 24 mei AND 25 mei' zou doen dan worden zowel 24 als 25 meegenomen in die query. Dat klopt dus niet.

yep daar heb je gelijk in erwin.. maar let wel op dat je natuurlijk niet alleen met datums werkt maar ook met tijden want in een hotel is het meestal uitchecken voor 12 inchecken voor 4 ofzo en als je naar voorbeeld query kijkt staat er toch echt

SELECT kamer FROM tabel WHERE datum BETWEEN start-verblijfdata AND eind-verblijfdata ( ik heb het er niet duidelijk bijgezet maar data houd dus ook in de tijden )

dus in je query moet je natuurlijk wel zeggen 25 mei en hoelaat..


Tijd is nergens voor nodig. Er kan maar 1 persoon de kamer reserveren voor een nacht en check in en check out tijden zijn normaal vast. Wil je langer blijven heb je een extra nacht aan je broek.
Het enige waar de datums nut voor hebben is om te kijken tussen welke datums die kamer gereserveerd/bezet is. Of het nu 1 nacht of 100 nachten zijn, een nacht valt altijd tussen 2 dagen in :D

Daarom boekt men 1 nacht van dag tot dag, als je een reis boekt staat er ook iet voor niets 11 dagen (10 nachten), etc.

Echter denk ik dat hij toch eerst eens zijn DB structuur opnieuw zal moeten maken wil hij alle info op de juiste manier opslaan en gebruiken.

Reageren