Hej, Här är min kod (som inte funkar - men den kanske ger en aning om vad jag försöker åstadkomma) Du bör ha en tabl istället för att använda en textvärde. Hej Andreas, Har städat din sida och skrivit så jag skulle gjort det: Tusen TACK Andreas - du är en riktig pärla - det fungerar perfekt nu och blir lätt att integrera i min övriga kod.Fylla i x-rutor (checked) från array
Jag har kört fast på det problem jag beskriver nedan och undrar om någon här har tid, lust att hjälpa mig? Jag skulle bli oerhört tacksam :-)
Jag vill generera resultat som i outputexemplen, (se längst ned).
Det vill säga om en vald post har något av LanguageID:na lagrade
i fältet Languages (en array) ska en kryssruta skrivas ut "i-x:ad"
annars en o-xad kryssruta.
Tabell 1 : tblLanguages
LangID counter
LangName txt(50)
Exempel Data:
LangID LangName
1 English
2 French
3 German
4 Spanish
Tabell 2: tblClients
ID counter
Name txt(50)
Languages txt(255) – the data is stored in an Array
Exempel Data
ID Name LangIDs
1 John Smith 2, 3
2 Jane Dough 1, 3, 4
3 Minnie Brown 1, 2, 3
OUTPUT, EXEMPEL
===============
För: John Smith (request.queryString(“ID”) = 1 )
[ ] English
[ x ] French
[ x ] German
[ ] Spanish
För: Jane Dough (request.queryString(“ID”) = 2 )
[ x ] English
[ ] French
[ x ] German
[ x ] Spanish
För: Minnie Brown (request.queryString(“ID”) = 3 )
[ x ] English
[ x ] French
[ x ] German
[ ] SpanishSv: Fylla i x-rutor (checked) från array
<code>
<%
Response.Buffer = true
strID = Request.QueryString("ID")
Dim sDBConn, objRS, objConn, x
sDBConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/database/test.mdb")
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open sDBConn
Set objRS = Server.CreateObject("ADODB.RecordSet")
Set objRS2 = Server.CreateObject("ADODB.RecordSet")
SQL = "SELECT * FROM tblLanguages ORDER BY LangID ASC"
SQL2 = "SELECT * FROM tblClients WHERE ID =" & strID & " ORDER BY ID ASC"
Set objRS = objConn.execute(SQL)
Set objRS2 = objConn.execute(SQL2)
Do While Not objRS.EOF
arrLanguages = Split(objRS2("Languages"), ", ", -1, 1)
sHTML = ""
xHTML = ""
For x = 0 to Ubound(arrLanguages, 1)
xlangID = arrLanguages(x)
If objRS("LangID") = CInt(xlangID) Then
sHTML = sHTML & ("<input type=""checkbox"" name=""selLang"" value=""" & objRS("LangID") & """ checked> " & objRS("LangName") & " (" & objRS("LangID") & ")<br>")
Else
xHTML = ("<input type=""checkbox"" name=""selLang"" value=""" & objRS("LangID") & """> " & objRS("LangName") & " (" & objRS("LangID") & ")<br>")
End If
Next
Response.Write sHTML
'Response.Write xHTML
objRS.MoveNext
Loop
objRs.Close
objRs2.Close
Set objRS = Nothing
Set objRs2 = Nothing
objConn.Close
Set objConn = Nothing
%>
</code>Sv: Fylla i x-rutor (checked) från array
Har gjort ett exempel för dig som gör det du ber om: Programarkivet:Hantera en "många till många" relation med checkboxarSv: Fylla i x-rutor (checked) från array
Tack för din fina lösning, det ser ut som om det är den mest effektiva att använda - egentligen. Problemet är att jag har ett enda script som hanterar listingar, uppdateringar etc. (jag håller på och leker och testar och försöker lära mig saker som jag känner att jag inte behärskar särskilt bra - bl.a. att hantera loopar och arrayer och det är därför jag bl.a. valt att lagra värdena (LangID:na från Langtabellen) i ett textfält i Client-tabellen som en sträng :-)
I princip har jag fått jag scriptet (koden ovan) att fungera - men jag får dubletter (lika många som värden i arrayen) och jag vet inte vad jag gör för fel.
Jag har lagt ut mina filer på:
http://www.humangateway.com/test/test.asp?ID=1
(jag har tre klienter i testdatabasen så det är bara att ändra ID till 2 och 3).
Längst ner ligger också en länk till en zipfil med den utbrutna scriptdelen och databasen.
Där syns det att jag får dubletter på de poster som är x-ade (en dublett per språk som är x:at) - men inte på de övriga, och jag är inte människa till att reda ut var någonstans jag gjort det logiska felet i loopen (eller om felet ligger tidigare i koden)?
MVH / anejoSv: Fylla i x-rutor (checked) från array
<code>
<%@ Language=VBScript %><%
Option Explicit
'**
'* Function: SQLIn - Generic function for stripping invalid statments from a numberic
'**
Function SQLIn(Value)
Dim re
Set re = New RegExp
re.Global = True
re.Pattern = "[^,0-9]"
SQLIn = re.Replace(Value, vbNullString)
End Function
Sub WriteHeader(Title)
Response.Write "<HTML>" & vbCrLf & _
"<HEAD>" & vbCrLf & _
"<TITLE>" & Server.HTMLEncode(Title) & "</TITLE>" & vbCrLf & _
"</HEAD>" & vbCrLf & _
"<BODY>" & vbCrLf
End Sub
Sub WriteFooter()
Response.Write "<BR>" & vbCrLf & _
"<BR>" & vbCrLf & _
"Download sourcefiles and database: Test.zip" & vbCrLf & _
"</BODY>" & vbCrLf & _
"</HTML>" & vbCrLf
End Sub
Dim lngID
Dim strID
Dim strIn
Dim strSQL
Dim objRS, objConn
Response.Buffer = true
strID = CStr(Request.QueryString("ID"))
If IsNumeric(strID) Then
lngID = CLng(strID)
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("test.mdb")
strSQL = "SELECT * FROM tblClients WHERE ID = " & lngID
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, objConn
If Not objRS.EOF Then
WriteHeader "Client: " & objRS("coachname")
Response.Write "<P><B>Client name: </B>" & objRS("coachname") & "</P>" & vbCrLf & _
"<P><B>Change spoken languages:</B><BR>" & vbCrLf
strIn = SQLIn(objRS("Languages"))
If Len(strIn) Then
strSQL = "SELECT tblLanguages.*, LangID IN (" & strIn & ") As LangChecked FROM tblLanguages ORDER BY LangID ASC"
Else
strSQL = "SELECT tblLanguages.*, False As LangChecked FROM tblLanguages ORDER BY LangID ASC"
End If
objRS.Close
objRS.Open strSQL, objConn
Do
If objRS("LangChecked") Then
Response.Write "<INPUT type=""checkbox"" name=""selLang"" value=""" & objRS("LangID") & """ checked> " & Server.HTMLEncode(objRS("LangName")) & " (" & objRS("LangID") & ")<BR>"
Else
Response.Write "<INPUT type=""checkbox"" name=""selLang"" value=""" & objRS("LangID") & """> " & Server.HTMLEncode(objRS("LangName")) & " (" & objRS("LangID") & ")<BR>"
End If
objRS.MoveNext
Loop Until objRS.EOF
Response.Write "</P>"
WriteFooter
Else
WriteHeader "No Record"
Response.Write "<H3>No Record found with Id: " & lngID & ".</H3>"
WriteFooter
End If
objRs.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
Else
WriteHeader "Missing parameter"
Response.Write "<H3>You must specify a value for query string value ""Id"".</H3>"
WriteFooter
End If
%>
</code>Sv: Fylla i x-rutor (checked) från array
Häls. / anejo
PS!
Nu är jag skyldig dig 2 middagar :-) Tills jag får tillfälle att åka till Göteborg börjar jag med att lyfta luren och ringa in ett bidrag till Pelles bonusmedlemsfond. Det är det bästa sättet jag kommer på att tacka med just nu.