[ASP] "Dit object is geen collectie"

Pagina: 1
Acties:

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
Hey.. N.a.v. een voorbeeld op ASP101 heb ik deze code:

AantalDingen = 0
For Each Item In Request.Form("Dingenlijst")
Ding(AantalDingen) = Item
AantalDingen = AantalDingen + 1
Next

De "Dingenlijst" is het resultaat van een rijtje met checkboxjes en heeft deze vorm: appel, peer, banaan - dus comma seperated values.

Nu moet ik die lijst door de hele site gebruiken, en daar wil ik daar een Sessievariabele van maken, like so:

Session("dingenlijst") = Request.Form("dingenlijst")

Maar als ik nu zeg:

AantalDingen = 0
For Each Item In Session("dingenlijst")
Ding(AantalDingen) = Item
AantalDingen = AantalDingen + 1
Next

Dan krijg ik de melding dat "dit object geen collectie is". Hoe zit dat, en wat kan ik eraan doen?

Bloed, zweet & koffie


  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 15-09 16:07

mOrPhie

❤️❤️❤️❤️🤍

Misschien dat het niet mogelijk is om array-collecties te plaatsen in een sessie (session)?

Tis maar een veronderstelling natuurlijk. Weet het niet zeker, maar het lijkt er hier wel op duss. :)

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
Op vrijdag 01 februari 2002 14:19 schreef mOrPhie het volgende:
Misschien dat het niet mogelijk is om array-collecties te plaatsen in een sessie (session)?

Tis maar een veronderstelling natuurlijk. Weet het niet zeker, maar het lijkt er hier wel op duss. :)
Had ik ook al bedacht, maar dat is dus niet zo..

Uit 4GuysFromRolla.Com:
"The Session object can store any kind of data type, from numbers and strings to arrays and objects!"

Bloed, zweet & koffie


Verwijderd

For Each Item in Request.Form("Dingenlijst").Items ?

(Ik weet niets van ASP maar als het enigszins lijkt op VB zou ik m'n antwoord in deze richting zoeken)

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
In Vbscript zijn arrays niet dynamisch, je moet van te voren bepalen hoe groot je array is dan wel je array resizen, meen dat het over het algemeen qua performance beter is om je array wat ruimer te schatten en dan gewoon te vullen, dan hem elke keer te redimmen.

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
In het begin van het ASP-doc staat ook: Dim Ding(20)
Het aantal "dingen" is nu 12 (wordt uit een db geplukt).

Het werkt ook wel gewoon als ik die querystring of form gebruik, alleen niet als ik die vervang door een variabele - wat helemaal niet zo ongebruikelijk is lijkt mij...

Bloed, zweet & koffie


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Probeer dit eens:

TempItem = Item
ing(AantalDingen) = TempItem

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
Dat werkt gewoon, maar das ook het probleem niet :)

Bloed, zweet & koffie


  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 15-09 11:04

Basszje

Reisvaap!]

Argh da's idd helemaal verkeerd.
For Each kan je alleen gebruiken als je een OBJECT hebt een COLLECTIE onder zich heeft...
( check anders www.devguru.com eens voor de reference guide )

( bv For Each ObjFile in FSO.Files )

Niet voor een string die jij dus hebt.

Doe dit :
code:
1
2
3
4
5
6
7
8
9
10
11
12
dim bla 
bla = request("blavanForm") 

dim bla_array
bla_array = split(bla,",") 

dim i 
do until i > ubound(bla_array)

 - do code - 
i = i + 1
loop

Zoiets dus :) . Kleine foutjes uitgezonderd ( moet je zelf maar ff uitzoeken :) )

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
trouwens ik zie nu dat je dat for each item probeert te doen op een session, volgens mij kan dat helemaal niet die for each item werkt alleen op een collectie, dus dat je die melding krijgt is niet zo gek lijkt me.

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
Now we're getting somewhere! :)
Ik kan wel weer ff vooruit denk ik. Tenks gaais!

(Ik zal in dit topic het resultaat posten voor naslag.)

Bloed, zweet & koffie


Verwijderd

Met de functie split kan je wel een array bekomen.
code:
1
Session("dingenlijst") = split(Request.Form("dingenlijst"),",")

en dan
code:
1
2
3
4
For I = 0 to Ubound(Session("dingenlijst"))
Ding(AantalDingen) = Session("dingenlijst")(I)
AantalDingen = AantalDingen + 1
Next

:o Basszje was me al voor

  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 15-09 16:07

mOrPhie

❤️❤️❤️❤️🤍

Ja kunt in je for each ook als eerste steed dit neerzetten:
code:
1
Redim preserve Ding(AantalDingen)

Dan hoef je van te voren niet te bepalen hoeveel items het gaan worden. Een array is dus _wel_ dynamisch aan te passen.

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Op vrijdag 01 februari 2002 14:37 schreef mOrPhie het volgende:
Ja kunt in je for each ook als eerste steed dit neerzetten:
code:
1
Redim preserve Ding(AantalDingen)

Dan hoef je van te voren niet te bepalen hoeveel items het gaan worden. Een array is dus _wel_ dynamisch aan te passen.
Dat zei ik ook, alleen gaat het niet automatisch :)

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
Voorbeelden van dynamische arrays: http://www.asp101.com/samples/array.asp

Bloed, zweet & koffie


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Voor de duidelijkheid, standaard zijn arrays dus dynamisch in vbscript.

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
Op vrijdag 01 februari 2002 14:37 schreef sig__n het volgende:
Met de functie split kan je wel een array bekomen.
code:
1
Session("dingenlijst") = split(Request.Form("dingenlijst"),",")

en dan
code:
1
2
3
4
For I = 0 to Ubound(Session("dingenlijst"))
Ding(AantalDingen) = Session("dingenlijst")(I)
AantalDingen = AantalDingen + 1
Next

:o Basszje was me al voor
Ok, dit heb ik gedaan, en het werkt.. MAAAARRRRRRR !!! Let op! Achter de laatste dubbele quotes het eerste regeltje code:
code:
1
Session("dingenlijst") = split(Request.Form("dingenlijst"),",")

moet een spatie staan, like so:
code:
1
Session("dingenlijst") = split(Request.Form("dingenlijst"),", ")

De waarden in de array zijn bij mij kolommen in een database, en "banaan " is wat anders dan "banaan". Als je dus die spatie toevoegt, krijg je aparte woorden - anders krijg je aparte woorden met een spatie erachter aan.

Bedankt allemaal voor het helpen! :)

/Edit: Hele avond mee bezig geweest om hierachter te komen :( :( Wel leerzaam overigens :D

Bloed, zweet & koffie

Pagina: 1