Avatar billede no_doubt Nybegynder
29. januar 2008 - 16:28 Der er 4 kommentarer og
1 løsning

shop, lagerstatus

Jeg har nedenstående kode til at tilføje en eller flere af en bestemt vare til et køb

Nu vil jeg gerne have det således at der ikke blive valgt flere varer end der er på lager

Lagerstatus befinder sig i db.mdb i tabellen produkter og i kolonnen lagerstatus og er af typen tal

<% if request.form("antal") <> "" then %>
<%
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db/db.mdb")
strSQL = "Select * From varekurv where ip = '" & Request.ServerVariables("REMOTE_ADDR") & "' AND produkt_id = " & request.querystring("id") & " AND ordreid = 0"
Set rs = Conn.Execute(strSQL)

if not rs.eof then

sql1 = "UPDATE varekurv SET antal=antal+ " & request.form("antal") & " where ip = '" & Request.ServerVariables("REMOTE_ADDR") & "' AND produkt_id = " & request.querystring("id") & " AND ordreid = 0"
Conn.Execute(sql1)

response.redirect "default.asp?menu=produkter&valg=indkoebskurv"


else

sql = "Insert into varekurv (ip, produkt_id, antal) values('" & Request.ServerVariables("REMOTE_ADDR") & "', " & request.querystring("id") & ", " & request.form("antal") & ")"
Conn.Execute(sql)

response.redirect "default.asp?menu=produkter&valg=indkoebskurv"

end if
%>
<% else %><%
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db/db.mdb")
strSQL = "Select * From varekurv where ip = '" & Request.ServerVariables("REMOTE_ADDR") & "' AND produkt_id = " & request.querystring("id") & " AND ordreid = 0"
Set rs = Conn.Execute(strSQL)

if not rs.eof then

sql1 = "UPDATE varekurv SET antal=antal+1 where ip = '" & Request.ServerVariables("REMOTE_ADDR") & "' AND produkt_id = " & request.querystring("id") & " AND ordreid = 0"
Conn.Execute(sql1)

response.redirect "default.asp?menu=produkter&valg=indkoebskurv"


else

sql = "Insert into varekurv (ip, produkt_id, antal) values('" & Request.ServerVariables("REMOTE_ADDR") & "', " & request.querystring("id") & ", 1)"
Conn.Execute(sql)

response.redirect "default.asp?menu=produkter&valg=indkoebskurv"

end if
%>

<% end if %>
Avatar billede thesurfer Nybegynder
29. januar 2008 - 18:42 #1
Dette indlæg er ikke løsningen på dit nuværende problem, men blot gode råd:

1) Objekter skal nedlægges

Når du opretter (/åbner forbindelse til) et objekt, dvs. bruger "set navnet = objektet" (uden ""), skal du huske at lukke/nedlægge det igen. Det gør du med:

"navnet.close" (uden ""), hvis den har en "close" funktion.

Derefter destruerer/fjerner du objektet fra hukommelsen:

set navnet = nothing


2) IP-baseret indkøbskurv = ikke godt, gange 2

Et hurtigt kig på din kode, får mig til at tro at din indkøbskurv er IP-baseret, via en database. Med andre ord, du gemmer IP adressen på brugere i databasen, og kan til enhver en tid hive varerne frem (fra databasen).

For det første skal du bruge yderligere kode, for at fjerne varerne efter en eller anden periode, så varerne ikke er "låst" (trukket fra beholdningen) for evigt, hvilket forhindre andre brugere at tilføje de pågældende varer til indkøbskurven.

For det anden vil du få et problem / brud på sikkerheden, hvis flere brugere fra samme husstand/skole/arbejdsplads/osv lægger varer i indkøbskurven. Hvis du ikke sikrer dig imod det, kan de faktisk se og slette hinandens varer, samt tilføje ting til hinandens indkøbskurv..


Jeg håber at det er noget du allerede har tænkt på, og at du har beskyttet dig imod det.
Avatar billede thesurfer Nybegynder
29. januar 2008 - 18:50 #2
Jeg kan se at der er et par ting, der ikke fremgår helt klart, med hensyn til de to punkter..

Tilføjelser:

1)
Når objekter skabes, tager de hukommelse. Når database forbindelser oprettes, tager de ressourser.
Man skal derfor frigøre ressourserne, ellers kan man få performans problemer (præstationsproblemer på web-serveren).

2)
Hvis en bruger lægger en vare i indkøbskurven, og beslutter sig for bare at lukke browser-vinduet, vil varen forblive i indkøbskurven (hvilket er lig databasen) i al evighed.. indtil man (f.eks. en administrator) direkte går ind i databasen og sletter dem (eller via en eller anden frontend).

Hvis folk (i et hus, på en skole, på en arbejdsplads) kun har en (dynamisk) offentlig IP via udbyderen, hvilket de fleste har da fast koster ekstra, vil de have samme IP alle sammen (fra det pågældende sted).
Så du skal lige have testet din kurv fra samme sted, bare med forskellige computere.. se om computer A kan se computer B's indkøbskurv..
Hvis computer A kan det, skal du skrotte IP-delen af indkøbskurven, og bruge sessions i stedet for.
Avatar billede no_doubt Nybegynder
29. januar 2008 - 19:20 #3
det var nu ikke lige det spm. gik på :-)
Avatar billede no_doubt Nybegynder
22. marts 2008 - 12:56 #4
Kom det vidst ikke nærmere :-/
Avatar billede no_doubt Nybegynder
27. maj 2011 - 18:40 #5
Lukker
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