Kundkorgen nedan fungerar när man lägger i första varan. Man kan sedan även ändra varan antal. Det går även bra att lägga till ytterligare en vara, MEN SEN kommer problemet.
Försöker jag ändra antalet i någon av de två inlagda produkterna så skapas istället en tredje kolumn med BÅDA de andra kolmunernas värde i.
Nu är det inte bara jag som gått bet på detta så det är dags att visa att du är kung på wF
<%
Option Explicit
Response.Buffer = True
Dim prod_id, prod_antal, prod_vara, prod_pris
Dim korgen, i, varuid, varupris, varunamn, varuantal, varusumma, slutsumma
%>
<html>
<head>
<title>Varukorgen</title>
<style type="text/css">
body{font-family: verdana; font-size: 10px; color: #b6cded; background: black;}
td {font-family: verdana; font-size: 10px; color: #b6cded; background: #37646f}
input {color: black; height: 18px; font-family: verdana; font-size: 10px;}
</style>
</head>
<body><br><br><center>
<%
'--- Detta avsnitt kollar om någon vara ska läggas till, ändras eller tas bort ---
If Request.Form("action") = "OK" Then
prod_id = Request.Form("id1")
prod_antal = Request.Form("antal1")
prod_vara = Request.Form("vara1")
prod_pris = Request.Form("pris1")
Call plocka_vara(prod_id, prod_antal, prod_vara, prod_pris)
ElseIf Request.form("action") = "Ändra" Then
prod_id = Request.Form("id2")
prod_antal = Request.Form("antal2")
prod_vara = Request.Form("vara2")
prod_pris = Request.Form("pris2")
Call plocka_vara(prod_id, prod_antal, prod_vara, prod_pris)
End If
%>
<form action="korgen3.asp" method="post">
<%
'# -- Bara som koll av vad som returneras --
Response.Write "ID = "&prod_id&" , VARA = "&prod_vara&" , PRIS = "&prod_pris&" , ANTAL = "&prod_antal
%><br><br>
<table border=0 width=470 cellpadding=2><tr><td height=25 colspan=6 align=center valign=middle>
<b>Din kundkorg innehåller just nu följande varor</b>
</td></tr><tr>
<td> <b>Vara</b></td><td align=center><b>Pris/st</b></td><td align=center><b>Summa</b></td><td align=center><b>Ant.</b></td><td colspan=2> </td>
</tr><tr>
<%
korgen = hamta_korgen()
If IsArray(korgen) Then
For i = 0 To Ubound(korgen,2)
varuid = korgen(0,i)
varupris = korgen(1,i)
varunamn = korgen(2,i)
varuantal = korgen(3,i)
varusumma = varupris * varuantal
slutsumma = slutsumma + varusumma
If varuid = "0" Then
Response.Write ""
Else
Response.Write "<td> " & varunamn & "</td>"&_
"<td width=55 align=right>" & varupris & ":- </td>"&_
"<td width=55 align=right>" & varusumma &":- </td>"&_
"<td width=30 align=center><input type=text size=2 name=antal2 value=" & varuantal &" style='background: #cccccc;'></td>"&_
"<input type=hidden name=id2 value=" & varuid & ">"&_
"<input type=hidden name=vara2 value=" & varunamn & ">"&_
"<input type=hidden name=pris2 value=" & varupris& ">"&_
"<td width=55 align=center> <input type=submit name=action value='Ändra'>"&_
"</td>"&_
"<td width=65 align=center> <input type=button value='Ta bort'></td></tr><tr>"
End If
Next
Response.Write "<td colspan=6> </td></tr><tr><td colspan=4 align=left><b> Total summa " & slutsumma &" kr</b></td><td align=center colspan=2><input type=submit name=submit value='Gå till kassan'></td>"
Else
Response.Write "<td colspan=6 height=40 valign=middle align=center><b>Korgen är tom</b></td>"
End If
'---------------------------------------------------------------------------------
%>
</td></tr></table>
</form>
<br><br>
<a href="dofter.asp">Doftavdelningen</a>
<br><br>
<a href="smycken.asp">Smyckesavdelningen</a>
<br><br>
<a href="index.html">Startsidan</a> <a href="korgen3.asp">Kundkorgen</a>
</center>
</body>
</html>
<%
'--- Funktion som hämtar, läser av och skapar en array av korgen/kakan ------
Function hamta_korgen()
Dim korg, infoarray(), key, prod_id
Dim innehall, raknare
Set korg = Request.Cokies("butiken")
If korg.HasKeys Then
innehall = (korg.Count/4) - 1
ReDim infoarray(3,innehall)
raknare = 0
For Each key In korg
If InStr(1,key,"ID") > 0 Then
prod_id = Left(key,Len(key) - 2)
infoarray(0,raknare) = korg(prod_id & "id")
infoarray(1,raknare) = korg(prod_id & "pris")
infoarray(2,raknare) = korg(prod_id & "vara")
infoarray(3,raknare) = korg(prod_id & "antal")
raknare = raknare + 1
End If
Next
hamta_korgen = infoarray
Else
hamta_korgen = ""
End If
End function
'--------------------------------------------------------------------------------------
'--- Subrutin för att lägga vara i eller ändra i korgen ------------------------------------
Sub plocka_vara(prod_id, prod_antal, prod_vara, prod_pris)
Dim korg, key
Dim hittat
Dim antalet
hittat = False
'## -- hämta alla nycklar i vår kundkorg som sparats i en cokie --------------------
Set korg = Request.Cokies("butiken")
'## -- kontrollera om det finns några produkter --
If korg.HasKeys Then
For Each key IN korg
If key = prod_id & "id" Then
hittat = True
antalet = korg(prod_id & "antal")
'## -- räkna upp antal av produkten --
antalet = CLng(antalet) + CLng(prod_antal)
'## -- spara nya värdet i kakan/korgen igen --
Response.Cokies("butiken")("" & prod_id & "antal") = antalet
End If
Next
If hittat = False Then
'## -- lägg till en ny vara i korgen --
Response.Cokies("butiken")(prod_id & "id") = "" & prod_id & ""
Response.Cokies("butiken")(prod_id & "pris") = "" & prod_pris & ""
Response.Cokies("butiken")(prod_id & "vara") = "" & prod_vara & ""
Response.Cokies("butiken")(prod_id & "antal") = "" & prod_antal & ""
Response.Cokies("butiken").Expires = DateAdd("d",365,Now())
End If
Else
Response.Cokies("butiken")(prod_id & "id") = ""& prod_id &""
Response.Cokies("butiken")(prod_id & "pris") = ""& prod_pris &""
Response.Cokies("butiken")(prod_id & "vara") = ""& prod_vara &""
Response.Cokies("butiken")(prod_id & "antal") = ""& prod_antal &""
Response.Cokies("butiken").Expires = DateAdd("d",365,Now())
End If
End Sub
'---------------------------------------------------------------------------------------
%>
Då du har mer än en vara så kommer du att skriva ut flera fält med samma namn (id2,antal2,vara2,pris2) och då kommer dessa att innehålla alla värden för den nyckeln.
Hade du något mer i åtanke än det du skrivit LarsG? Vid ett byte rätt och av (din kod mot min) så blir det knas redan vid första försöket av att lägga in en vara.
När jag kontrollerat kakan efter att ha uppdaterat en vara (med originalkoden) så tycks det som att ordningen på den lagrade informationen byter ordning i kakan. Detta får mig att misstänka att din kod skulle falerat även om den tagit sig förbi första inläggningen av en vara.
Om någon är intresserad så skickar jag gärna de tre övriga sidorna som jag använder till detta exempel. Man har då ett körbart skript vilket kanske kan vara lättare att tackla.
Det är egentligen två saker som jag avsåg. Den kodsnutt jag lade hör inte ihop med problemet med sammanblandning av varor. Det finns lite olika alternativa lösningar men grunden är att du måste namnge fälten unikt, med hjälp av ett prefix, och sedan skicka det prefixet när du gör submit.
Det är två anledningar till att jag skrev att du borde byta ut din instr.
Instr gör jämförelsen binärt, den är alltså case-sensitve. Därför tycker jag att du borde aldrig få någon träff på "id" när du bygger upp din array. Den andra anledningen är att det skulle bli fel om du t.ex. har ett varunamn som innehåller texten ID.