Gå til innhold

Hjelp til utvikling av reservasjons-system


Anbefalte innlegg

Hei

 

Nå har jeg sittet i timesvis med det samme scriptet uten å ha kommet så veldig mye lenger, så jeg kryper til korset og ber om hjelp.

 

Av en eller annen grunn har jeg tatt på meg jobben med å lage et nettbasert reservasjonssystem for utstyr og rom på skolen vår. Ikke egentlig noe veldig avanserte greier og jeg har faktisk klart å lage det meste. Det kan sees her:

Link.

Brukernummer: 123456

 

Men for å ta på medalje og bli helt ferdig har jeg to utfordringer igjen:

1. Dette er kanskje det viktigste. Jeg vil gjøre det umulig å reservere noe i et tidsrom hvor det allerede er opptatt. Jeg har prøvd mye rart her, men uansett hva jeg begynner på blir det altfor komplisert for meg og jeg mister både oversikt og kontroll. Grunnideen min går slik:

if (regtid == busytid) {DIE!!!!!} else {INSERT}

Så går da utfordringen ut på å regne ut regtid og busytid.

Det eneste jeg har klart er vel egentlig å lage et script som fyller minnet mitt... Gøy

 

2. Punkt nummer to er ikke fullt så viktig, men hadde vært svært fancy. Det er ytret ønske om å ha en grafisk oversikt på førstesiden som viser hvilket utstyr som er lånt ut og når. Gantt-modellen har vært nevnt som visningsmåte. Jeg prøvde meg litt med å modifisere en kjempesimpel php-kalender. Lenger unna en løsning tror jeg sjelden noen har vært.

 

 

Jeg er klar over at dette ikke er oppgaver som er løst på fem minutter, derfor hadde jeg blitt svært takknemlig hvis noen kunne legge sammen noen mirakler. Hvis dere trenger noe mer informasjon så si ifra!

 

På forhånd takk! :innocent:

Lenke til kommentar
Videoannonse
Annonse
Men for å ta på medalje og bli helt ferdig har jeg to utfordringer igjen:

1. Dette er kanskje det viktigste. Jeg vil gjøre det umulig å reservere noe i et tidsrom hvor det allerede er opptatt. Jeg har prøvd mye rart her, men uansett hva jeg begynner på blir det altfor komplisert for meg og jeg mister både oversikt og kontroll. Grunnideen min går slik:

if (regtid == busytid) {DIE!!!} else {INSERT}

Så går da utfordringen ut på å regne ut regtid og busytid.

Det eneste jeg har klart er vel egentlig å lage et script som fyller minnet mitt... Gøy

Hvordan er reservasjonen lagret i databasen? Fra og til? Eller kun en beskrivelse med skriften "til klokken 3"?

 

For hvis du lagrer fra og til-dato med vanlig datoformat / unixtime, så burde det være mulig å se om det var reservasjoner på gitte tidspunkt.

i databasen:

fra: 1166099767

til: 1166199767

 

Så bør du kunne sjekke om et tall er mindre enn $til eller høyere enn $fra, eller på en måte sjekke om den er der et sted.

 

Da burde også 2 løse seg selv

2. Punkt nummer to er ikke fullt så viktig, men hadde vært svært fancy. Det er ytret ønske om å ha en grafisk oversikt på førstesiden som viser hvilket utstyr som er lånt ut og når. Gantt-modellen har vært nevnt som visningsmåte. Jeg prøvde meg litt med å modifisere en kjempesimpel php-kalender. Lenger unna en løsning tror jeg sjelden noen har vært.
Lage en kalender (du finner sikkert mange GPL-lisensierte et sted), og der bør det også være mulig å bruke fra og til til noe slikt.
Lenke til kommentar

Jeg antar at du har en tabell med ting og en tabell med reservasjoner som refererer til ting. Tidene er lagret som DATETIME eller noe lignende.

 

Du kan da gjøre noe slikt:

 

Advarsel: Dette er helt feil!

 

SELECT id FROM reservations WHERE 
(
  from_date BETWEEN $desired_from AND $desired_to 
OR 
  to_date BETWEEN $desired_from AND $desired_to
)
AND 
  item_id = $id;

 

Hvis du ikke får noen rader tilbake er ønsket tidsrom ledig og du kan opprette reservasjonen.

Endret av blacktower
Lenke til kommentar

Ikke akkurat voldsomme resultater enda. Får feilmelding om at jeg har en feil på linje to i koden. Der er det bare en kommentar...

	$result = mysql_query("SELECT id FROM rent
WHERE (fdato BETWEEN $fdato AND $tdato OR tdato BETWEEN $fdato AND $tdato) AND item = $item;") or die(mysql_error());  

 if (mysql_num_rows($result) == 0) { 
 $sql = "INSERT INTO rent SET user='$user2', item='$item', fdato='$fdato', tdato='$tdato', ftid='$ftid', ttid='$ttid'";
 $query = mysql_query($sql) or die("Cannot query the database.<br>" . mysql_error());
 } else {
 echo "Opptatt!";
 }

Lenke til kommentar

For å finne feilen i koden kan du for eksempel skille ut funksjonen som sjekker om noe er opptatt i en egen funksjon (..) og teste at den virker.

 

Men, den spørringen der vil gi feil resultat, du må skrive det slik..

 

WHERE
 ((fdato BETWEEN $fdato AND $tdato) 
    OR 
  (tdato BETWEEN $fdato AND $tdato))
 AND item = $item

 

a || b && c er ikke det samme som

(a || b) && c med presedensreglene i SQL (eller vanlig logikk). :)

Lenke til kommentar
  • 5 uker senere...

$result = mysql_query("SELECT id FROM rent WHERE ((fdato BETWEEN $fdato AND $tdato) OR (tdato BETWEEN $fdato AND $tdato)) AND item = $item") 
or die(mysql_error());  

if (mysql_num_rows($result) == 0) {
$sql = "INSERT INTO rent SET user='$user2', item='$item', fdato='$fdato', tdato='$tdato', ftid='$ftid', ttid='$ttid'";
$query = mysql_query($sql) or die("Cannot query the database.<br>" . mysql_error());
} else {
echo "Opptatt!";
}

 

Resultat:

Unknown column 'A218' in 'where clause'

 

Prøv gjerne selv: Link!

Brukernummer: 123456

 

Trenger tydeligvis mer hjelp :innocent:

Lenke til kommentar

Nå ble det framgang ja. Riktignok etter litt fram og tilbake, men det oppstod et nytt problem. Scenario:

 

Et rom er reservert fra 15/1-2007 til 19/1-2007.

Hvis jeg prøver å bestille det samme rommet nøyaktig fra 15/1 til 19/1 en gang til vil det ikke gå (bra), men om jeg bestiller fra 16/1 til 17/1 vil det gå. Noe som er feil for da blir det jo en dobbelbooking.

:(

 

Takk for hjelpen så langt forresten!

Lenke til kommentar

Da er det bare for meg å bøye meg i støvet. Endelig gikk det!

Forresten så trenger alle disse variablene eller hva det heter enkle quotes rundt seg:

SELECT id FROM rent WHERE (NOT ((tdato < '$fdato') OR (fdato > '$tdato'))) AND item = '$item'

Slik ;)

 

EDIT:Men så var det dette med klokkeslett også da... :(

ftid, ttid...

En liten copy paste av dato-koden ser ikke ut til å fungere. Noe sier meg at jeg må få klokkeslett-verdiene inn i datoen.

Endret av kennethdammyr
Lenke til kommentar

Lagre tid og dato i samme felt, så slipper du dette problemet (og mange andre). Du kan bruke DATETIME eller TIMESTAMP som type. Et timestamp inneholder antall sekunder siden 1970. Det er lettere å håndtere tallet 2342413123123 enn "Søndag klokken Kvart på Tre". Når tiden skal vises til brukeren konverterer du det til et menneskelig format.

 

Lagrer du tid (og dato) som en timestamp vil spørringen over fungere av seg selv.

Lenke til kommentar

Det sa meg ikke så veldig mye da utfordringen var å få det inn i databasen etc, men jeg har løst det på egen hånd. Byttet ut timestamp med datetime og formet oppføringen selv:

$fdatetime = $faar."-".$fmnd."-".$fdag." ".$ftime.":".$fminutt.":00";

Så var det bare å putte dette inn i databasen på vanlig måte. Det gikk nemlig ikke med timestamp.

 

Så nå fungerer det ordentlig!

Skal kjøre litt tester og sånn, men har ikke merket noe feil enda i hvert fall. Tusen takk!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...