29. november 2000 - 11:51Der er
16 kommentarer og 1 løsning
Tjek på reservering af tid
Jeg har lavet et script der ser sådan ud, som jeg vil bruge til at tjekke om en bestemt tid( ud af tre) er reserveret på en bestemt dato.
<%\'----------skal tjekke om dato\'en og tiden er taget------------------
strSQL = \" SELECT Tid1, Tid2, Tid3 FROM Kalend WHERE Dato = #\"&session(\"a\")&\"#\" Set rsSchedule = conn.Execute(strSQL)
If rsSchedule(\"Tid1\") = \"-5\" Then Response.Redirect \"skema.asp?error=3\" elseif rsSchedule(\"Tid2\") = \"-4\" Then Response.Redirect \"skema.asp?error=3\" elseif rsSchedule(\"Tid3\") = \"-5\" Then Response.Redirect \"skema.asp?error=3\" Else Response.Write \"\" End If %>
Problemet er at hvis bare en af tiderne er udfyldt så melder den at tiden er reserveret, men det er jo kun hvis den pågældende tid er reserveret at det er interessant. Hvordan kommer man frem til det?
Hvis Tid1 er reserveret, men man spørger på Tid2, så skal den altså accepterer valget og sende reservationen videre. Den skal ikke stoppe ved Tid1 og sige at der ikke er en ledig tid. Desuden virker koden ikke som den er her, hvis der man spørger på en tid på en dato hvor der ikke er reserveret noget. Så melder den
Ja men det er jo klart, for du har jo tjek på Tid1 før Tid2. Du skal lave en funktion der tager et parameter, for så at tjekke på den relevante tid. feks. sådan her :
function tjeckTime(tid)
dim equalsTo if tid = \"Tid2\" then equalsTo = \"-4\" else equalsTo = \"-5\" end if
if rsSchedule(tid) = equalsTo Then Response.Redirect \"skema.asp?error=3\" end if
end function
Den kan du så kalde, når du skal lave dit tjeck f.eks. sådan her :
strSQL = \" SELECT Tid1, Tid2, Tid3 FROM Kalend WHERE Dato = #\"&session(\"a\")&\"#\" Set rsSchedule = conn.Execute(strSQL)
Dim MyTime MyTime = Request.QueryString(\"tid\") \' Dette er måske hvordan du gør iøjeblikket \' MyTime skal bare indeholde \"Tid1\", \"Tid2\" eller \"Tid3\" alt efter hvilken tid du vil tjekke på. tjeckTime(MyTime)
OK, når man klikker på reserver, så sender du en dato og en tid med over til næste side ? Den tid hedder enten 10-15 = Tid1, 15-19 = Tid2 eller 19-24 = Tid3, så skal du altså se om den man prøver at reservere er optaget ? Hvorfor kan du så ikke bruge min funktion. ?
Nu har jeg noget der se sådan ud. Men der er noget jeg har misforstået for det virker ikke.
<% strSQL = \" SELECT Tid1, Tid2, Tid3 FROM Kalend WHERE Dato = #\"&session(\"a\")&\"#\" Set rsSchedule = conn.Execute(strSQL)
Dim MyTime MyTime = &session (\"b\")& RESPONSE.WRITE\"mytime\" \' Dette er måske hvordan du gør iøjeblikket \' MyTime skal bare indeholde \"Tid1\", \"Tid2\" eller \"Tid3\" alt efter hvilken tid du vil tjekke på.
tjeckTime(MyTime)
function tjeckTime(tid)
dim equalsTo if MyTime = rsSchedule(\"Tid1\") then equalsTo = \"10-15\" elseif MyTime = rsSchedule(\"Tid2\") then equalsTo = \"15-19\" elseif MyTime = rsSchedule(\"Tid3\") then equalsTo = \"19-24\" end if
if MyTime = equalsTo Then Response.Redirect \"skema.asp?error=3\" end if end function
OKay, jeg har lige været ude lidt, sorry.... hvad indeholder session(\"b\") og hvorfor har du & rundt om ...? du bruger jo ikke den parameter du sender med til funktionen...så behøver du den ikke.
dim equalsTo if tid = rsSchedule(\"Tid1\") then equalsTo = \"10-15\" else if tid = rsSchedule(\"Tid2\") then equalsTo = \"15-19\" else if tid = rsSchedule(\"Tid3\") then equalsTo = \"19-24\" end if
if tid = equalsTo Then Response.Redirect \"skema.asp?error=3\" end if end function
session(\"b\") er den tid der komme fra request.form(Tid) Så det er altså enten 10-15, 15-19 eller 19-24.
Hvad er tid i denne sætning og hvad er det der skal være = med hvad: if tid = rsSchedule(\"Tid1\") then Jeg ved godt, at rsSchedule(\"Tid1\") er 10-15 , 15-19 eller 19-24. Men hvor defineres tid
Jeg har prøvet og sætte det ind du kom med. Men det virker stadig ikke. Jeg kan ikke komme igennem scriptet. DVS den ligger heller ikke noget ned i DB\'en.
tid er i denne sætning, lige præcis det du gerne vil have den til at være !
OK, lidt grundlæggende :
Hvis man laver en funktion, kan man vælge at give den 0 parametre f.eks. myfunction() eller flere parametre myfunktion(tid) (her en parameter, hvis der skal være flere separeres de så med et komma). Tid kan du så bruge inde i din funktionskrop, altså mellem function tjeckTime(tid) og end function. tid får tildelt en værdi ved funktionskaldet, altså idet at du skriver tjckTime(MyTime). Nu køres funktionen tjeckTime så med den værdi som MyTime indeholder, som jo så er session(\"b\")... Det er lavet sådan så man kan genbruge tjeckTime(tid), med forskellige input...OK ?
OKAY SÅÅÅÅÅÅÅ: Er det ikke sådan at forstå at brugeren indtaster en dato, og afmærker et tidspunkt på din kalender side. Når han trykker reserver, sendes han til din næste side kalendertjeck.asp hvor kalendertjeck skal kontroller om tiden er optaget eller ej ! Det kan du gøre med denne sætning :
myDate = session(\"a\") myTime = session(\"b\") strSQL = \" SELECT * FROM Kalend WHERE Dato = #\" & myDate & \"# and (Tid1 = \'\" & myTime & \"\' or Tid2 = \'\" & myTime & \"\' or Tid3 = \'\" & myTime & \"\')\" Set rsSchedule = conn.Execute(strSQL) if NOT rsSchedule.EOF then \' OPTAGET Response.Redirect \"skema.asp?error=3\" else \' IKKE OPTAGET \' GØR DET DU SKAL HER : end if
Mange tak for hjælpen. Jeg undskylder lidt de sidste problemer - jeg havde et problem med et asp-tag som ikke var afsluttet, så det var temmelig uoverskueligt en overgang for mig at finde ud af hvad der var galt. Men det sidste script du kom med er lige det, jeg har brug for.
Synes godt om
Ny brugerNybegynder
Din løsning...
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.