[php] datumreeks in DB campingsite *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Graag jullie hulp voor het volgende:

Ik ben bezig met een campingsite. (check http://gathering.tweakers.net/forum/list_messages/1252088/ voor de plannen.)

Nu ik bezig ben met de ontwikkeling stand ik bij de datums voor beschikbaarheid. Even een korte uitleg:
Ik heb de volgende tabel:
CampingCaravanPersonenReserveringFoto
Camping_id
Camping_plaats
Camping_omschijving
Camping_URL1
Camping_URL2
Caravan_id
Camping_id
Eigenaar_id
Max_personen
Caravan_omschijving
Caravan_prijs
actief (0=nee, 1=ja)
personen_id
Naam
Adres
Postcode
Plaats
Email
Rekeningnummer
plaats_rekeningnummer
Categorie (0=eigenaar, 1=huurder)
Caravan_id
Klant_id
Begin
Eind
Foto_id
Camping_id
Caravan_id
Foto_URL
Foto_width
Foto_height


Wat moet er gebeuren? Er wordt een caravan aangemeld. Er worden datums/weken opgegeven van beschikbaarheid (weken van vrijdag t/m vrijdag). Op het ‘aanmeld formulier’ kunnen de eigenaren dus aangeven welke week(en) ze hun caravan willen aanbieden. Deze hoeven, zo als jullie begrijpen, niet achter een volgend te zijn.
Om dit in een webformpje te plaatsen lijkt mij de handigste optie een checkbox. Je krijgt dan een opsomming zo als dit:

[]vrijdag 4 januari t/m vrijdag 11 januari 2008
[]vrijdag 11 januari t/m vrijdag 18 januari 2008
[]enz.

Hier heb ik het eerste probleem. Kan dit in een php lusje gestopt worden. Ik bedoel, ik kan wel voor 2 á 3 jaar alle datums keurig in zitten te voeren, maar dat we het de applicatie laten doen lijkt mij wat handiger. Ik heb op internet zitten kijken en zoeken, maar ik kan niet vinden wat ik kan gebruiken. Uit verschillende kalender/agenda scripts heb ik code proberen te halen maar ik kom er niet uit. (heeft ook te maken omdat weken van vrijdag t/m vrijdag lopen). Is hier een oplossing voor?

Als alle regels aangemaakt zijn dan moet de verwerking komen. Alle datums die NIET opgegeven zijn moeten in de tabel reservering gezet worden als ‘klant’ SYSTEEM. Deze zijn dus ‘bezet’ en zo doende niet te boeken. Deze methode is mij geadviseerd in de eerder genoemde post.

Hier dient zich het tweede probleem voor. De waarde die de checkboxjes hebben, moet verwerkbaar zijn. Ik denk zo iets als 04/01/2008-11/01/2008. Is dat handig om zo in de DB te zetten.
Voor de verwerking krijg je dan zo iets stel ik me voor: (niet foutloos maar het gaat om het idee)

PHP:
1
2
3
4
5
6
7
8
9
10
11
if (isset($beschikbaar['04/01/2008-11/01/2008'])){
//niets doen
}else{
//reserveering door SYSTEEM laten maken op 04/01/2008-11/01/2008
}

if (isset($beschikbaar['11/01/2008-18/01/2008'])){
//niets doen
}else{
//reserveering door SYSTEEM laten maken op 11/01/2008-18/01/2008
}


En de datums die ik hier noem moeten dan ook weer in een lusje gezet worden, anders kan je alsnog alles in zitten voeren.

Een heel verhaal is het geworden. Kunnen jullie me weer op weg helpen? Ik heb zomaar het vermoeden dat ik door de bomen het bos niet meer ziet…

Bedankt!

NB: [php] vergeten in titel, sorry

[ Voor 0% gewijzigd door Verwijderd op 07-12-2007 22:36 . Reden: foute titel ]


Acties:
  • 0 Henk 'm!

Verwijderd

Let wel: Ik zeg niet, dat je niet hebt gezocht en je zal de applicatie vast zelf willen maken, maar....
Eerste hit op Google: www.webhostingtalk.nl/nl-...erveringssysteem-php.html (en die verwijst weer naar een andere site (php-residence). Ik ben verder geen expert in reserveringssystemen ofzo. Die zal straks wel langs komen, gok ik. Het eerst was mij opviel was echter, dat je een periode als een "string" in je database wou stoppen (tenminste, daar leek het op)
Dus je zei: 04/01/2008-11/01/2008 als 1 record in de DB stoppen. Dat zou ik persoonlijk niet doen.
Met de tabel Reservering ben je volgens mij goed op weg, maar kijk maar even naar dat php-residence script.

Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 10:08

Spockz

Live and Let Live

Wat je zou kunnen doen is per checkbox twee hidden fields te genereren met de begin en einddatum erin. Die kan je dan in je reserveringen tabel stoppen.

Zoals underdog al zegt, het lijkt mij niet verstandig om het als 1 record in de db te stoppen.

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

  • Mad Max
  • Registratie: Augustus 2002
  • Laatst online: 14:09

Mad Max

Altijd nieuwsgierig

Verwijderd schreef op zaterdag 08 december 2007 @ 08:40:
.... (en die verwijst weer naar een andere site (php-residence).
.....
Met de tabel Reservering ben je volgens mij goed op weg, maar kijk maar even naar dat php-residence script.
Hee, een voorbeeld. Ik ben altijd geïnteresseerd in een stukje code, Alleen leest italiaans zo vervelend en zeker wanneer niet wordt ingesprongen. Een voorbeeldje uit de code waar ik denk dat iets met reservering en datum wordt gedaan.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if ($verificare != "NO") {
for ($num1 = $idinizioperiodo; $num1 <= $idfineperiodo; $num1 = $num1 + 1) {
$prenotazioni=esegui_query("select * from $tableprenota where iddatainizio <= $num1 and iddatafine >= $num1");
$numprenotazioni = numlin_query($prenotazioni);
$rigasettimana = esegui_query("select * from $tableperiodi where idperiodi = '$num1' ");
if ($numprenotazioni >= $numappartamenti) {
$verificare = "NO";
$inizioperiodopieno = risul_query($rigasettimana,0,datainizio);
$inizioperiodopieno_f = formatta_data($inizioperiodopieno,$stile_data);
$fineperiodopieno = risul_query($rigasettimana,0,datafine);
$fineperiodopieno_f = formatta_data($fineperiodopieno,$stile_data);
echo mex("$parola_La $parola_settimana dal",$pag)." $inizioperiodopieno_f ".mex("al",$pag)." $fineperiodopieno_f ".mex("è pien$lettera_a",$pag).".<br>";
} # fine if ($numprenotazioni >= $numappartamenti)
} # fine for $num1
} # fine if ($verificare != "NO")


Dus als de TS zelf verder wil bouwen, misschien is het volgende dan bruikbaar...

In de start-uitleg schrijf je dat je met vaste weken werkt, van vrijdag tot vrijdag. Kies dan ook weeknummers, iets als jaar-week (2007-49). Een array van week 1 tot week 52 of 53 is zo gemaakt. Een datum daarbij is ook zo gevonden. Kies goed of de vrijdag de dag IN de week of VOOR de week is, daarna de datum PLUS of MIN 4 dagen van de maandag afhalen. Zo heb je de weekstring al snel opgebouwd.

Afhankelijk van hoeveel weken je vooruit wil tonen haal je de weekreserveringen op en laat je een gereserveerde week niet zien (of checkbox onbruikbaar) in je opsomming.

Bij het verwerken van de form met checkboxjes kijk je per week nog een keer in de database of de week nog steeds beschikbaar is (voor als anderen stiekum eerder waren) en maak je de reservering.

Soms f0t0gr@@f (7D + 10-22 f3.5-4.5 + 17-55 f2.8 IS + 35 f1.4L + 85 f1.2 II L + 70-200 f2.8 IS L + 580EX )


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
Verwijderd schreef op vrijdag 07 december 2007 @ 22:30:
[...]
Om dit in een webformpje te plaatsen lijkt mij de handigste optie een checkbox. Je krijgt dan een opsomming zo als dit:

[]vrijdag 4 januari t/m vrijdag 11 januari 2008
[]vrijdag 11 januari t/m vrijdag 18 januari 2008
[]enz.

Hier heb ik het eerste probleem. Kan dit in een php lusje gestopt worden. Ik bedoel, ik kan wel voor 2 á 3 jaar alle datums keurig in zitten te voeren, maar dat we het de applicatie laten doen lijkt mij wat handiger. Ik heb op internet zitten kijken en zoeken, maar ik kan niet vinden wat ik kan gebruiken. Uit
PHP:
1
2
3
4
5
6
7
8
$currentDate = new DateTime('2008-01-04');
$endDate     = new DateTime('2009-01-04');

while($currentDate < $endDate) {
  echo $currentDate -> format('Y-m-d') . ' t/m '; 
  $currentDate      -> modify('+1 week');
  echo $currentDate -> format('Y-m-d') . ' <br />';
}


In mijn opinie de mooiste oplossing :) Heeft als nadeel dat'ie het weinig-gedocumenteerde dateTime object gebruikt, maar dat is gelukkig vrij logisch opgezet.

En zoals hierboven gezegd, ik zou beschikbaarheid opslaan in een tabel met 4 kolommen: [int] id, [date] startDate, [date] endDate, [int] accommodationId. Je kan eventueel ook met weeknummers gaan werken, maar op deze manier kun je MySQL datumfuncties gebruiken die je veel werk gaan besparen en hou je bovendien de optie open om later ook reserveringen van bijvoorbeeld maandag tot vrijdag te kunnen toestaan.

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

Verwijderd

ff mezelf quoten :P
...Ik ben verder geen expert in reserveringssystemen ofzo. Die zal straks wel langs komen, gok ik....
Ik wist, dat ik een soortgelijk onderwerp eerder gezien had. (vanmorgen deed alleen de search het ff niet). Zie [mysql] reserveringen in tabel selecteren. Zie ook [SQL] Database opzet en goede queries. Hopenlijk heb je er iets aan :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor de handvaten!

ik heb nu het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
//startdatum 2008
$startdatum2008 = new DateTime('2008-01-04');

$i=1;
while($i <= 52 ) {
    echo "<input name=\"Beschikbaar[]\" type=\"checkbox\" id=\"wk".$i."-2008\" value=\"wk".$i."-2008\" />&nbsp;\n";
    echo $startdatum2008 -> format('d-m-Y') . " t/m ";
    echo "<input type=\"hidden\" name=\"wk".$i."-2008-start\" value=\"".$startdatum2008 -> format('d-m-Y')."\" />";
    $startdatum2008      -> modify('+1 week');
    echo $startdatum2008 -> format('d-m-Y') . " <br />";
    echo "<input type=\"hidden\" name=\"wk".$i."-2008-eind\" value=\"".$startdatum2008 -> format('d-m-Y')."\" />";
    $i++;
}


De weergave gaat goed, nu nog kijken of we het kunnen verwerken. Wordt vervolgt...

[ Voor 3% gewijzigd door Verwijderd op 10-12-2007 09:30 ]


Acties:
  • 0 Henk 'm!

  • Mad Max
  • Registratie: Augustus 2002
  • Laatst online: 14:09

Mad Max

Altijd nieuwsgierig

Misschien kun je je reservering in een 'calender' stoppen, met de mcal-functies van php.
http://nl.php.net/manual/nl/ref.mcal.php

Soms f0t0gr@@f (7D + 10-22 f3.5-4.5 + 17-55 f2.8 IS + 35 f1.4L + 85 f1.2 II L + 70-200 f2.8 IS L + 580EX )

Pagina: 1