webForumDet fria alternativet

Hur krångliga kan sessions bli!?

ASP

8 svar · 221 visningar · startad av Eclipse

Medlem sedan juli 20003 825 inlägg
Frågan#1

Jag har hållt på hela kvällen. I webbverktyget använder jag getRows() och sparar dom i olika sessioner, typ session("listAllLinks")

Dom tilldelas när man loggar in:

[b]confirm.asp[/b]
	' ## LIST UNSENT OFFERS
	SQL = "SELECT * FROM [job] " _
	& " WHERE [x_userID] = " & session("x_memberID") _
	& " AND [x_isSent] = FALSE;"
	set mySQL = Conn.Execute(SQL)
	on error resume next
	session("listUnsentOffers") = mySQL.GetRows()

Sen är det tänkt att man ska kunna titta på dom där... Det fungerar på en blank sida men inte på sidan koden egentligen ska ligga på!

73. IF session("listUnsentOffers") <> "" THEN
response.write "xxxxxxxx<BR><BR>"
END IF

För den där koden blir det:

Microsoft VBScript runtime  error '800a000d'

Type mismatch

/production/offer/index.asp, line 73

Om jag däremot kör koden på en tom sida så är det helt okej, men om jag kör koden längst upp på den tänkta sidan (alltså innan all kod på rad 1) blir det runtime error.

Suck...

Medlem sedan juni 200032 967 inlägg
#2

Är inte session("listUnsentOffers") en array? Då tror jag inte du kan jämföra med tom sträng.

Har jag rätt för mig när jag tänker isArray()? I så fall kan du också kolla ubound på den andra dimensionen för att veta om det är en array och den inte är tom.

Om det går att göra på en tom sida, vet jag i så fall inte varför.

Mvh,

------------------
All your base are belong to me.

Medlem sedan juli 20003 825 inlägg
#3

Tack för ett trevligt samtal! :-)

IF IsArray(session("listUnsentOffers")) = TRUE THEN...

Medlem sedan juni 200032 967 inlägg
#4

Du kan ju droppa = TRUE också, för att spara ytterligare några knapptryckningar. ;)

Tack själv! :)

Mvh,

------------------
All your base are belong to me.

Medlem sedan juli 20003 825 inlägg
#5

Jaha, där ser man!

---
Mer problem:

När jag plockar bort poster så envisas sist posten att hänga kvar. Sista raden lyder:

session("listUnsentOffers") = mySQL.GetRows()

Men om det inte finns några poster att lista så skrivs inte sessionen över. Den behåller sitt värde och det gör att en post listas men som inte finns!

Om jag loggar ut och sen loggar in igen så finns inte posten där... men så ska det inte gå till.

Medlem sedan juni 200032 967 inlägg
#6

Hej igen.

Om du plockar bort on error resume next så kommer du märka att du får ett felmeddelande. Det beror på att du inte kan göra .GetRows() på ett tomt recordset.

En liten ifsats alltså:

if not mySQL.eof then
session("listUnsentOffers") = mySQL.GetRows()
else
session("listUnsentOffers") = ""
end if

Nånting sånt kanske skulle göra susen?

Red: Tror jag i alla fall... ;)

Mvh,

------------------
All your base are belong to me.

[Redigerat av @nders den 17 okt 2001]

Medlem sedan juli 20003 825 inlägg
#7

Nytt problem
Denna gången inte relaterat till getRows() men dock till sessions.

Det gäller loginfunktionen på webbplatsen. En användare ska kunna vara antingen Leverantör [x_customer] eller Inköpare [x_member]. (Namnvalen är helt wacko men det får du ta...)

Inloggningen sker som brukligt, man kollar om användarens lösenord i databasen stämmer överens med det sparade värdet i databasen.

Om det gör det så tilldelas olika sessioner motsvarande värden från databasen.

	session("x_ID")       = mySQL("x_ID")
	session("x_memberID") = mySQL("x_ID")
	session("x_name")     = mySQL("x_firstname") & " " & mySQL("x_lastname")
	session("x_email")    = mySQL("x_email")
	session("x_customer") = mySQL("x_customer")
	session("x_member")   = mySQL("x_member")

OK, ni hajar. Längre ner på sidan tilldelas sessioner med olika getRows() ungefär som det ursprungliga problemet på denna tråd.

' ## LIST CUSTOMER / MEMBER MENU
	IF mySQL("x_customer") = TRUE THEN
		TMP = "SELECT * FROM [menu] WHERE [x_customer] = TRUE AND [x_view] = TRUE ORDER BY [x_sortfield];"
	ELSEIF mySQL("x_member") = TRUE THEN
		TMP = "SELECT * FROM [menu] WHERE [x_member] = TRUE AND [x_view] = TRUE ORDER BY [x_sortfield];"
	END IF
	set myTMP = Conn.Execute(TMP)
'	on error resume next
	session("listMenu") = myTMP.GetRows()
 
' ## LIST  MEMBER MENU
	IF mySQL("x_member") = TRUE THEN
	TMP = "SELECT * FROM [menu] WHERE [x_member] = TRUE AND [x_view] = TRUE ORDER BY [x_sortfield];"
	set myTMP = Conn.Execute(TMP)
'	on error resume next
	IF NOT myTMP.EOF THEN
		session("listMemberMenu") = myTMP.GetRows()
	ELSE
		session("listMemberMenu") = ""
	END IF
	END IF

' ## LIST CUSTOMER MENU
	IF mySQL("x_customer") = TRUE THEN
	TMP = "SELECT * FROM [menu] WHERE [x_customer] = TRUE AND [x_view] = TRUE ORDER BY [x_sortfield];"
	set myTMP = Conn.Execute(TMP)
'	on error resume next
	IF NOT myTMP.EOF THEN
		session("listCustomerMenu") = myTMP.GetRows()
	ELSE
		session("listCustomerMenu") = ""
	END IF
	END IF

Det ser lite rörigt ut kanske men de tilldelade sessionerna används sedan i menu.asp som är inkluderad på varje sida.

Det är givetvis inte meningen att man ska se båda menyerna men grejen är att IF satsen fungerar inte!

Byter jag IF mySQL("x_customer") = TRUE... mot IF session("x_customer") = TRUE... då fungerar det som det är tänkt! Problemet består i att båda menyerna tolkas som TRUE. Jag testade att skriva ut session("x_customer") och session("x_member") i filen menu.asp och dom var korrekta.

---
Jag kör med sessions nu tills vidare för det fungerar men det är en sunkig och osnygg lösning och vad tycker vi om sunkiga och osnygga lösningr?? ;-)

Medlem sedan juni 200032 967 inlägg
#8

Det skulle kunna vara ett subtypsproblem.

If CBool(mySQL("x_customer")) then...

Mvh,

------------------
All your base are belong to me.

Medlem sedan juli 20003 825 inlägg
#9

Nej det hjälpte inte. Denna koden körs trots att värdet i x_member är FALSE.

' ## LIST  MEMBER MENU
	IF CBool(mySQL("x_member")) = TRUE THEN
	TMP = "SELECT * FROM [menu] WHERE [x_member] = TRUE AND [x_view] = TRUE ORDER BY [x_sortfield];"
	set myTMP = Conn.Execute(TMP)
'	on error resume next
	IF NOT myTMP.EOF THEN
		session("listMemberMenu") = myTMP.GetRows()
	ELSE
		session("listMemberMenu") = ""
	END IF
	END IF
257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)