webForumDet fria alternativet

Skriva ut kvitto på anmälning

ASP

4 svar · 775 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

Tjena
Har gjort ett anmälningsscript som jag nu har lite problem med.
När anmälan är gjort vill jag skriva ut ett kvitto på vad man anmält sig till.
Såhär ser min databasdesign ut:

[b]tbl_tavling[/b]
cId => ID, räknare
cName => Text

[b]tbl_pass[/b]
pId => ID, räknare
cId => Tal, relaterad till ovanstående.

[b]tbl_grenar[/b]
gId => ID, räknare
pId => Tal, relaterad till ovanstående.

[b]tbl_anmalda[/b]
aId => ID, räknare
gId => Tal, relaterad till ovanstående.

Det är som så att grenarna ligger under pass, tex. Pass 1 Lördag och det är här som jag inte får till det.
Har gjort såhär:

anmId	= Request.Form("anmId")
			If Not isNumeric(cId) Or cId = "" Then Response.reDirect("default.asp?mP=competition_notification")
			If cInt(anmId) <> Session("usrId") Then Response.reDirect("default.asp?mP=logout")
			openDB("def")
			For Each sValue In Request.Form("gId")
				If Session("visaKvitto") <> cId Then
					sSql =	"INSERT INTO tbl_compAnm_Anm " &_
						"(anmGren, anmPers, anmDate, anmIp) " &_
						"VALUES " &_
						"(" &_
						"" & sValue & ", " &_
						"" & anmId & ", " &_
						"NOW(), " &_
						"'" & Request.ServerVariables("REMOTE_ADDR") & "'" &_
						")"
					oConn.Execute(sSql)
				End If
			Next
			sSql =	"SELECT anmGren, anmPers, phaseId, gDist " &_
					"FROM tbl_compAnm_Anm tA INNER JOIN tbl_compAnm_gren tG " &_
					"ON tA.anmGren = tG.gId " &_
					"WHERE anmPers = " & Session("usrId") & " " &_
					"ORDER BY tG.phaseId ASC"
			Set rs = oConn.Execute(sSql)
			pId = 0
			If Not rs.EOF Then
				While Not rs.EOF
					If pId <> rs("phaseId") Then
						Set rs0 = oConn.Execute("SELECT pName, pDate, pTime FROM tbl_compAnm_Phases WHERE pId = " & rs("phaseId"))
						If Not rs0.EOF Then Response.Write("<span style=""font-weight: bold;"">" & rs0("pName") & "&nbsp;" & rs0("pDate") & "&nbsp;" & rs0("pTime") & "</span><br />") End If
						Set rs0 = Nothing
					
					End If
					Response.Write(setDistance(rs("gDist")) & "<br />")
				pId = rs("phaseId")
				rs.MoveNext
				Wend
			End If
			Session("visaKvitto") = cId
			TimeOut = 5

Men frågan som kommer efter For.. Loopen plockar ju ut allt som den inloggade medlemmen har anmält sig till så¨det listar fler saker än just det man anmält sig till nu.
Skulle vilja få in något i forloopen istället så att resp. gren skrivs ut i samband med att allt sparas i databasen.
Problemet då är att den kommer skriva ut Passnamnet mer än en gång.

Såhär vill jag att det ska se ut:

[b]Pass 1[/b]
25m Frisim
50m Frisim

[b]Pass 2[/b]
100m Fjärilsim
1500m Ryggsim

Hur bör jag lösa det här?
Tack!

Medlem sedan jan. 20022 440 inlägg
#2

Du får använda en kontrollvariabel som @nders så vackert tipsade mig om :) kolla in denna tråden: http://www.webforum.nu/showthread.php?t=142847 mitt senaste inlägg borde lösa ditt problem!

dim i
i = 0

Do While Not rs.EOF
  If CInt(i) < CInt(rs("passID")) Then
    Response.Write strPassTitel
  End If
rs.MoveNext
Loop
Medlem sedan feb. 20034 441 inlägg
#3

Tack, men som du ser i mitt inlägg ovan, så är det så jag gjort, utan att det riktigt fungerar.
Men jag stuvade om lite i koden och kom fram till följande:

For Each sValue In Request.Form("gId")
				If Session("visaKvitto") <> cId Then
					sSql =	"INSERT INTO tbl_compAnm_Anm " &_
							"(anmGren, anmPers, anmDate, anmIp) " &_
							"VALUES " &_
							"(" &_
							"" & sValue & ", " &_
							"" & anmId & ", " &_
							"NOW(), " &_
							"'" & Request.ServerVariables("REMOTE_ADDR") & "'" &_
							")"
					oConn.Execute(sSql)
				End If
				Set rs = oConn.Execute(	"SELECT phaseId, gDist " &_
										"FROM tbl_compAnm_gren " &_
										"WHERE gId = " & sValue)
				If Not rs.EOF Then
					If phaseId <> rs("phaseId") Then
						Set rs1 = oConn.Execute("SELECT pName, pDate, pTime FROM tbl_compAnm_Phases WHERE pId = " & rs("phaseId"))
						If Not rs1.EOF Then
							Response.Write("<span style=""font-weight: bold;"">" & rs1("pName") & " " & rs1("pDate") & " " & rs1("pTime") & "</span><br />")
						End If
						Set rs1 = Nothing
					End If
					Response.Write("&nbsp;&nbsp;&nbsp;" & setDistance(rs("gDist")) & "<br />")
					phaseId = rs("phaseId")
				End If
			Next

Som du ser är det nästan likadant som min kod ovan, bara det att jag flyttade koden in i forloopen.
Det funkar kanon!

Tack för hjälpen iaf.

Medlem sedan jan. 20022 440 inlägg
#4

Glöm inte markera tråden som löst ;)

Medlem sedan feb. 20034 441 inlägg
#5

Nästa problem

Tjena!
Nu har jag stött på problem igen, men nästan samma sak.
Nu ska jag på något sätt få till en överskådlig grupplista där alla anmälningar ska listas efter varandra.

Min tanke är att resultatet ska se ut såhär:

Pass 1 09.00
    50m Fjärilsim
         Person 1
         Person 2
         Person 3
         Person 4
    200m Fjärilsim
         Person 1
         Person 2

Pass 2 12-14
    100m Ryggsim
         Person 1
    200m Ryggsim
         Person 1
         Person 2
         Person 3
         Person 4

Ja, ni förstår säkert principen.
Nu är det som så att jag har försökt fram och tillbaks med olika saker, men får inte till det alls med sorteringen av grupper och personer.

Såhär har jag gjort:

openDB("def")

	sSql =	"SELECT cId, cName, cStart, cEnd, cHall, cOrt, pId, pName, pDate, pTime " &_
			"FROM tbl_compAnm_Comp tC INNER JOIN tbl_compAnm_Phases tP " &_
			"ON tC.cId = tP.compId " &_
			"WHERE cId = " & cId & " " &_
			"ORDER BY tP.pName ASC, tP.pDate ASC, tP.pTime ASC"
	
	Set rs1 = oConn.Execute(sSql)

	If Not rs1.EOF Then

		phaseId = 0
		While Not rs1.EOF
			If phaseId <> rs1("pId") Then
				Response.Write(rs1("pName") & " " & rs1("pDate") & " " & rs1("pTime") & "<br>")
			End If
			s =	"SELECT gId, phaseId, gNum, gDist, anmGren, anmPers " &_
				"FROM tbl_compAnm_gren tG INNER JOIN tbl_compAnm_Anm tA " &_
				"ON tG.gId = tA.anmGren " &_
				"WHERE tG.phaseId = " & rs1("pId") & " " &_
				"ORDER BY gId ASC"
			Set rs2 = oConn.Execute(s)
			If Not rs2.EOF Then
				grenId = 0
				Do Until rs2.EOF
					If grenId <> rs2("anmGren") Then
						Response.Write(setDistance(rs2("anmGren")) & "<br>")
					End If
					Response.Write(rs2("anmPers") & "<br>")
				grenId = rs2("anmGren")
				rs2.MoveNext
				Loop
			End If
		phaseId = rs1("pId")
		rs1.MoveNext
		Wend

	Else
		' // Tävlingen hittade inte...
	End If
	closeDB()

Hur ska jag göra med det här?
Är mitt tappra sätt ovan ett dåligt sätt att lösa det här på?

Tack!

258 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)