webForumDet fria alternativet

Schemaläggning i ASP

ASP

2 svar · 263 visningar · startad av Sasch

Medlem sedan nov. 2002830 inlägg
Frågan#1

Detta är för schemaläggning utav ett arrangemang. Läs nederst så förklarar jag mer

<%
	IF Request.QueryString("action") = "" Then
		IF Request.QueryString("fel") <> "" Then
			Response.Write("<div style=""color:#ff0000;"">"& Request.QueryString("fel") &"</div>")
		End IF
%>
<form action="test.asp?action=verify" method="post">
<select name="frmDay"> <option selected value="">Välj vilken dag</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <br /><br />

<select name="frmSal"> <option selected value="">Välj Sal</option> <option value="A3">A3</option> <option value="A5">A5</option> </select> <br /><br />
<select name="frmStart">
<option selected value="">Välj vilken timme Eventet ska sluta</option>
<script language="JavaScript">
for (var i = 0; i <24; i++) {
	for (var k = 1; k <= 2; k++) {
		if (k == 2) {
			h = 30;
		} else {
			h = "00";
		}
		document.write("<option value='"+ i +":"+ h +"'>"+ i +":"+ h +"</option>")
	 }
}
</script>
</select>

<select name="frmEnd">
<option selected value="">Välj vilken timme Eventet ska sluta</option>
<script language="JavaScript">
for (var a = 0; a < 24; a++) {
	for (var w = 1; w <= 2; w++) {
		if (w ==1) {
			document.write("<option value='"+ a +":00'>"+a+":00 </option>")
			continue;
		} else {
			document.write("<option value='"+ a +":30'>"+a+":30 </option>")
		}
	 }
}
</script>
</select><br /><br />

<input type="Submit" name="btnSubmit" value="Spara event" />
</form>
<%
    ElseIF Request.QueryString("action") = "verify" Then
    ' Veriefiera uppgifter om arrangemanget

    dtmStart = Request.Form("frmStart")
    dtmEnd = Request.Form("frmEnd")
    intDag = Request.Form("frmDay")
    strSal = Request.Form("FrmSal")

      ' Gör följande kollar:
      IF isDate(cDate(dtmStart)) = False or isDate(cDate(dtmEnd)) = False Then
          ' Om Datumet är ett giltligt datum
	Response.Redirect("test.asp?fel=Inkorrekt datumformat, gör om")

      ElseIF dtmStart > dtmEnd Then
          ' Om personen har valt att göra Starttiden efter det att evenemanget slutat
	Response.Redirect("test.asp?fel=Arrangemanget kan inte börja efter det att det slutat, ändra")
      ElseIF DateDiff("n", dtmStart, dtmEnd) < 90 Then
          ' Om Arrangemanget är kortare än 90 minuter (1,5 timme)
	Response.Redirect("test.asp?fel=Arrangemanget är alldeles för kort, minst 90 minuter")

      ElseIF intDag = "" or cInt(intDag) = False or cInt(intDag) < 1 AND cInt(intDag) > 3 Then
          ' Kontollera att personen har matat in korrekt dag
	Response.Redirect("test.asp?fel=Inkorrekt dag")

      ElseIF strSal = "" Then
          ' Kontollera att personen har matat in korrekt sal
	Response.Redirect("test.asp?fel=Felaktig sal")

      End IF
       ' Kontroll klar

    dtmStart = cDate(dtmStart)
    dtmEnd = cDate(dtmEnd)
    intDag = cInt(intDag)

    ' Kontroll visa för användaren så att personen får en koll på vad personen vill
    Response.Write("Dag: "& intDag &"<br />")
    Response.Write("Sal: "& strSal &"<br />")
    Response.Write("Arrangemanget startar: "& dtmStart &"<br />")
    Response.Write("Arrangemanget avslutas: "& dtmEnd &"")

    Response.Write("<form action=""test.asp?action=confirmed"" method=""post"" name=""verification"">")
	    Response.Write("<input type=""hidden"" name=""frmDag"" value="""& intDag &""" />")
	    Response.Write("<input type=""hidden"" name=""frmSal"" value="""& strSal &""" />")
	    Response.Write("<input type=""hidden"" name=""frmStart"" value="""& dtmStart &""" />")
	    Response.Write("<input type=""hidden"" name=""frmEnd"" value="""& dtmEnd &""" />")
	    Response.Write("<a href=""javascript: document.verification.submit();"">Acceptera</a>")
    Response.Write("</form>")

    ElseIF Request.QueryString("action") = "confirmed" Then

    dtmStart = Request.Form("frmStart")
    dtmEnd = Request.Form("frmEnd")
    intDag = Request.Form("frmDag")
    strSal = Request.Form("FrmSal")

    IF dtmStart = "" or dtmEnd = "" or intDag = "" or strSal = "" Then
	Response.Redirect ("test.asp?Säkerhetssystemet upptäckte att du försökte fuska dig igenom, gör det ordentligt denna gång")
    End IF

    ' Kontrollerar så att det inte redan finns ett arrangemang på samma tid, om det finns, skicka tillbaka användaren

    Set rsChkEvent = Server.CreateObject("ADODB.Recordset")
    Set rsChkEvent = objdbConnection.Execute ("SELECT ID, SAL, Day, TimeStart, TimeEnd FROM tbl_schedualtime WHERE Day = '"& intDag &"' AND SAL = '"& strSal &"'") ' Behöver jag hjälp med "in between mojjen"

	IF rsChkEvent.EOF Then
		objdbConnection.Execute ("INSERT INTO tbl_schedualtime (SAL, Day, TimeStart, TimeEnd) VALUES ('"& strSal &"', "& intDag &", '"& dtmStart &"', '"& dtmEnd &"')")
	Else
		Response.Redirect ("test.asp?Finns redan ett evenemang under den tiden")
	End IF

    rsChkEvent.Close
    Set rsChkEvent = Nothing

End IF
%>

När man schemalägger vill man ju gärna ha starttid, sluttid, dag och vilken sal det gäller.

Att hitta salen, och dagen är inga problem men jag vill även förhindra att man lägger in en aktivitet i samma sal mellan tiden som den tidgare akiviten.

exempel;

Vid klockan X startar ett evenemang i sal A4 och slutar vid klockan Y. Men om någon annan vill ha arrangera i samma sal (A4) så råkar personen ändå trycka på tiden x + (låt oss säga 1 timme) vilket betyder att salen blir dubbelbokad...

Jag gissar på att man ska använda 'in between' men är inte säker, någon kan och vill hjälpa till?

Medlem sedan sep. 20026 425 inlägg
#2

Du får helt enkelt lagra dag och tid i stället för enbart dag för bokad sal i databasen. Sen kollar du om den aktuella salen är ledig vid på den dag och tid någon vill boka salen.

Medlem sedan nov. 2002830 inlägg
#3

Databasen ser ut på följande sätt:

ID (Varchar)
SAL ( Text ) Salens namn
Day ( Int ) Vilken dag det hela gäller, sträcker sig bara över 3 dagar
TimeStart (date) Tiden då arrangemanget startar
TimeEnd ( date ) Tiden då arrangemanget slutar

[EDIT]

En lite utförligare beskrivning av vad jag försöker göra kanske kan göra susen.

Själva huvudarrangemanget äger rum under 3 dagar. Den delen är lugn. Men det är meningen att man ska kunna sätta upp ett eget litet arrangemang och därmed kunna boka sal osv.

När personen försöker lägga in sin bokning vill jag att koden kollar att salen inte är bokad under just den tiden. Jag vill med andra ord inte att om en sal är bokad (Låt säga under 15.00 - 21.00) att någon ska kunna boka salen mellan 17.00 och 19.00.

    Set rsChkEvent = Server.CreateObject("ADODB.Recordset")
    Set rsChkEvent = objdbConnection.Execute ("SELECT ID, SAL, Day, TimeStart, TimeEnd FROM tbl_schedualtime WHERE Day = '"& intDag &"' AND SAL = '"& strSal &"'   ") ' Det är här jag blir rädd och osäker

	IF rsChkEvent.EOF Then
		objdbConnection.Execute ("INSERT INTO tbl_schedualtime (SAL, Day, TimeStart, TimeEnd) VALUES ('"& strSal &"', "& intDag &", '"& dtmStart &"', '"& dtmEnd &"')")
	Else
		Response.Redirect ("test.asp?Finns redan ett evenemang under den tiden")
	End IF

    rsChkEvent.Close
    Set rsChkEvent = Nothing
264 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)