Avatar billede mini-me Nybegynder
10. april 2005 - 22:35 Der er 11 kommentarer og
1 løsning

Hjælp til shopping system

Hej Eksperter,

Jeg sidder og roder med at omskrive en shopping løsning jeg har lavet for noget tids-siden, dengang var den baseret udelukkende på session, hvilket også gjorde det meget nemt når jeg skulle finde ud af hvor mange varer kunden havde valgt m.v.

Dog har jeg erfareret at sessions ikke altid er det bedste så jeg er gået tilbage til at skrive det om til en DB løsning.

Jeg smider alle varer ind i min db som har 3 felter ID, Item, User

mit probleme er bare nu, at jeg snildt kan skrive alle varerne ud fra databasen via et loop, men så får eks. 10 linier med den samme t-shirt i stedet for 1 linie hvor der står antal 10stk, det jeg vil er at grupperer kundens ITEMS.

Her er noget af min kode ( det er ikke helt skrevet om fra session tiden)

SQL = "SELECT * From ShoppingCart where ShoppingUser = " & Session.SessionID
        set myRs = conn.execute(SQl)
           
        while not myRS.eof or myRS.bof
       
        myRS.movenext
        wend
   
            strSQL = "SELECT Name, price, AvlItems, id from ShoppingSystem_Items where id=" & myRS("Item")
            set rs = conn.execute(strSQL)
           
            ' Calculates the price
            strPrice = strCount * rs("Price")
            totalPrice = totalPrice + strPrice
           
            ' Checks if enough is avalable if not errLevel 1
           
                       
            %>
            <tr>
                <td><% =  rs("id") %></td><td><% =  rs("Name") %></td><td>
                <input type="text" value="<% = strCount %>" name="<% = objItem %>" class="unit"></td><td align="right"><% =  strPrice %>,- DKK</td>
            </tr>
            <% if LEN(errLevel_1) > 0 then %>
               
                <Tr><tD colspan="4">FEJL!!!</tD></Tr>
           
            <% end if%>   

        <%
        end if
        myRS.movenext
        wend
        %>
Avatar billede thesurfer Nybegynder
10. april 2005 - 22:41 #1
Jeg ville måske lavet et felt mere ("Antal"), så du har: ID, Item, User, Antal

Når du så lægger en vare i kurven, checker du om brugeren allerede har denne vare..

Hvis brugeren har varen, så
  antal = antal + 1
ellers
  antal = 1
slut hvis
Avatar billede mini-me Nybegynder
10. april 2005 - 22:47 #2
Hehe det er ved at være sent ;-) TheSurfer: det var jo klart en oplagt mulighed + det reducerer databasebrugen væsentligt :-)
Avatar billede thesurfer Nybegynder
10. april 2005 - 22:47 #3
Ellers skal hvert enkelt item tælles.. f.eks.:

select count(*) from tabelnavn where user = 'hans' and item ='a123'
Avatar billede mini-me Nybegynder
10. april 2005 - 22:48 #4
tænkte på at smække det i et array først og så knalde det ud... den count funktion er vel på ingen måde optimal .) ?
Avatar billede thesurfer Nybegynder
10. april 2005 - 22:49 #5
Hmm.. din ide er altså, at brugeren logger ind først, og derefter putter ting i kurven?
Eller, indeholder "user" sessionid?
Avatar billede thesurfer Nybegynder
10. april 2005 - 22:54 #6
Count(*) fortæller dig hvor mange (af samme) varer, brugeren har tilføjet.. Det kan du bruge, til at finde ud af, hvordan udskriften skal se ud..
Avatar billede mini-me Nybegynder
10. april 2005 - 22:56 #7
Nej brugeren kan handle først uden at være logget ind, han kan så senere logge ind og der bliver hans User så byttet ud med et bruger ID fra databasen.
Avatar billede mini-me Nybegynder
19. april 2005 - 10:51 #8
Smid et svar så får vi lukket her, jeg fik omskrevet mit system så det virker ;-)
Avatar billede thesurfer Nybegynder
19. april 2005 - 11:15 #9
Jeg vil hellere vide hvad løsningen blev, da man så kan referere til den, i fremtiden :-)

- Ingen points tak. :-)
Avatar billede mini-me Nybegynder
19. april 2005 - 11:20 #10
Her er løsningen:


<link href="shop.css" rel="stylesheet" type="text/css">
<!-- #include file="../dbconn.asp" -->
<%
   
    if Request.Form("Order") = "Bestil" Then
        response.Redirect("StartOrder_GetAdd.asp")
        response.End()
    end if
   
    If Request.QueryString("AddOrder") = "Yes" then
       
        set rs = server.CreateObject("ADODB.Recordset")
        strSQL = "SELECT * from ShoppingCart where Item=" & server.URLEncode(Request.QueryString("PID")) & " AND ShoppingUser = " & Session.SessionID
        'response.Write(strSQL)
        rs.open strSQL, conn, 1, 3
       
        ' Hvis der ikke findes en varer med denne bruger tilfØjes en ny...
        if rs.eof or rs.bof then
        rs.addnew
            rs("Item") = server.URLEncode(Request.QueryString("PID"))
            rs("ShoppingUser") = session.SessionID
            rs("CartItem") = 1
        rs.update
       
        else
        ' Hvis vareren findes tilføjes en ekstra item bare til kurven..
        rs.update
            rs("CartItem") = rs("CartItem") + 1
        rs.update
        end if
   
    end if    
   
    ' Opdater kurven
    if Request.Form("Update") = "Opdater kurv" Then

        for each ObjItem in Request.Form()
       
        on error resume next
       
        set rs = server.CreateObject("ADODB.Recordset")
        strSQL = "SELECT * From ShoppingCart where Item=" & objItem & " AND ShoppingUser = " & Session.SessionID
       
        if Request.Form(objItem) = 0 then
            strSQL = "DELETE * From ShoppingCart where Item=" & objItem & " AND ShoppingUser = " & Session.SessionID
            conn.execute(strSQL)
        else
           
        'response.Write(strSQL)
        rs.open strSQL, conn, 1,3
            rs.update
                rs("cartItem") = Request.Form(objItem)
            rs.update
                           
        end if
        next
       
    end if
   
    ' Empty basket -- Hmmm some workaround shit here...
    if request.Form("ClearBasket") = "Tøm kurv" then
       
        strSQL = "DELETE * From ShoppingCart where ShoppingUser = " & session.SessionID
        conn.execute(strSQL)
       
    end if

    ' Some HTML Fuck to create a table :)
    %>
<form method="post" action="<% = actionString %>">
  <table width="450" cellspacing="2" Celpadding="2" align="center">
    <tr>
      <td><div align="left"><span class="style4">Indkøbskurv </span> </div></td>
    </tr>
  </table>
  <table width="450" cellspacing="2" Celpadding="2" class="ShopTable" align="center">
    <tr>
      <td width="56"><b>Varenr.</b></td>
      <td width="236"><b>Navn</b></td>
      <td width="47"><b>Antal</b></td>
      <td width="91" align="right"><b>Pris</b></td>
    </tr>
    <%
       
    ' Looping through the colletion of our shop session  // Session.StaticObjects
   
            ' Retrive information from Database
   
        SQL = "SELECT * From ShoppingCart where ShoppingUser = " & Session.SessionID
        set myRs = conn.execute(SQl)
       
        if myRs.eof or myrs.bof then
            errLevel = 1
            %>
    <tr>
      <td colspan="4"><b>Du har ikke nogen varer i din indkøbskurv...</b> </tD>
    </Tr>
    <%
        else
           
        while not myRS.eof or myRS.bof
            errTxt = ""
       
           
            strSQL = "SELECT Name, price, AvlItems, id from ShoppingSystem_Items where id=" & myRS("Item")
            set rs = conn.execute(strSQL)
           
            if rs("avlItems") < myRS("CartItem") then
                errLevel = 2
                errTxt = "Der er kun " & rs("AvlItems") & " til rådighed af ovenstående vare!"
               
            end if
               
            ' Calculates the price
            strPrice = myRS("cartItem") * rs("Price")
            totalPrice = totalPrice + strPrice
           
            ' Checks if enough is avalable if not errLevel 1
           
                       
            %>
    <tr>
      <td><% =  rs("id") %></td>
      <td><% =  rs("Name") %></td>
      <td><input type="text" value="<% = myRS("CartItem") %>" name="<% = myRS("Item") %>" class="unit"></td>
      <td align="right"><% =  strPrice %>
        ,- DKK</td>
    </tr>
    <tr>
      <td colspan="4"><b><red>
        <% = errTxt %>
        </red></b></td>
    </tr>
    <%
       
        myRS.movenext
        wend
        end if
        if errLevel = 1 then
       
        else
        %>
    <tr height=1 bgcolor="F5D179">
      <td colspan=4></td>
    </tr>
    <tr>
      <td colspan=3>Ialt.:</td>
      <td align="right"><% = totalPrice %>
        ,-</td>
    </tr>
    <tr height=1 bgcolor="F5D179">
      <td colspan=4></td>
    </tr>
    <tr>
      <td colspan=4><center>
          <% if errLevel = 2 then
                    else %>
          <input type="Submit" Value="Bestil" Name="Order" class="button">
          <% end if %>
&nbsp;
          <input type="Submit" Value="Tøm kurv" Name="ClearBasket" class="button">
&nbsp;
          <input type="Submit" value="Opdater kurv" name="Update" class="button">
        </center></td>
    </tr>
    <% end if %>
  </table>
</form>
Avatar billede mini-me Nybegynder
19. april 2005 - 11:21 #11
ingen garanti for kvaliteten, men det virker ;-)
Avatar billede thesurfer Nybegynder
19. april 2005 - 11:27 #12
:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester