03. oktober 2011 - 12:37Der er
16 kommentarer og 2 løsninger
Booking system - Gode ideér/råd
Jeg er igang med at lave et lille booking system til byggeplads, hvor der kun er en aflæsningsplads. Det skal så være muligt at reservere pladsen i et givent tidsrum. Jeg har fået lavet den del hvor man reservere pladsen. Man angiver et ankomst- og afgangstidspunkt, samt lidt andet info. Tiden er styre i tidsintervaller af 15 min.
Nu er jeg så igang med at lave en lille oversigt, hvor man se hvornår pladsen er ledig. Hertil ville jeg høre om der var nogen der havde et kvikt indspark til hvordan det kunne laves smart.
Jeg havde tænkt mig den skulle løbe fra dags dato, og så en uge frem, hvor man så selvfølgelig skulle kunne gå længere frem i tiden. Jeg overvejer at lave det som en tabel, med celler for hvert kvarter. Der så undersøger om den pågældende celle ligger inden for en booking periode. Umiddelbart syntes jeg bare det lyder som en frygtelig masse tabel opslag. Muligvis det kunne gøres på smartere måde?
Du kommer nok til at fortælle lidt mere om dit bookingsystem. Hvordan angiver folk ankomst og afgangstidspunkt o.s.v.? Er det på en hjemmeside med en html formular? Hvordan opbevarer du så de modtagne oplysninger? Er det i en mysql tabel? Hvis ja, hvilke felter har du i tabellen? Hvis nej, hvordan så?
Det er lavet som en hjemmeside. Hvor man booker via en html-formular. Afgang- og ankomsttidspunkter vælges via rullemenuer (<option>) med faste talværdier. De 2 tidspunkter samles så til et tidspunkt af typen: '0000-00-00 00:00:00' Der indsættes i en MySQL-tabel hvor tidspunkter er af typen: 'timestamp'
Du vil lave en oversigt over de data du har om reserveringer af aflæsningspladsen, så du kan se, hvornår den er ledig. Men det er stadig ikke tydeligt hvad det er for data. Det oplagte ville vel være hvis din mysql tabel havde, mindst, felter for id, firma, startstidspunkt, og sluttidspunkt. For eksempel
Aflæsningsplads id firma start slut 1 firma1 2011-09-21 10:00:00 2011-09-21 11:15:00 2 firma2 2011-09-23 12:45:00 2011-09-23 13:15:00
Hvis det er sådan du bevarer dataerne, hvordan ved du så, at tidsrummene ikke overlapper? Er der en validering der afviser en reservation hvis starttidspunktet eller sluttidspunktet ligger mellem start og slut tidspunkterne for en anden reservering?
Men nu siger du, at tidspunkternd der indføres i html formularen samles til et tidspunkt. Vil det sige, at du kun bevarer starttidspunktet i tabellen og så giver folk et fast tidsrum, måske et kvarter? Således, at hvis et job tager længere, så må der reserveres to eller tre tidsrum, for eksempel:
Aflæsningsplads id firma start slut 1 firma1 2011-09-21 10:00:00 2011-09-21 10:15:00 2 firma1 2011-09-21 10:15:00 2011-09-21 10:30:00 2 firma2 2011-09-21 11:15:00 2011-09-21 11:30:00
Det er (formodenligt) ikke så svært, ved hjælp af nogle løkker, at lave en php kode der laver et skema over dagene i en uge med felter for hvert kvarter og hvert felt enten udfyldt med den pågældende reservation eller tomt. Men for at kunne lave det, er det helt nødvendigt at forstå hvilke data der er at arbejde med.
Hvis det er mig der er for tumpet og alle andre har forstået, så glem mig og vent på hjælp fra anden side. Ellers må du fortælle mig mere om dine reservations dataer.
Beklager jeg er lidt sløj med informationerne, nu burde det hele være med, eller må jeg fiske noget mere frem. Har lige præcis de data som du foreslår som minimum. Min MySQL-tabel ser sådan ud:
Jeg giver hver booking et start tidspunkt, og et sluttidspunkt.
Måden jeg har sørget for, eller i hvert fald forsøgt, er ved at tjekke start- og sluttidspunkt for den nye reservation ikke ligger inden for en anden bookingperiode. En lykke der for hver eksisterende booking, sikrer at det nye starttidspunkter ligger før eksisterende starttidspunkt og efter det tilhørende sluttidspunkt. Hvis det giver mening. Umiddelbar har jeg fået det til at virke. Jeg har i hvert fald testet det på alle de måder jeg kunne komme i tanke om, og det giver det ønskede resultat.
Jeg havde også tænkt noget i stil med det du beskriver. At lave en tabel med en felter der har hver deres tidskode. Opdelt i intervaller på 15 min. 2011-09-21 10:00:00 - 2011-09-21 10:15:00 - 2011-09-21 10:30:00 - osv..
Så skulle hver felt holdes op mod databasen, for at se om det enkelte felt lå inden for en tidsperiode. Hvis det gjorde skulle feltet blive rødt, hvis ikke skulle det blive grønt. Fra tanke og så til at lave det er der så et stykke vej. Så ville lige prøve at forehøre mig om jeg var på rette vej, og få et lille råd eller to med på vejen.
Jeg har lavet noget vagtplan halløj, hvor man med Js og php får vist tider og bruger, ugevis frem.
Her valgte jeg at først definere aktuel uge, startende mandag, og med mulighed for at vælge 4 uger frem.
Hver bruger kan så klikke på en og tilføje start og slut tid og med mulighed for flere tider samme dag. Hvis det er i dag eller frem, kan man klikke på dagen.
Alle tider som er gemt i db lægges i et array, ligeså brugere, og ud fra disse to opbygges en tabel.
Dagene for aktuel samt den viste uge finder jeg med:
#5 Skal lige være sikker på jeg har forstået det korrekt. Du hentede så alle de vagter der fantes inden for en given uge, og gemte dem i et array. Så du kun sammenlignede med de enkelte vager, og ikke hele databasen? Lyder smart.
Hvordan opbyggede du så din tabel til at vise vagterne? og hvordan sammenlignede du med dine data gemt i array?
coder_carl, ja i #4 giver du så nogle relevante oplysninger, således at jeg kan forholde mig til det stillede spørgsmål. Nu siger du, at din oversigt kun skal være med røde og grønne felter. Hvis du skal igang for alvor ville jeg have troet, at det var mere nyttigt i hvert felt at skrive oplysninger om reservationen, for eksempel
tidspunkt mandag tirsdag 0800 Asger-beton Hans-søm 0815 Asger-beton 0830 0845 0900 Jorn -vinduer
Og det kan sikkert programmeres. Uheldigvis viste det sig, at min formodning var forkert, at det ikke ville være så svært at lave. Jeg har nu brugt en del tid på det, men jeg må stoppe. Jeg indser, at det bliver for komplekst og tidsrøvende til at gøre som hobby for at svare på et spørgsmål.
Men jeg har arbejdet med php funktionerne date() og mktime(). Jeg definerede $dage = 7 (antal dage du vil kikke fremad) og $s = mktime(7,0,0) (hvis læssepladsen åbner klokken 7 om morgenen) og $perioder = 32 (hvis arbejdsdagen er 32 kvarter = 8 timer lang), og så lavede jeg en løkke:
#8: Jeg havde bestemt heller ikke forventet et færdigt system, der var lige til at smide ind på min side. Skulle have et lille skub i den rigtige retning.
Kan se på det du har lavet, det ikke virker helt håbløst hvad jeg havde tænkt mig. Var godt klar over det ville blive lidt komplekst, så skulle lige sikre mig jeg ikke var på vej ned af et sidespor inden jeg kom alt for langt.
Du skal have mange tak for hjælpen. Nu har jeg noget at gå udfra, så må jeg se om jeg ikke kan få resten stykket sammen. Læg et svar, så du kan få del i point. Det ender nok med en deler.
Jeg har tabellerne, tjenere og vagter tjenere => id, navn vagter => id, dato, start, slut, godkendt, brugerid dato er DATE felt start og slut er TIME felt godkendt er int, er vagten endeligt aftalt? 0 eller 1 brugerid er id fra tjener tabel
$ugevagt_sql = "SELECT * FROM vagter WHERE dato BETWEEN '".date("Y-m-d", $allweeks[$vistuge])."' AND '".date("Y-m-d", $lastday)."' ORDER BY dato, start ASC";
$weekrows = mysql_query($ugevagt_sql) or die (mysql_error()); $ugevagter = array();
En forløkke til at lave første row med ugedag og dato en forløkke til at vise hver tjener på hvert row, og inde i den igen en forløkke til at lave en celle for hver dag, og her tjekker jeg om tjener har en eller flere vagter pågældende dag.
showsource /> Det var en smart måde at gøre det på. Du har så bare en enkelt vagt pr. celle, hvor jeg skal have det bredt lidt ud. Det burde dog være til at kunne klare. Nu du har givet mig din kode, må jeg så "låne" dele af den, til at strikke mit eget sammen?
Princippet er jo det samme, jeg kunne bare godt tænke mig det lidt mere detaljeret omkring tiden, eftersom jeg kun har en plads.
Du bruger selvf. løs af kode hvis du vil! På screenshot kan du se et + ved første tid. Det bruges til at tilføje endnu en tid samme dag. ( Javascript og hidden div med formular ) Og ved "steff" Fre. d. 7 er der netop to tider
Det jeg har lavet, kan alle og enhver umiddelbart rette i.
Jeg kan se på det hele der er noget ide i at begrænse de enkelte bookinger på til en dag, det vil lette gevaldigt på kompleksiteten af koden. Skal man bruge mere end 1 hel dag, må man så lave en booking mere.
Jeg siger mange tak for hjælpen, har rigeligt at gå videre med.
#Showsource /> Læg et svar så må du dele med Christian. 50/50 er vel fair?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.