---
title: "Avancerat !?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/13007-avancerat"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "webbmannen"
published: "2001-12-01T13:39:00.000Z"
updated: "2001-12-04T21:47:00.000Z"
replies: 8
views: 293
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/13007-avancerat"
---

# Avancerat !?

## #1 — webbmannen, 2001-12-01T13:39Z

Svårt problem :l

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>&nbsp;<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>&nbsp;</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>&nbsp;" & 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>&nbsp;<input type=submit name=action value='Ändra'>"&_
"</td>"&_
"<td width=65 align=center>&nbsp;<input type=button value='Ta bort'></td></tr><tr>"
	End If
	Next
	Response.Write "<td colspan=6>&nbsp;</td></tr><tr><td colspan=4 align=left><b>&nbsp;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>&nbsp;&nbsp;<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
'---------------------------------------------------------------------------------------
%>
```

/webb

Permalänk: https://www.webforum.nu/p/13007

## #2 — LarsG, 2001-12-01T16:37Z

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.

Den här kontrollen

```
If InStr(1,key,"ID") > 0 Then
```

skulle jag nog skriva som

```
If right(key,2) = "id" Then
```

Permalänk: https://www.webforum.nu/p/299821

## #3 — webbmannen, 2001-12-01T20:15Z

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.

/webb

Permalänk: https://www.webforum.nu/p/299822

## #4 — LarsG, 2001-12-01T21:06Z

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.

Du säger att det blir fel med min kod. Hur då?

Permalänk: https://www.webforum.nu/p/299823

## #5 — webbmannen, 2001-12-01T21:59Z

Det här med prefix hade jag löst trodde jag då jag fick kakan till att se ut så här.

> butiken
> 5ANTAL=3&5VARA=Doftolja&5PRIS=25&5ID=5

Jag använder alltså id-nummret (i detta fall 5) som prefix och igenkännare av de olika delarna. I koden motsvaras detta alltså av "prod_id".

Din kod gav en tom post i kunvagnen.

/webb

Permalänk: https://www.webforum.nu/p/299824

## #6 — LarsG, 2001-12-01T22:05Z

Jag menade inte i kakan utan fälten i ditt formulär.

i den här loop

```
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
```

Permalänk: https://www.webforum.nu/p/299825

## #7 — webbmannen, 2001-12-02T20:23Z

LarsG,

Kan du inte visa hur du tänkt är du snäll.

Jag känner det som att jag skickar med produkt-id:t som identifierare (gäller alltså även för formuläret), men jag förstår att jag inte förstår ;)

/webb

Permalänk: https://www.webforum.nu/p/299826

## #8 — LarsG, 2001-12-02T22:00Z

Det går att lösa på lite olika sätt.
Om du vill ha kvar att man kan ändra på varje vara med en egen knapp så måste du ändra

```
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_" & varuid & " value=" & varuantal &" style='background: #cccccc;'></td>"&_
"<input type=hidden name=id2_" & varuid & " value=" & varuid & ">"&_
"<input type=hidden name=vara2_" & varuid & " value=" & varunamn & ">"&_
"<input type=hidden name=pris2_" & varuid & " value=" & varupris& ">"&_
"<td width=55 align=center> <input type=submit name=action  value='Ändra_'" & varuid & ">"&_
"</td>"&_
"<td width=65 align=center> <input type=button value='Ta bort'" & varuid & "></td></tr><tr>"
End If
Next
```

på så sätt får du att alla fält har unika namn. Sen när du ändrar en vara

```
ElseIf mid(Request.form("action"),1,5) = "Ändra" Then
Dim suffix
suffix = mid(Request.form("action"),6) 
prod_id = Request.Form("id2" & suffix)
prod_antal = Request.Form("antal2" & suffix)
prod_vara = Request.Form("vara2" & suffix)
prod_pris = Request.Form("pris2" & suffix)
Call plocka_vara(prod_id, prod_antal, prod_vara, prod_pris)
End If
```

Tidigare när du hade samma namn och flera varor så prod_id en kommaseparerad lista med alla värden.

red: Jag kan ha missat någon " eller så

Permalänk: https://www.webforum.nu/p/299827

## #9 — PatrikB, 2001-12-04T21:47Z

ok ... jag känner mig lite ansvarig här då jag får allt att funka på en win2k/iis5 men inte funkar det på nt4/iis4

kan någon fler som kör win2k/iis5 (server) testa denna kod: <http://dev.mrwize.nu/shop/basket2.asp.txt> 

och se om den funkar, ni som har nt4/iis4 (server) får naturligtvis oxå testa o alla ni andra med ...... 

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/299828

---

Tråden på webben: https://www.webforum.nu/amne/asp/13007-avancerat
