Just nu i M3-nätverket
Jump to content

Jag vill skapa en sessionsbaserad varukorg


Solskugga

Recommended Posts

Hej, jag vill att en oinloggad kund skall lägga alla sina produkter i en session("VaruKorg"), som blir olik för varje besökare av sidan. Innehållet i denna session skall sedan vid klick på lägg_till_order läggas i en orderdatabas, samtidigt skall sessionen avslutas.

 

Jag har redan fått allting att fungera med två olika databaser, men problemet blir ju att eftersom kunderna inte är inloggade så läggs allt i en gemensam varukorg, innan de skickar sin order och därmed tvingas logga in.

 

Hur fångar man alltså upp produkter från ett formulär in i sessionsobjekt istället för direkt till en databas?

 

Mvh/Sol

 

 

 

Link to comment
Share on other sites

Det går väl lika bra att lägga in det i databasen? Bara att lägga till sessions-id tillsamman med resten av fälten, då kan du enkelt sortera ut varje kund.

 

 

 

Link to comment
Share on other sites

Session("VaruKorg") = Session("VaruKorg") & Request.Form("produkt") låter som ett enkelt sätt att lägga produktinfo från formuläret in i sessionsvariabeln. Lite mer hantverk behöver väl läggas på det där så att du enkelt kan skilja ut flera produkter från varandra, men då får du återkomma med mer detaljer om vad du vill spara i din sessionvariabel.

 

Link to comment
Share on other sites

Jag skapar en session när en besökare kommer till siten enligt nedan (samma kod fungerar utmärkt när det gäller mina loginfunktioner (förutom att jag inte använder mig utav slumptalsräknaren då.))

 

<%

Randomize

IngTal=Int(Rnd()*999999)+1%>

 

<%Session.Timeout = 480 ' 8 hours

Session.LCID = 1053 ' Swedish

Session("VaruKorg") = IngTal

response.redirect "kund.asp"%>

 

När jag sedan skall använda mig utav Session("VaruKorg") för att identifiera varje enskild kunds varor i varukorgen, skriver jag:

 

<%

'Denna kod kollar så ett giltigt värde finns i antal fältet.

 

 

Antal = Cint(Request.Form("Antal"))

'If Antal = "" then

'Response.Redirect "error.asp"

'ElseIf Antal < 1 Or Antal > 9999 Then

'Response.Redirect "error.asp"

'End If

'Slut

 

'Här skapas alla variabler, Cint och Cstr är bra att använda.

 

 

IngTal = cint(Session("VaruKorg"))

Pid = Request.Form("Pid")

Pnamn = Cstr(Request.Form("Pnamn"))

Pris = Cint(Request.Form("Pris"))

'Slut

 

'Här öppnar vi databasen

Set DB = Server.CreateObject("ADODB.Connection")

 

Set Connect = Server.CreateObject("ADODB.Connection")

Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("order/namnreg.mdb")&";"

Set RecSet = Server.CreateObject("ADODB.Recordset")

Set RecSet2 = Server.CreateObject("ADODB.Recordset")

 

 

Laggtill = "SELECT * FROM Temptab where IngTal = "&IngTal&" and Pid= "&Pid&" "

RecSet.Open Laggtill, Connect, 3, 3

 

if recset.eof then

Laggtill2 = "SELECT * FROM Temptab"

RecSet2.Open Laggtill, Connect, 3, 3

 

RecSet2.AddNew

RecSet2("IngTal") = IngTal

RecSet2("Pid") = Pid

RecSet2("Antal") = Antal

RecSet2("Pnamn") = Pnamn

RecSet2("Pris") = Pris

RecSet2.movefirst

RecSet2.Update

recset2.close

 

else

antalnu=cint(recset("Antal"))

RecSet("Antal") = antalnu + Antal

Recset.update

recset.close

end if

 

Connect.Close

'Dax att stänga databasen

 

%>

<script language="JavaScript">

<!--

self.close();

//-->

</script>

 

Felmeddelandet som jag får är:

 

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

 

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

 

/nykund/admin/anv/affar/kundvagn_laggtill.asp, line 35

 

Villket väl borde antyda att min Session("VaruKorg") inte är fylld med IngTal som jag i början satte den till. Vad är felet?

 

Har kämpat med detta länge nu, tar jag bort funktionen för session så fungerar det utmärkt att lägga till varor i varukorgen. Men då hamnar naturligtvis alla besökare i samma vilket inte fungerar så klart.

 

Link to comment
Share on other sites

De sessionsbaserade varukorgar jag har skapat har varit arrayer med ArtId och Antal (+ lite annat ibland). Sedan har dessa inte lagts till i databasen innan det finns någon kund att knyta varukorgen till, antingen en tidigare befintlig kund eller en nyregistrering.

Typ:

1. Kunden väljer vara/varor dessa läggs till i en sessionsbaserad varukorg

2. Kunden loggar in (anger e-post) eller registrerar sig.

3. Ny order skapas (kopplad till kundId från steg 2)

4. Från varukorgen skapas nya orderrader kopplade till orderId (från steg 3)

5. Kunden betalar ordern

6. Order-/betalningsbekräftelse visas/mailas

 

/Cluster

------------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

------> http://eforum.kicks-ass.net <------

 

Link to comment
Share on other sites

Jo det går att lösa så åxå naturligtvis, probelmet är mest att jag inte är helt haj på hur man fixar sådana arrayer, inte heller hur man splittar dem. Kan du eventuellt skicka ett exempel? Hade ju varit enklast för mig dock att lösa det som jag gör i koden över men men...

 

/Sol

 

Link to comment
Share on other sites

Jag har försökt göra som du sade, problemet är att det hänger upp sig på sessionen. Se infogad kod i ett av mina andra inlägg här.

 

/Sol

 

Link to comment
Share on other sites

Jag förstår inte riktigt problemet.

Ska man kunna lägga till en order om man inte är inloggad?

 

Splitfunktionen är rätt enkel.

Här är ett exempel:

testVariabel = [GRÅ]"vara1;vara2;vara3;vara4;"[/GRÅ]
tempVariabel = [color="#0000ff"]Split[/color](testVariabel,[GRÅ]";"[/GRÅ])
[color="#0000ff"]For[/color] i = 0 [color="#0000ff"]To[/color] [color="#0000ff"]UBound[/color](tempVariabel)
    [b]Response[/b].Write tempVariabel(i) & [GRÅ]"<BR>"[/GRÅ]
[color="#0000ff"]Next[/color]

 

Ett enkelt exempel som splittar upp strängen där den hittar tecknet ; och skriver ut dem på en varsin rad.

 

Link to comment
Share on other sites

Ok, eftersom jag känner mig så oerhört snäll nu på löningsfredagen... :)

Jag har skrivit ihop några delar som du kan använda till varukorgshanteringen.

[log]

[MÄRK]<%[/MÄRK]
[color="#006400"]' LÄGG TILL EN VARA I VARUKORGEN [/color]
[color="#0000ff"]If[/color] [b]Request[/b]([GRÅ]"action"[/GRÅ])=[GRÅ]"addArt"[/GRÅ] [color="#0000ff"]Then[/color]
   artId=[b]Request[/b]([GRÅ]"aid"[/GRÅ])
   strArtId = [color="#0000ff"]CStr[/color](artId)
   [color="#0000ff"]If[/color] IsArray([b]Session[/b](strArtId)) [color="#0000ff"]Then[/color]
      [color="#006400"]' Om det redan finns (minst) en vara med detta [/color]
      [color="#006400"]' artId i varukorgen så ökas antalet med ett[/color]
      tempArray = [b]Session[/b](strArtId)
      tempArray(0) = artId
      tempArray(1) = tempArray(1) + 1
      [b]Session[/b](strArtId) = tempArray
   [color="#0000ff"]Else[/color]
      [color="#006400"]' Om det inte finns någon vara med detta[/color]
      [color="#006400"]' artId så läggs varan till[/color]
      [color="#0000ff"]Dim[/color] sessionArray(1)
      sessionArray(0) = artId
      sessionArray(1) = 1
      [b]Session[/b](strArtId) = sessionArray
   [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
   [color="#006400"]' För att hålla reda på hur många produkter man totalt har i kundvagnen[/color]
   [b]Session[/b]([GRÅ]"itemsInCart"[/GRÅ])=[b]Session[/b]([GRÅ]"itemsInCart"[/GRÅ])+1
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]


[color="#006400"]' TA BORT EN VARA UR VARUKORGEN[/color]
[color="#0000ff"]If[/color] [b]Request[/b]([GRÅ]"action"[/GRÅ])=[GRÅ]"subArt"[/GRÅ] [color="#0000ff"]Then[/color]
   artId=[b]Request[/b]([GRÅ]"aid"[/GRÅ])
   strArtId = [color="#0000ff"]CStr[/color](artId)
   [color="#0000ff"]If[/color] IsArray([b]Session[/b](strArtId)) [color="#0000ff"]Then[/color]
      tempArray = [b]Session[/b](strArtId)
      tempArray(1) = tempArray(1) - 1
      [color="#0000ff"]If[/color] tempArray(1)<=0 [color="#0000ff"]Then[/color]
         [color="#006400"]' Om antalet produkter skulle vara 0 tas hela sessionsarrayen bort[/color]
         [b]Session[/b].Contents.Remove strArtId
      [color="#0000ff"]Else[/color]
         [color="#006400"]' Annars sparas det nya antalet tillbaks i sessionsarrayen[/color]
         [b]Session[/b](strArtId) = tempArray
      [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
   [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
   [b]Session[/b]([GRÅ]"itemsInCart"[/GRÅ])=[b]Session[/b]([GRÅ]"itemsInCart"[/GRÅ])-1
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

[color="#006400"]' TÖM VARUKORGEN[/color]
[color="#0000ff"]If[/color] [b]Request[/b]([GRÅ]"action"[/GRÅ])=[GRÅ]"empty"[/GRÅ] [color="#0000ff"]Then[/color]
   [color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] item [color="#0000ff"]In[/color] [b]Session[/b].Contents         
      [color="#0000ff"]If[/color] IsArray([b]Session[/b].Contents(item)) [color="#0000ff"]Then[/color]
         [b]Session[/b].Contents.Remove [b]Session[/b].Contents.Key(item)            
      [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
   [color="#0000ff"]Next[/color]
   [b]Session[/b]([GRÅ]"itemsInCart"[/GRÅ])=0
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]   

[color="#006400"]' SKAPA NY ORDER OCH TILLHÖRANDE ORDERRADER FRÅN VARUKORGEN[/color]
[color="#0000ff"]If[/color] [b]Request[/b].QueryString([GRÅ]"action"[/GRÅ])=[GRÅ]"addOrder"[/GRÅ] [color="#0000ff"]Then[/color]
   [color="#0000ff"]If[/color] [b]Session[/b]([GRÅ]"itemsInCart"[/GRÅ])>0 [color="#0000ff"]Then[/color]
      [color="#0000ff"]Set[/color] conn = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Connection"[/GRÅ])
      connString = [GRÅ]"Provider=Microsoft.Jet.OLEDB.4.0; Data Source="[/GRÅ] & [b]Server[/b].MapPath([GRÅ]"minDatabas.mdb"[/GRÅ])
      conn.open connString

      [color="#006400"]' SKAPA ORDER[/color]
      [color="#006400"]' Förutsätter att du har en kunds ID[/color]
      conn.[color="#0000ff"]Execute[/color]([GRÅ]"INSERT INTO ordrar (kundid, lagd) VALUES("[/GRÅ]&kundensID&[GRÅ]", '"[/GRÅ]&[color="#0000ff"]Now[/color]()&[GRÅ]"')"[/GRÅ])
      [color="#0000ff"]Set[/color] RS=conn.[color="#0000ff"]Execute[/color]([GRÅ]"SELECT @@IDENTITY"[/GRÅ])
         nyOrderNr=RS(0)
      [color="#0000ff"]Set[/color] RS=[color="#0000ff"]Nothing[/color]	  

      [color="#006400"]'SKAPA ORDERRADER[/color]
      [color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] item [color="#0000ff"]In[/color] [b]Session[/b].Contents
         [color="#0000ff"]If[/color] IsArray([b]Session[/b].Contents(item)) [color="#0000ff"]Then[/color]
            varArray = [b]Session[/b].Contents(item)
            artId=varArray(0)
            artAnt=varArray(1)
            conn.[color="#0000ff"]Execute[/color]([GRÅ]"INSERT INTO orderrader (orderId, prodId, prodAnt) VALUES("[/GRÅ]&nyOrderNr&[GRÅ]", "[/GRÅ]&artId&[GRÅ]", "[/GRÅ]&artAnt&[GRÅ]")"[/GRÅ])
         [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
      [color="#0000ff"]Next[/color]

      conn.close
      [color="#0000ff"]Set[/color] conn=[color="#0000ff"]Nothing[/color]
   [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
[MÄRK]%>[/MÄRK]

[/log]Koden är iof helt otestad men borde fungera. Dessutom så är det endast de mest grundläggande databasfunktionerna, du får själv komplettera efter behov.

 

Om du kör fast är det bara att fråga!

 

/Cluster

------------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

------> http://eforum.kicks-ass.net <------

 

Link to comment
Share on other sites

Tack så mkt för nedlagd tid! Men jag löste problemet under helgen på egen hand. Hade gjort en helt fungerande kod, villket jag upptäckte när jag hårdkodade om den. Problemet med min session som inte funkade var att jag försökte lägga in en talvariabel i en databas som jag märkt som string. Klantfel *ler* så nu fungerar min webbshop utmärkt på alla tänkbara vis =)

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...