Avatar billede george Nybegynder
28. oktober 2006 - 21:50 Der er 42 kommentarer og
1 løsning

Problemer med Sessions og Array

Fortsættelse af spørgsmål: http://www.eksperten.dk/spm/740113

Jeg indlæser nogle personer fra en DB til et array sådan her :
xPerson(xCount) = person

Når jeg har gjort det vil jeg gerne have array'et med over på en anden side skriver derfor sådan her :
Session("TmpPerson") = xPerson

Når jeg kommer over på den anden side og vil udskrive mit array >>Session("TmpPerson(i)")<< er array'et tomt

Hvordan kan det være tomt ? Jeg har checket at der er noget i array'et inden jeg sender det til næste side.
Avatar billede erikjacobsen Ekspert
29. oktober 2006 - 00:59 #1
Du skal nok på den anden side:

TmpPerson=Session("TmpPerson")

og så kan du senere

response.write TmpPerson(i)
Avatar billede busschou Praktikant
29. oktober 2006 - 08:17 #2
Session("TmpPerson(i)")
skal være
Session("TmpPerson")(i)
Avatar billede george Nybegynder
29. oktober 2006 - 10:35 #3
Har prøvet begge forslag, men for fejlen :

Subscript out of range: 'i'
/vl10/admin/1.asp, line 47

Det er i Response.Write linjen nedenfor.

            TmpPerson = Session("TmpPerson")
            Max = Session("TotalPersoner")
           
            For i = 0 to Max
                Response.write "Person nr. " & i & " " & TmpPerson(i) & "<br><br>"
            Next
Avatar billede busschou Praktikant
29. oktober 2006 - 10:40 #4
mon ikke det er den typiske tælle fejl
prøv
For i = 0 to Max -1
Avatar billede george Nybegynder
29. oktober 2006 - 10:45 #5
Nej ikke denne gang, samme fejl.
Avatar billede tjaz Nybegynder
29. oktober 2006 - 10:45 #6
hvorfor er det du ikke bare laver en optælling af dit array i stedet for at lave 2 sessions? Desuden kan jeg ikke se at du laver en split på dit array?

<%
'Split din session så du kan hente værdierne (går ud fra at du bruger komma mellem værdierne?
TmpPerson = Split(session(""), ",")

'Her kan du så udskrive dit array
For i = LBound(TmpPerson) to UBound(TmpPerson)
Response.write "Person nr. " & i & " " & TmpPerson(i) & "<br><br>"
Next
Avatar billede busschou Praktikant
29. oktober 2006 - 10:47 #7
ja så må det være dimensionen den er galt med som tiaz er inde på
Avatar billede tjaz Nybegynder
29. oktober 2006 - 10:47 #8
hvis indholdet af din session slutter med et komma, f.eks.:

"1,2,3,4," i stedet for "1,2,3,4"

er du nødt til at skrive:

For i = LBound(TmpPerson) to UBound(TmpPerson) - 1

ellers vil du igen få fejlen:
Subscript out of range: 'i'
Avatar billede busschou Praktikant
29. oktober 2006 - 10:52 #9
men i og med du allerede har et array burde du kunne nøjes med
for i = o to ubound(session("TmpPerson"))
  response.write "person nr." &i& " " & session("TmpPerson")(i)
Avatar billede george Nybegynder
29. oktober 2006 - 10:53 #10
Det er måske lidt nemmere hvis jeg kopierer koden herind.

Jeg laver en optælling på den forgående side, se her :

        if NOT rs.EOF then
            rsarr = rs.GetRows()
            max = Ubound(rsarr,2)
        else
            max = 0
        end if

            Dim xPerson(), TmpPerson
           
            iDate        = Request.querystring("Date")
            xCount= 0
            For i = 0 to Max
           
                'Full name
                person = rsarr(2,i) & " " & rsarr(3,i)
                'Get date
                Tmprsarr = rsarr(4,i)
                'Redim
                Redim xPerson(0)
               
                If  Tmprsarr = iDate Then
                    Response.Write "<input type=checkbox name=person value=" & person & " checked>" & person & "<br><br>"
                    xPerson(xCount) = person
                    xCount = xCount + 1
                Else
                    Response.Write "<input type=checkbox name=person value=" & person & ">" & person & "<br><br>"
                End If
            Next
            Session("TmpPerson") = xPerson
            Session("TotalPersoner") = Max

Dette er så siden jeg kommer til :
            TmpPerson = Session("TmpPerson")
            Max = Session("TotalPersoner")
           
            For i = 0 to Max
                Response.write "Person nr. " & i & " " & TmpPerson(i) & "<br><br>"
            Next
Avatar billede george Nybegynder
29. oktober 2006 - 11:02 #11
tjaz: Hvis jeg laver "TmpPerson = Session("TmpPerson")" om til "Split(session(""), ",")" får jeg denne fejl.

Subscript out of range: '0'
Avatar billede tjaz Nybegynder
29. oktober 2006 - 11:03 #12
hvis det er fordi du skal bruge værdien af de personer som du krydser af på den første side kan du jo hente personerne ved at lave en request.form("person") som automatisk vil lave et array med de personer som du har lavet er "hak" ved på forrige side.
Avatar billede busschou Praktikant
29. oktober 2006 - 11:04 #13
hvis du hele tiden laver en redim xPerson(0) ... så laver du jo hele tiden dit array til ingen ting...?

Desuden så sætter du kun en person ind xCount gange, men det er Max du overfører og Max kan vel og mærke værre større end xCount
Avatar billede busschou Praktikant
29. oktober 2006 - 11:06 #14
jeg tror jeg trækker mig...der er ingen grund til at være så mange som skriver i munden på hinanden....pøj pøj med det

Men svaret på dit oprindelige spørgsmål er opklaret ! ;o)
Avatar billede george Nybegynder
29. oktober 2006 - 11:07 #15
Tjaz: Ja jeg skal finde ud for hvilke personer der er sat et kryds og herefter genne det i en db.
Avatar billede george Nybegynder
29. oktober 2006 - 11:11 #16
Ja busschou, du har ret. Redim xPerson(0) skal i hvert fald ikke stå hvor den gør, men skal være uden for lækken.
Avatar billede tjaz Nybegynder
29. oktober 2006 - 11:23 #17
vil mene at den klart nemmeste måde at gøre det på er, blot ved at tjekke hvilke navne som var checked på forrige side, har lavet et lille eksempel:
http://exp.lynkineser.dk/array_george.asp

koden findes i:
http://exp.lynkineser.dk/array_george.txt
Avatar billede george Nybegynder
29. oktober 2006 - 13:30 #18
tjaz: Jeg har længe siddet og kigget på din kode for den virker jo fint som den er der, men jeg skal have indhold af array'et med over på en anden side.

side1.asp indholder form
side2.asp viser de personer der var sat et hak ved.

Din form ser sådan ud : <form action="?f=tjekarray" method="post">
Min form ser sådan ud : <form action="1.asp" method="post">

Du bruger jo samme asp fil til at vise resultatet.

Håber du forstår hvad jeg mener.
Avatar billede george Nybegynder
29. oktober 2006 - 13:37 #19
Skal selvfælgelig være <form action="side2.asp" method="post"> hvis det skal give nogen mening.
Avatar billede tjaz Nybegynder
29. oktober 2006 - 13:48 #20
-----------
side1.asp
-----------
<form action="side2.asp" method="post">
<input type="checkbox" name="person" value="Person 1" checked>Person 1<br>
<input type="checkbox" name="person" value="Person 2">Person 2<br>
<input type="checkbox" name="person" value="Person 3">Person 3<br>
<input type="submit" value="tjek array">
</form>

-----------
side2.asp
-----------
tmpPerson = Split(request.form("person"), ",")
antal = UBound(tmpPerson) + 1

response.write "Dit array ser p.t. således ud: """& request.form("person") &"""<br><br>"

response.write "Dine personer:<br>"
For i = LBound(tmpPerson) to UBound(tmpPerson)
response.write "i = "& i &": "& tmpPerson(i) &"<br>"
Next
Avatar billede george Nybegynder
29. oktober 2006 - 13:53 #21
Nu virker det næsten. Jeg har prøvet med koden fra busschau :

for i = o to ubound(session("TmpPerson"))
  response.write "person nr." &i& " " & session("TmpPerson")(i)

og der viser den 1. celle i array'et. Nu mangler jeg kun af få den til at vise resten af cellerne i array'et. Hmm... men hvordan ?

Her er koden som den ser ud nu :
>> Side 1 <<
            Dim xPerson(), TmpPerson
           
            iDate        = Request.querystring("Date")
            xCount= 0
           
            'Redim
            Redim xPerson(0)
           
            For i = 0 to Max
           
                'Full name
                person = rsarr(2,i) & " " & rsarr(3,i)
                'Get date
                Tmprsarr = rsarr(4,i)
           
                If  Tmprsarr = iDate Then
                    Response.Write "<input type=checkbox name=person value=" & person & " checked>" & person & "<br><br>"
                    xPerson(xCount) = person
                    xCount = xCount + 1
                Else
                    Response.Write "<input type=checkbox name=person value=" & person & ">" & person & "<br><br>"
                End If
            Next
            Session("TmpPerson") = xPerson
            Session("TotalPersoner") = Max

>> side 2 <<
            Tmp = ubound(session("TmpPerson"))
            Response.Write("Størrelse af array er : " &Tmp) & "<br>"
           
            for i = 0 to ubound(session("TmpPerson"))
                  response.write "person nr." &i& " " & session("TmpPerson")(i)
            Next

Og den viser altså kun celle 0 ( session("TmpPerson")(0) )
Avatar billede george Nybegynder
29. oktober 2006 - 13:54 #22
Ok, prøver lige med din kode >>tjaz<<
Avatar billede george Nybegynder
29. oktober 2006 - 14:04 #23
>>tjaz<< You're the man. Så virker det.
Avatar billede george Nybegynder
29. oktober 2006 - 14:05 #24
Tak for indsatsen til alle der har været med her.
Avatar billede tjaz Nybegynder
29. oktober 2006 - 14:06 #25
så lidt ;)
Avatar billede george Nybegynder
29. oktober 2006 - 14:14 #26
>>tjaz<< For at lærer lidt af det her, kan du ikke forklarer mig hvad det er denne linje gør, for jeg bruger ikke kommaer mellem værdierne og forstår ikke rigtig hvad det er det sker i den linje.

TmpPerson = Split(session(""), ",")
( Split session(ingenting) ) eller hvad ???

På forhånd tak.
Avatar billede george Nybegynder
29. oktober 2006 - 14:17 #27
Hov! Har lige opdaget at jeg kun får fornavnet med på personen. Hvordan får jeg hele navnet ?
Avatar billede george Nybegynder
29. oktober 2006 - 14:26 #28
Troede lige at jeg var rigtig snedig ;-) og ændrede "TmpPerson = Split(request.form("person"), ",")" til "TmpPerson = request.form("person")", men for så fejlen "Type mismatch: 'LBound'"
Avatar billede tjaz Nybegynder
29. oktober 2006 - 14:31 #29
du bruger jo bare din variable "person" som du også brugte tidligere som værdi, der er der du har gemt hans fulde navn jo
Avatar billede george Nybegynder
29. oktober 2006 - 14:54 #30
Det er kun på side 1 at variablen "person" indeholder personens fulde navn. På side 2 er det kun fornavn som er i variablen "person".
Avatar billede tjaz Nybegynder
29. oktober 2006 - 15:06 #31
-----------
side1.asp
-----------

'Full name
person = rsarr(2,i) & " " & rsarr(3,i)
...
Response.Write "<input type=checkbox name=person value=" & person & ">"

dvs der skulle gerne stå personens fulde navn i value?

-----------
side2.asp
-----------

tmpPerson = Split(request.form("person"), ",")

dvs den skulle da meget gerne requeste personens fulde navn på side2?

medmindre at der er en fejl på side1 der hvor du laver din variabel?
Avatar billede tjaz Nybegynder
29. oktober 2006 - 15:07 #32
ved ikke om det har så meget at sige, men prøv at ændre din:
Response.Write "<input type=checkbox name=person value=" & person & ">"

til:
Response.Write "<input type=""checkbox"" name=""person"" value=""" & person & """>"
(begge steder self)
Avatar billede george Nybegynder
29. oktober 2006 - 15:11 #33
Det kom godt nok til at se underligt ud. Før stod det som det skulle med et checkbox felt + fornavn og efternavn. Nu viser den kun checkbox felter, 3 rækker af 10 checkboxe uden navne og 1 række med 7 checkbox også uden navne.
Avatar billede george Nybegynder
29. oktober 2006 - 15:22 #34
Sorry jeg så ikke lige den i farten.29/10-2006 15:06:09

-----------
side1.asp
-----------
Viser personens fulde navn

-----------
side2.asp
-----------
Viser kun personens fornavn

Koden på side 1:
            Dim TmpPerson
           
            iDate      = Request.querystring("Date")
            'xCount = 0
           
            For i = 0 to Max
           
                'Full name
                person = rsarr(2,i) & " " & rsarr(3,i)
               
                'Get date
                Tmprsarr = rsarr(4,i)
           
                If  Tmprsarr = iDate Then
                    Response.Write "<input type=checkbox name=person value=" & person & " checked>" & person & "<br><br>"
                    'Response.Write "<input type=""checkbox"" name=""person"" value=""" & person & """>"
                    'xPerson(xCount) = person
                    'xCount = xCount + 1
                Else
                    Response.Write "<input type=checkbox name=person value=" & person & ">" & person & "<br><br>"
                    'Response.Write "<input type=""checkbox"" name=""person"" value=""" & person & """>"
                End If
            Next
Avatar billede george Nybegynder
29. oktober 2006 - 15:29 #35
TmpPerson = Split(request.form("person"), ",") tager af en eller anden årsag kun fornavnet med over. Nu har jeg lige testet det et par gange til for at være sikker.
Avatar billede tjaz Nybegynder
29. oktober 2006 - 15:46 #36
hvad siger html koden på side1?
Avatar billede tjaz Nybegynder
29. oktober 2006 - 15:50 #37
grunden til at dine navne ikke kommer med da du rettede koden til det jeg skrev var fordi du glemte at sætte " & person & "<br><br>" bagefter ... var bare fordoven til at skrive det ... troede du kunne se det :)

If  Tmprsarr = iDate Then
Response.Write "<input type=""checkbox"" name=""person"" value=""" & person & """ checked>" & person & "<br><br>"
Else
Response.Write "<input type=""checkbox"" name=""person"" value=""" & person & """>" & person & "<br><br>"
End If
Avatar billede george Nybegynder
29. oktober 2006 - 15:50 #38
-----------
side1.asp
-----------
<table align="center" border="0" cellpadding="0" cellspacing="0" style="background-image:url(<%=strImagePath%>bg_popup.jpg)">
<tr>
    <td style="border-top: 1px solid #8B8B8B; border-bottom: 1px solid #8B8B8B; border-left: 1px solid #8B8B8B; border-right: 1px solid #8B8B8B">
    <form name="DatoModedeltagelse" action="1.asp" method="post">
    <!-- OpdaterDatoModedeltagelse.asp?Date=<%=iDate%>&ID=<%=iID%>&Aar=<%=iAar%> -->
    <table align="center" width="450" border="0" cellpadding="4" cellspacing="4">
        <tr>
        <td align="left" colspan="4" valign="top" style="background-image:url(<%=strImagePath%>bg_popup.jpg)" class="Fbodytextbold"><strong>V&aelig;lg de personer der har v&aelig;ret med på m&oslash;det ved at s&aelig;tte et "hak" ud for personerne. <P>Tryk på "Opdater" n&aring;r du er f&aelig;rdig.</strong><br><img src="<%=strImagePath%>sp.gif" width="1" height="10"><br></td>
        </tr>       
        <tr>
        <td width=200 class="Fbodytext">
       
        <%
           
            iDate      = Request.querystring("Date")
            'xCount = 0
           
            For i = 0 to Max
           
                'Full name
                person = rsarr(2,i) & " " & rsarr(3,i)
               
                'Get date
                Tmprsarr = rsarr(4,i)
           
                If  Tmprsarr = iDate Then
                    Response.Write "<input type=checkbox name=person value=" & person & " checked>" & person & "<br><br>"
                    'Response.Write "<input type=""checkbox"" name=""person"" value=""" & person & """>"
                    'xPerson(xCount) = person
                    'xCount = xCount + 1
                Else
                    Response.Write "<input type=checkbox name=person value=" & person & ">" & person & "<br><br>"
                    'Response.Write "<input type=""checkbox"" name=""person"" value=""" & person & """>"
                End If
            Next
       
        %>

        </td>
       

        <tr>
        <td align="right" colspan="4" valign="top" style="background-image:url(../images/bg_popup.jpg)" class="Fbodytext"><img src="../images/sp.gif" width="1" height="25">                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <!-- <a href="#" onClick="hideLayer('lyr2'); return false"><strong>Luk</strong></a>-->
        <center><input type="submit" value="Opdatér" style="font-size: 10pt; font-weight: normal"></center></td>
        </tr>       

        <tr>
        <td align="right" colspan="4" valign="top" style="background-image:url(../images/bg_popup.jpg)" class="Fbodytext"><img src="../images/sp.gif" width="1" height="15"></td>
        </tr>

        </table>
        </td>


        </tr>
        </table>
    </form>
</td>
</tr>
</table>
Avatar billede tjaz Nybegynder
29. oktober 2006 - 15:54 #39
jeg har lige testet ... og grunden til at den ikke tager hele navnet med er fordi din html kode ser sådan her ud (kun din input):

<input type=checkbox name=person value=Person Navn checked>

så tager den ikke det som står efter mellemrummet i value, altså den tager kun "person" i det her tilfælge, hvor hvis du retter til dem jeg lige har skrevet så ser din html sådan her ud:

<input type="checkbox" name="person" value="Person Navn" checked>

hvorefter den vil hente hele person navnet, altså i det her tilfælge "Person Navn"
Avatar billede tjaz Nybegynder
29. oktober 2006 - 15:55 #40
det jeg var ude efter var hvordan din html så ud efter du havde kørt dit script, men jeg har selv funder ud af hvorfor du kun får fornavnet med så læs lige de sidste 3 indlæg jeg har lavet, så skulle det komme til at virke
Avatar billede tjaz Nybegynder
29. oktober 2006 - 15:59 #41
Prøv selv at se forskellen på de her 2:

http://exp.lynkineser.dk/array_george.asp <-- det er den der virker

her ser formen sådan her ud:

<form action="?f=tjekarray" method="post">
<input type="checkbox" name="person" value="Person 1" checked>Person 1<br>
<input type="checkbox" name="person" value="Person 2">Person 2<br>
<input type="checkbox" name="person" value="Person 3">Person 3<br>
<input type="submit" value="tjek array">
</form>

og så er der den her:
http://exp.lynkineser.dk/array_george2.asp

den virker ikke (har samme problem som det du roder med) fordi formen ser sådan her ud:

<form action="?f=tjekarray" method="post">
<input type="checkbox" name="person" value=Person 1 checked>Person 1<br>
<input type="checkbox" name="person" value=Person 2>Person 2<br>
<input type="checkbox" name="person" value=Person 3>Person 3<br>
<input type="submit" value="tjek array">
</form>

læg mærke til at hele forskellen ligger i value
Avatar billede tjaz Nybegynder
29. oktober 2006 - 16:03 #42
Dvs, hvis du laver følgende rettelse (indlæg: 29/10-2006 15:50:48)

If  Tmprsarr = iDate Then
Response.Write "<input type=""checkbox"" name=""person"" value=""" & person & """ checked>" & person & "<br><br>"
Else
Response.Write "<input type=""checkbox"" name=""person"" value=""" & person & """>" & person & "<br><br>"
End If

så skulle det _meget gerne_ komme til at virke
Avatar billede george Nybegynder
29. oktober 2006 - 16:05 #43
Ja det burde jeg også have set. ;-( Nogle gange hjælper det at gå væk fra koden og vende tilbage senere, men man vil jo så gerne få det til at virke her og nu.

Det virker fint, både fornavn og efternavn kommer med.

Tak for din tålmodighed. Jeg var lige ved at give op.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester