* 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> <a href="smycken.asp">Smyckesavdelningen</a>
<br><br>
<a href="index.html">Startsidan</a> <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 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.
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 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
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 --
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 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 --
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 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
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 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
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 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