webForumDet fria alternativet

Kundkorg

ASPur ASP

12 svar · 289 visningar · startad av webbmannen

webbmannenMedlem sedan dec. 1999826 inlägg
#1

* tråd för de tålmodiga ;) *

För att inte "terra" en och samma person hela tiden ber jag nu om hjälp här :)

Jag försöker förstå allt som finns i PatrikB´s skript till kundkorg och har skrivit om det med egna ord för att förstå bättre.

Nu behöver jag i första hand hjälp med att fatta hur man utökar kakan till att innehålla tex priset. Samt att via en knapp ta bort en vara helt och hållet.

<%
Option Explicit
Response.Buffer = True
Dim korgen
Dim i, int_varunamn, int_varuantal, int_varupris
Dim varunamn, varuantal, varupris
%>
<html>
<head>
<title>Varukorgen</title>
</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
	varunamn = Request.Form("vara")
	varuantal = Request.Form("antal")
	varupris = Request.Form("pris")
		If Len(varuantal) > 0 Then
			If IsNumeric(Trim(varuantal)) Then
			Call lagg_i_korgen(varunamn, varuantal, varupris)
			End If
		End If
'ElseIf Request.QueryString("action") = "ändra" Then
'	Call andra_i_korgen()
ElseIf Request.QueryString("action") = "delete" Then
	varunamn = Request.QueryString("vara")
	Call ta_bort_fran_korgen(varunamn)
End If
%>
Korgen innehåller
<%
korgen = hamta_korgen()
If IsArray(korgen) Then
	For i = 0 To Ubound(korgen,2)
	int_varunamn = korgen(0,i)
	int_varuantal = korgen(1,i)
		If Len(int_varunamn) > 0 Then
		Response.Write ":<br><br>"& int_varuantal & " st " & int_varunamn& " á " & int_varupris & " <input type=button value='Ta bort' onclick=""location.href='korgen.asp?action=delete&vara=" & int_varunamn & "';"" style='color: black; height: 18px; font-family: verdana; font-size: 10px;'><br>"
		End If
	Next
Else
	Response.Write "ingenting"
End If
'---------------------------------------------------------------------------------
%>
<br><br>
<a href="dofter.asp">Doftavdelningen</a>&nbsp;&nbsp;<a href="smycken.asp">Smyckesavdelningen</a>
<br><br>
<a href="index.html">Startsidan</a>&nbsp;&nbsp;<a href="korgen.asp">Kundkorgen</a>
</center>
</body>
</html>
<%
'--- Funktion som hämtar, läser av och skapar en array av korgen/kakan ------
Function hamta_korgen()
Dim korgen
Dim korgen_som_array()
Dim int_nyckel, int_counter
Dim nyckel
Set korgen = Request.Cokies("butiken")
	If korgen.HasKeys Then
		int_nyckel = korgen.Count -1
		ReDim korgen_som_array(1, int_nyckel)
		int_counter = 0
		For Each nyckel In korgen
			korgen_som_array(0,int_counter) = nyckel
			korgen_som_array(1,int_counter) = Request.Cokies("butiken")(nyckel)
			int_counter = int_counter + 1
		Next
		hamta_korgen = korgen_som_array
	Else
		hamta_korgen = ""
	End If
End function
'--------------------------------------------------------------------------------------

'--- Subrutin för att lägga vara i korgen ----------------------------------------------
Sub lagg_i_korgen(ByVal vara, ByVal antal, ByVal pris)
Dim korgen, innehall
Dim nyckel
Dim vara_hittad
vara_hittad = False
Set korgen = Request.Cokies("butiken")
If korgen.HasKeys Then
	For Each nyckel In korgen
		If nyckel = ""& vara &"" Then
		vara_hittad = True
		innehall = Request.Cokies("butiken")(nyckel)
			If Len(innehall) = 0 Then innehall = 0
			innehall = clng(innehall) + clng(antal)
			Response.Cokies("butiken")("" & vara &"") = innehall
			End If
	Next
		If vara_hittad = False Then
		Response.Cokies("butiken")(""& vara &"") = antal
		End If
Else
Response.Cokies("butiken")("" & vara &"") = antal
End If
Response.Cokies("butiken").Expires = DateAdd("d",365,Now())
End Sub
'---------------------------------------------------------------------------------------

'--- Subrutin för att ändra i korgen ----------------------------------------------------
Sub andra_i_korgen()
End Sub
'----------------------------------------------------------------------------------------

'--- Subrutin för att ta bort vara från korgen -------------------------------------------
Sub ta_bort_fran_korgen(ByVal varunamn)
	Dim antal
	antal = Request.Cokies("butiken")("" & varunamn & "")
	antal = antal - 1
	If antal > 0 Then
		Response.Cokies("butiken")("" & varunamn & "") = antal
	ElseIf antal = 0 Then
		Response.Cokies("butiken").Expires = "Januari 1, 2001"
	End If
End Sub
'----------------------------------------------------------------------------------------
%>

/webb

Ps. stavningen Cokies är en eftergift åt wF som inte gillar att man skriver det på rätt sätt. Har sett att det går men vet inte hur.

------------------
För nyfikna

SPiNMedlem sedan mars 20007 896 inlägg
#2

Jag förstår inte riktigt subben lagg_i_korgen(). Jag tycker den ser konstig ut. Det funkar inte om du anropar subben med dina värden som ska läggas till, eller?

lagg_i_korgen("Min lilla vara", 1999, 1), t.ex.

webbmannenMedlem sedan dec. 1999826 inlägg
#3

Nej det är riktigt SPIN,

Det du ser där är ett försök till ändring från att det ursprungligen bara var "vara" och "antal" som sparades i kakan.

/webb

------------------
För nyfikna

PatrikBMedlem sedan mars 20002 836 inlägg
#4

spin:
varför skulle det inte funka???

Här kommer lite kod du kan kika på.
Som du ser har jag lagt till en extra nyckel i varje kaka som ska innehålla priset.
Kika sedan på ändringen för att hämta korgen där jag har ökat på i arrayen så att den även kan innehålla priset.

Function hamta_korgen()
	Dim korgen
	Dim korgen_som_array()
	Dim int_nyckel, int_counter
	Dim nyckel
	Set korgen = Request.Cokies("butiken")
	If korgen.HasKeys Then
		int_nyckel = korgen.Count -1
		ReDim korgen_som_array(1, int_nyckel)
		int_counter = 0
		For Each nyckel In korgen
			korgen_som_array(0,int_counter) = nyckel
			korgen_som_array(1,int_counter) = Request.Cokies("butiken")(nyckel)
			korgen_som_array(2,int_counter) = Request.Cokies("butiken")(nyckel & "pris")
			int_counter = int_counter + 1
		Next
		hamta_korgen = korgen_som_array
	Else
		hamta_korgen = ""
	End If
End function

'--------------------------------------------------------------------------------------
'--- Subrutin för att lägga vara i korgen ----------------------------------------------
Sub lagg_i_korgen(ByVal vara, ByVal antal, ByVal pris)
	Dim korgen, innehall
	Dim nyckel
	Dim vara_hittad
	Dim total_pris, ny_total_pris
	
	vara_hittad = False
	Set korgen = Request.Cokies("butiken")
	If korgen.HasKeys Then
		For Each nyckel In korgen
			If nyckel = ""& vara &"" Then
				vara_hittad = True
				innehall = Request.Cokies("butiken")(nyckel)
				total_pris = Request.Cokies("butiken")(nyckel & "pris")
				
				If Len(innehall) = 0 Then innehall = 0
				If Len(total_pris) = 0 Then total_pris = 0
				
				innehall = clng(innehall) + clng(antal)
				ny_total_pris = ny_total_pris + pris
				
				'## -- totalt antal varor --
				Response.Cokies("butiken")("" & vara & "") = innehall
				Response.Cokies("butiken")("" & vara "pris") = total_pris
			End If
			If vara_hittad = False Then
				Response.Cokies("butiken")(""& vara &"") = antal
				Response.Cokies("butiken")("" & vara "pris") = pris
			End If
		Next
	Else
		Response.Cokies("butiken")("" & vara &"") = antal
		Response.Cokies("butiken")("" & vara "pris") = pris
	End If
	Response.Cokies("butiken").Expires = DateAdd("d",365,Now())
End Sub
'---------------------------------------------------------------------------------------

'--- Subrutin för att ändra i korgen ----------------------------------------------------
Sub andra_i_korgen()
End Sub
'----------------------------------------------------------------------------------------

'--- Subrutin för att ta bort vara från korgen -------------------------------------------
Sub ta_bort_fran_korgen(ByVal varunamn, ByVal pris)
	Dim antal
	Dim total_pris, ny_total_pris
	antal = Request.Cokies("butiken")("" & varunamn & "")
	total_pris = Request.Cokies("butiken")("" & varunamn & "pris")
	antal = antal - 1
	ny_total_pris = total_pris - pris
	If antal > 0 Then
		Response.Cokies("butiken")("" & varunamn & "") = antal
	ElseIf antal = 0 Then
		Response.Cokies("butiken").Expires = "Januari 1, 2001"
	End If
End Sub

Det bästa vore om du kunde ändra och spara alla värden i kakan på detta vis:

Response.Cokies("butiken")(varu_id & "namn") = "Min fina vara"
Response.Cokies("butiken")(varu_id & "antal") = "antal"
Response.Cokies("butiken")(varu_id & "pris") = "pris"

där varu_id är ett unikt värde som ej kan förekomma flera ggr, tex det id som genereras i en kolumn av typen räknare i Access

OBS!!! koden längst upp e otestad, men du får en liten fingervisning om HUR man kan göra för att spara flera värden kopplade till varandra i en kaka

cya,
PatrikB

------------------
'## -- second place is the first looser -- ##'

[Redigerat av PatrikB den 08 nov 2001]

SPiNMedlem sedan mars 20007 896 inlägg
#5

spin:
varför skulle det inte funka???

Det sa jag aldrig :)
Jag sa att jag tyckte att den såg konstig ut, och undrade om den inte funkade. När jag sen kollade på koden med mikroskop så förstod jag lite bättre. Det var speciellt den här kodbiten som jag inte förstod från början:

innehall = clng(innehall) + clng(antal)
Response.Cokies("butiken")("" & vara &"") = innehall

Men, som sagt, när jag gick igenom koden igen såg jag inget fel. (Vilket jag inte heller gjorda första gången, men...)

:)

------------------
SPiN, bjorne.w@telia.com

-- Tekniska framsteg är som en yxa i händerna på en kriminell galning / Albert Einstein --

webbmannenMedlem sedan dec. 1999826 inlägg
#6

När man inte tidigare brytt sig om funktioner (inte behövts) och aldrig gjort en subrutin samt bara gjort enkla kakor så är detta skript rätt svårt - ha tålamod med mig ;)

Både jag och min PWS tycker raden:

Response.Cokies("butiken")("" & vara "pris") = total_pris

ser märklig ut.

PWS, som fattar mer än jag, säger att:

Kompileringsfel i Microsoft VBScript fel '800a03ee'

')' förväntas.

/asp/tester/varukorgen/korgen.asp, rad 102

Response.Cokies("butiken")("" & vara "pris") = total_pris
--------------------------------------^

fast jag vet inte hur man borde ändra.

Är raden felskriven av dig PatrikB?

/webb

------------------
För nyfikna

SPiNMedlem sedan mars 20007 896 inlägg
#7

Japp, det saknas ett &-tecken framför "pris")!

------------------
SPiN, bjorne.w@telia.com

-- Tekniska framsteg är som en yxa i händerna på en kriminell galning / Albert Einstein --

webbmannenMedlem sedan dec. 1999826 inlägg
#8

Fortfarande kvar här :l

Vad är det för fel på detta?

korgen = hamta_korgen()
If IsArray(korgen) Then
	For i = 0 To Ubound(korgen,3)
	int_varuid = korgen(0,i)
	int_varunamn = korgen(1,i)
	int_varuantal = korgen(2,i)
		If Len(int_varuid) > 0 Then
		Response.Write ":<br><br>"& varu_antal & " " & varu_namn & "<br>"
		End If
	Next
Else
	Response.Write "ingenting"
End If

Jag får felmeddelandet Felaktigt matrisindex: 'Ubound' . Vad är det nu som jag inte förstått :q

Kakan har bevisligen dessa tre poster sparade.

/webb

------------------
För nyfikna

LarsGMedlem sedan dec. 200012 464 inlägg
#9
ubound(korgen,3)

innebär att du frågar efter antalet i tredje dimensionen för arrayen

(t.ex. om du har
dim a(4,7,8)

ubound(a,1) = 4
ubound(a,2) = 7
ubound(a,3) = 8

------------------
essentitia preter non sans multiplicandum

webbmannenMedlem sedan dec. 1999826 inlägg
#10

Jag vill ju bara lista upp de som är sparat i kakan och trodde att min kod talade om för datorn att den hittade de olika delarna på de av mig angivna placeringarna.

Din förklaring är säkert jättebra men jag har suttit för länge med detta och fattar snart inte alls vad jag gör.

Snart tar tom min envishet slut.

/webb

------------------
För nyfikna

LarsGMedlem sedan dec. 200012 464 inlägg
#11

Tittade lite på koden också. Då du verkar ha en tvådimensionell array så

For i = 0 To Ubound(korgen,2)

------------------
essentitia preter non sans multiplicandum

webbmannenMedlem sedan dec. 1999826 inlägg
#12

Jo, det är här som jag tappar tråden.

Jag trodde jag var tvungen att öka Ubound(korgen,2) till 3 om jag ökade antalet uppgifter jag ville visa. Gör jag det inte så blir visningen fel = upprepningar.

/webb

------------------
För nyfikna

LarsGMedlem sedan dec. 200012 464 inlägg
#13

Att du får upprepningar beror nog på att det är något problem när du lägger till saker i korgen eller när du skapar arrayen.

Så du skall använda ubound(korgen,2) i din kod då du jobbar med en två-dimensionell array.

------------------
essentitia preter non sans multiplicandum

138 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)