Avatar billede chrisrj Forsker
25. oktober 2002 - 11:44 Der er 30 kommentarer og
2 løsninger

Markere checkboxe

Jeg nogle checkboxe der er dynamisk lavet, dertil har jeg en tabel i db hvor der er info om hvike checkboxe der skal markeres.

I db'en stå der f.eks. 1,2,5

Også skal checkbox nr. 1,2 og 5 hakkes af.

Hvordan gør man det?


Her er min kode:


<%
strSQL = "Select * From udstyr"
  Set rts = Conne.Execute(strSQL)
tal = 0
tallet = 0
t = 1
do while not rts.eof
    response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td>"
    response.write "<td align=left width='50'>"
    minlinje = split(opslag("udstyr"),",")
'for i = tallet to ubound(minlinje)
'    strsql = "select udstyrid from udstyr where udstyrid="&minlinje(i)
'    Set rees = Conne.Execute(strSQL)
'    if rees("udstyrid") = rts("udstyrid") then
'        Response.Write "<input type='checkbox'  checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
'        exit for
'    else
        response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
'        exit for
'    end if
'next
    tallet = tallet + 1
    tal = tal + 1
    if tal = 4 then
        response.write "</tr><tr>"
        tal = 0
    end if
    t = t + 1
    rts.movenext
loop

%>

Den "for" løkke der er udkommenteret er et forsøg der IKKE virker.
Avatar billede medions Nybegynder
25. oktober 2002 - 11:47 #1
<%
strSQL = "Select * From udstyr"
  Set rts = Conne.Execute(strSQL)
tal = 0
tallet = 0
t = 1
do while not rts.eof
    response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td>"
    response.write "<td align=left width='50'>"
    minlinje = split(opslag("udstyr"),",")
'for i = tallet to ubound(minlinje)
'    strsql = "select udstyrid from udstyr where udstyrid="&minlinje(i)
'    Set rees = Conne.Execute(strSQL)
'    if rees("udstyrid") = rts("udstyrid") then
rs.MoveNext()
'        Response.Write "<input type='checkbox'  checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
'        exit for
'    else
        response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
'        exit for
'    end if
'next
    tallet = tallet + 1
    tal = tal + 1
    if tal = 4 then
        response.write "</tr><tr>"
        tal = 0
    end if
    t = t + 1
    rts.movenext
loop

%>

-vil mene du mangler en MoveNext() på dit recordset....

-hvis ikke det er rigtigt, så kigger jeg lige på det når jeg kommer hjem lidt senere i dag...

//>Rune
Avatar billede chrisrj Forsker
25. oktober 2002 - 11:51 #2
kig lige før "loop"

der står : rts.movenext

Der er ikke det der er problemet, hvis jeg indkommentere for løkke kommer checkboxene ud på denne måde:

X
X
X
X
X
X
X

Hvor de skulle komme ud sådan:
X X X X
X X X
Avatar billede chrisrj Forsker
25. oktober 2002 - 13:23 #3
Med denne kode bliver kun den første valgte box hakket af:

<%
strSQL = "Select * From udstyr"
  Set rts = Conne.Execute(strSQL)
tal = 0
tallet = 0
t = 1
minlinie = ""
if opslag("udstyr") <> "" then
    minlinje = split(opslag("udstyr"),",")
end if
do while not rts.eof
for i = tallet to ubound(minlinje)
    response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td>"
    response.write "<td align=left width='50'>"
    strsql = "select udstyrid from udstyr where udstyrid="&minlinje(i)
    Set rees = Conne.Execute(strSQL)
    if rees("udstyrid") = rts("udstyrid") then
        Response.Write "<input type='checkbox'  checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
    else
        response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
        exit for
    end if
    tallet = tallet + 1
    tal = tal + 1
    if tal = 4 then
        response.write "</tr><tr>"
        tal = 0
    end if
    t = t + 1
    rts.movenext
next
rts.movenext
loop
%>
Avatar billede chrisrj Forsker
25. oktober 2002 - 13:23 #4
Og forøvrigt lister den kun de første 4 checkboxe
Avatar billede medions Nybegynder
25. oktober 2002 - 15:23 #5
Prøv med denne:

<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>

<%
<%
    strSQL = "Select * From udstyr"
      Set rts = Conne.Execute(strSQL)
    tal = 0
    tallet = 0
    t = 1
    minlinie = ""
    if opslag("udstyr") <> "" then
        minlinje = split(opslag("udstyr"),",")
        lngLength = Len(minlinje) -1
        minlinje = Left(minlinje,lngLength)
    end if
    do while not rts.eof
    for i = tallet to ubound(minlinje)
        response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td>"
        response.write "<td align=left width='50'>"
        strsql = "select udstyrid from udstyr where udstyrid="&minlinje(i)
        Set rees = Conne.Execute(strSQL)
        if rees("udstyrid") = rts("udstyrid") then
            Response.Write "<input type='checkbox'  checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
        else
            response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
    exit for
        end if
        tallet = tallet + 1
        tal = tal + 1
        if tal = 4 then
            response.write "</tr><tr>"
            tal = 0
        end if
        t = t + 1
        rts.movenext
    next
    rts.movenext
    loop
%>
%>

</BODY>
</HTML>


//>Rune
Avatar billede chrisrj Forsker
25. oktober 2002 - 17:13 #6
jeg er i øjeblikket optaget af noget andet...jeg vender tilbage når jeg har tid til det her. :)
Avatar billede chrisrj Forsker
26. oktober 2002 - 23:21 #7
Sorry, jeg har været optaget af en hel masse andet. Jeg havde derfor totalt glemt dette spg. :(

Rune, dit forslag virker desværre ikke.

Her er min nuvændende kode:

<%
minlinie = ""
udstyridet = ""
strSQL = "Select * From udstyr"
  Set rts = Conne.Execute(strSQL)
tal = 0
t = 1
if opslag("udstyr") <> "" then
    minlinje = split(opslag("udstyr"),",")
end if
do while not rts.eof
for i = 0 to ubound(minlinje)
    udstyridet =  minlinje(i)
    if rts.eof then
        exit for
    end if
    response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td>"
    response.write "<td align=left width='50'>"
    response.write udstyridet
    response.write rts("udstyrid")
    if udstyridet = rts("udstyrid") then
        Response.Write "<input type='checkbox' checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
    else
        response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
        'exit for
    end if
    tal = tal + 1
    if tal = 4 then
        response.write "</tr><tr>"
        tal = 0
    end if
    t = t + 1
    if rts.eof then
        exit for
    end if
    rts.movenext
next
if rts.eof then
        exit do
    end if
rts.movenext
loop
%>

Som du kan se, har jeg lavet response.write'r i for løkken.
Resultatet er ret interessant:

ABS 11 X Airbag 22 X Automatgear 33 X Alufælge 15 X

X'et er checkboxe
det første tal er "udstyridet" - dvs. den splittede streng
det andet tal er "rts("udstyrid")" - dvs. id fra udstyr tabellen

Som du kan se loop'er(i mangel af et bedre ord) den splittede streng og starter forfra.

Hvordan undgår jeg det?
Avatar billede medions Nybegynder
27. oktober 2002 - 14:50 #8
Hmm har du autonumnering på dit ID felt?

//>Rune
Avatar billede chrisrj Forsker
27. oktober 2002 - 16:36 #9
ja.

Jeg lavet lidt om på koden, så den nu udskriver de boxe der er hak i og kun dem(dog uden hak i).

Jeg har indsnævret problemet til denne if sætning:
test = rts("udstyrid")
if udstyridet = test then
        Response.Write "<input type='checkbox' checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
else
        response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
end if

"else" delen bliver altid udført. Det vil, for mig, sige at den ikke kan lide sammenligningen mellem udstyrid(test), som er autonummer, og udstyridet, som er den splittede streng.

Kan problemmet ligge i at strengen er ansat for at være bogstaver og ikke tal?
Hvis ja, hvordan laver man den om?
Avatar billede medions Nybegynder
27. oktober 2002 - 16:41 #10
Prøv med dette så:

if udstyridet = CInt(test) then
        Response.Write "<input type='checkbox' checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
else
        response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
end if


CInt() konvetere fra en tekstværdi til en talværdi
CStr() konvetere fra en talværdi til en tekstværdi

//>Rune
Avatar billede chrisrj Forsker
27. oktober 2002 - 16:43 #11
Ingen forskel. :(
Avatar billede chrisrj Forsker
27. oktober 2002 - 16:44 #12
Her er min nuværende kode:

<%
minlinie = ""
udstyridet = ""
strSQL = "Select * From udstyr"
  Set rts = Conne.Execute(strSQL)
tal = 0
t = 1
if opslag("udstyr") <> "" then
    minlinje = split(opslag("udstyr"),",")
end if
for i = 0 to ubound(minlinje)
    udstyridet =  minlinje(i)
    if rts.eof then
        exit for
    end if
    response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td>"
    response.write "<td align=left width='50'>"
    response.write udstyridet
    response.write rts("udstyrid")
    test = rts("udstyrid")
    if udstyridet = CInt(test) then
        Response.Write "<input type='checkbox' checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
    else
        response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
        'exit for
    end if
    tal = tal + 1
    if tal = 4 then
        response.write "</tr><tr>"
        tal = 0
    end if
    t = t + 1
    if rts.eof then
        exit for
    end if
    rts.movenext
next
%>
Avatar billede chrisrj Forsker
27. oktober 2002 - 16:45 #13
Den udskriver :

ABS 11 X Airbag 22 X Automatgear 33 X
Avatar billede chrisrj Forsker
27. oktober 2002 - 16:46 #14
Jeg skal lige sige at det ikke er den samme bil som sidst. Derfor er der kun 3.
Avatar billede medions Nybegynder
27. oktober 2002 - 16:48 #15
Hmm prøv lige at udskriv variablerne udstyridet og udstyrid!

altså:

Response.Write(udstyridet & "<br>")
Response.Write(udstyrid)

//>Rune
Avatar billede medions Nybegynder
27. oktober 2002 - 16:50 #16
Jamen er det da både tal og bogstaver?

//>Rune
Avatar billede chrisrj Forsker
27. oktober 2002 - 16:54 #17
:)
Tænker du på "ABS"? det er bare navnet - det kommer ud et andet sted:
response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td>"

"Hmm prøv lige at udskriv variablerne udstyridet og udstyrid!"

Det er jo det jeg gør.
Først kommer navnet (ABS),
så kommer udstyridet (1),
så kommer rts("udstyrid") (1)
og til sidst komme selve checkboxen (X)
Avatar billede medions Nybegynder
27. oktober 2002 - 17:02 #18
Alt det må jo ikke ligge i den samme variabel, det er ikke særlig praktisk!

-nå, jeg skal ud og spille fodbold nu..
Vender tilbage igen i aften!

//>Rune
Avatar billede chrisrj Forsker
27. oktober 2002 - 17:08 #19
forhåbentligt ikke for sent!!! ;)
Avatar billede medions Nybegynder
27. oktober 2002 - 20:53 #20
ok back... :-)

Ligger alle de oplysninger i den samme variabel?

//>Rune
Avatar billede chrisrj Forsker
27. oktober 2002 - 20:54 #21
nej da, i hver sin.
Avatar billede medions Nybegynder
27. oktober 2002 - 20:57 #22
Hmm ok..

Jamen jeg forstår sq ik' rigtig hvad du vil! -Du må lige prøve at beskrive det lidt bedere...!

//>Rune
Avatar billede chrisrj Forsker
27. oktober 2002 - 21:11 #23
Altså!

Jeg har en bil.
Den bil har noget udstyr.
Det udstyr er valgt ud fra nogle checkboxe på min "opretbil" side.
Udstyret kommer fra databasen.
I databasen er der en tabel med udstyr.
I den tabel er der to(2) kolonner: "udstyrid"(autonummer) og "unavn"(tekst).
I min biltabel er der en kolonne med udstyr: "udstyr"(tekst)
På min "retbil" side vil jeg gerne de samme checkboxe markeret, som dem der blev markeret da bilen blev oprettet.

I øjeblikket bliver checkboxene på "opretbil" siden lavet på denne måde:

Skriv navn på udstyr. Lav en checkbox med navnet "box" + udstyrid.

Kode:

<%
strSQL = "Select * From udstyr"
  Set rts = Conn.Execute(strSQL)
tal = 0
t = 1
do while not rts.eof
    response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td><td align=left width='50'><input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
    tal = tal + 1
    if tal = 4 then
        response.write "</tr><tr>"
        tal = 0
    end if
    t = t + 1
    rts.movenext
loop
%>

Der laves derefter en kommasepareret tekst streng af de markerede chechboxe.

Kode:

strwSQL = ""
  boxe = ""
  strwSQL = "select * from udstyr"
  set res = Conne.execute(strwSQL)
  do while not res.eof
    if upload.Form("box"&res("udstyrid")) <> "" then
        boxe = boxe & res("udstyrid") & ","
    end if
    res.movenext
  loop
  if not boxe = "" then
  boxe = left(boxe, len(boxe) -1)
  end if

Og så kommer problemet på "retbil" siden.
Avatar billede chrisrj Forsker
27. oktober 2002 - 21:12 #24
Jeg håber at denne forklaring er god nok... Ellers må du spørge mere specifikt!!! ;)
Avatar billede chrisrj Forsker
27. oktober 2002 - 22:09 #25
Hvaa... er du gået i seng eller noget??
Avatar billede medions Nybegynder
28. oktober 2002 - 00:30 #26
Er det så her du vil ha' en validering på hvilke checkboxe der skal være checked?

<%
strSQL = "Select * From udstyr"
  Set rts = Conn.Execute(strSQL)
tal = 0
t = 1
do while not rts.eof
    response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td><td align=left width='50'><input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
    tal = tal + 1
    if tal = 4 then
        response.write "</tr><tr>"
        tal = 0
    end if
    t = t + 1
    rts.movenext
loop
%>

//>Rune
Avatar billede chrisrj Forsker
28. oktober 2002 - 00:40 #27
Dit forslag udskriver godt nok alle checkboxene, men der er stadig ingen af dem der er hakket af.
Avatar billede grunken Nybegynder
28. oktober 2002 - 22:46 #28
Jeg syntes at ovenstående ser lidt for beværligt ud i hht. at den bare skal checke nogle checkboxe af !, glem dog alt om splitfunktioner o.s.v, løsningen er lige foran næsen...

Det skal dog nævnes at jeg ikke ved om opslaget virkelig hedder opslag!

men for at få nedenstående til at virke let indsætter du bare en variabel der hedder :

opslag = rts("udtræk")

koden :

<%
strSQL = "Select * From udstyr"
  Set rts = Conn.Execute(strSQL)
tal = 0
tallet = 0
t = 1

do while not rts.eof
    response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td>"
    response.write "<td align=left width='50'>"

      if (inStr(opslag, t)) Then
          response.write "<input type='checkbox' checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
      else
          response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf
        End If
       

    tallet = tallet + 1
    tal = tal + 1
    if tal = 4 then
        response.write "</tr><tr>"
        tal = 0
    end if
    t = t + 1
    rts.movenext

loop

%>

ovenstående er testet med en variabel der ser sådan ud :

opslag = "1,3,5"

God fonøjelse, og håber at jeg har forstået rigtigt, ellers skal jeg punkes *G*

-grunken
Avatar billede medions Nybegynder
28. oktober 2002 - 23:15 #29
chris> Jeg spurgte om det var DER du ville ha' det! -Det var ikke et forsøg!

//>Rune
Avatar billede chrisrj Forsker
28. oktober 2002 - 23:33 #30
rune -> sorry, det havde jeg ikke set...

grunken -> dit svar ser spændende ud - jeg kigger på det lige så snart jeg får tid!! :)
Avatar billede chrisrj Forsker
03. januar 2003 - 12:44 #31
Jeg fik ikke brug for det alligevel... :(
Avatar billede medions Nybegynder
03. januar 2003 - 12:55 #32
Fair nok...
Thx 4 Poinz

//>Rune
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