Hej, Skapa först en cookie och sätt in de artiklar som användare vill se Tackar, det funkar klockrent!! Så här skulle jag gå tillväga: <code>Cookie fråga
På vårt intranät har i vi en mängd olika löpsedlar. Alla löpsedlar ingår i samma applikation och har olika ID. Så varje avdelning på företaget har sin egen löpsedel och ID.
Nu ska jag bygga en sida där man kan välja själv vilka löpsedlar man vill se på den sidan. Problemet är att databasen inte är anpassad för detta och jag får ingen hjälp med att ändra heller. Dom som driftar applikationen gör inga mer databasändringar.
Därför tänkte jag att man skulle kuna använda cookies för detta istället? Problemet där är att jag är kass på cookies.....
Säg att jag har valt att se löpsedlar med följande ID:
1, 3, 5, 7 och 9
Hur kan jag dels sätta en sån cookie och hur kan jag sedan loopa igenom dessa på min asp-sida?
Eller tänker jag helt fel här?
Lite hjälp med detta tas tacksamt emot...:-)
/JockeSv: Cookie fråga
Du får på något sätt loopa ut de artiklar som användaren har valt
<code>
'Skapa cookien
'Byt ut cookienamn till det namn du vill ge cookien
Response.Cookies("cookienamn")("artID") = "1,3,5,7,9"
'hur länge skall cookien gälla. Här är det 15 dagar från dagens datum
Response.Cookies("cookienamn").Expires = Date() + 15
'hämta upp informationen frånn cookien
'kolla om det finns någon cookie
If Request.Cookies("cookienamn")("artID") <> "" Then
'splitta upp artiklarna
Dim myArr 'as Array
myArr = split(Request.Cookies("cookienamn")("artID") ,",")
'loopa igenom dem och hämta från db tex
For i = Lbound(myArr) To UBound(myArr)
sSQL = "SELECT * FROM art_articles WHERE art_id = " & myArr(i)
Set rs = Conn.Execute(sSQL)
' osv.....
Next
'eller skippa splitten och kör en WHERE IN sats istället
sSQL = "SELECT * FROM art_articles WHERE art_id IN (" & Request.Cookies("cookienamn")("artID") & ")"
End If
</code>
Se även http://www.pellesoft.se/login/articles/asp/cookies.asp
//PutteSv: Cookie fråga
En följdfråga:
Nu har jag det så att man väljer vilka löpsedelar man vill se i lista av checkboxar, fungerar bra.
Men man ska ju kunna ändra också. Så när man går in på admin-sidan ska ju checkboxarna, på de löpsedlar som står i cookien, vara "checked".
Ungefär så här:
<code>
While Not rs.EOF
<input type="checkbox" name="<%=rs("ID")%>"<%if någonting? = rs("ID") then%> checked<%end if%>> <%=rs("Name")%>
rs.MoveNext
Wend
</code>
Fast jag vet inte riktigt hur jag "letar" i cookien efter ett ID som är lika med ID:t i recordsetet..
Hur kan jag göra detta?
/JockeSv: Cookie fråga
<code>
<FORM action="" method="post">
<%
Function Exists(Data, Value)
Dim vTemp
For Each vTemp In Data
If vTemp = Value Then
Exists = True
Exit For
End If
Next
End Function
Dim rs
Dim con
Dim Index
Dim Offset
Dim Values
Dim strTemp
Dim strValues
'Hämtar sparade artiklar om man inte postar nytt val
If Request.QueryString("Action") = "Uppdatera" Then
strValues = Request.QueryString("Values")
Else
strValues = Request.Cookies("cookienamn")("Values")
End If
'Kontrollerar informationen så att inga ickenumeriska värden följer med.
'Skyddar mot SQL inject
Values = Split(strValues, ",")
For Index = 0 To UBound(Values, 1)
strTemp = Values(Index)
If IsNumeric(strTemp) Then
If Offset Then
Values(Index - Offset) = CLng(strTemp)
Else
Values(Index) = CLng(strTemp)
End If
Else
Offset = Offset + 1
End If
Next
If Offset Then
ReDim Preserve Values(0 To UBound(Values, 1)-Offset)
End If
strValue = Join(Values, ", ")
'Sparar Cookie
With Response.Cookies("cookienamn")
.Item("Values") = strValue
.Expires = Date() + 15
End With
'Öppnar anslutning mot databas
Set con = Server.CreateObject("ADODB.Connection")
con.Open ">>>Din anslutnings sträng<<<"
'Öppnar recordset för ceckboxar
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM TabellNamn ORDER BY Name", con
Do until rs.EOF
If Exists(Values, rs("Id")) Then
Response.Write "<INPUT type=""checkbox"" name=""Values"" value=""" & rs("Id") & """ checked> " & rs("Name")
Else
Response.Write "<INPUT type=""checkbox"" name=""Values"" value=""" & rs("Id") & """> " & rs("Name")
End If
rs.MoveNext
Loop
rs.Close
%>
<INPUT type="submit" name="Action" value="Uppdatera">
</FORM>
<%
'Visar valda löpsedlar
If Len(strValues) > 0 Then
rs.Open "SELECT * FROM Artiklar WHERE Id IN (" & strValues & ")"
Do Until rs.EOF
Response.Write "Löpsedel: " & rs("FältNamn")
rs.MoveNext
Loop
rs.Close
End If
con.Close
Set con = Nothing
%>
</code>Sv: Cookie fråga
Function checkIfSelected(sArts,artID)
If Len(sArts) > 0 Or artID <> NULL Then
'kolla så att något kommer in i functionen
newArr = split(sArts,",")
For i = LBound(newArr) To UBound(newArr)
If newArr(i) = artID Then
checkIfSelected = "checked"
Exit for
End if
Next
End If
End Function
'hämta artiklarna
myArr = split(Request.Cookies("cookienamn")("artID") ,",")
<form>
<%
While Not rs.EOF
%>
<input type="checkbox" name="<%=rs("ID")%>" <%=checkIfSelected(myArr,rs("id"))%>> <%=rs("Name")%>
<br>
<%
rs.MoveNext
Wend
%>
</form>
</code>