Avatar billede pelskee Nybegynder
20. juli 2004 - 06:44 Der er 3 kommentarer og
1 løsning

Ordre oprettes 2 gange

jeg har lavet en shop som virker fint, men jeg har oplevet at hvis 2 ordre ligges indenfor 1 minut kan de risikere at få tildelt samme ordrenummer. hvordan kan det lade sig gøre ?

dette er koden til min opret_ordre_script.asp er der nogen måde at sikre sig at kunderne får hver sit ordrenummer selvom filen kaldes flere gange indenfor få sekunder/kort tid ?

koden:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="../../Connections/database.asp" -->
<% Session.LCID = 1030 %>
<%
' *** Edit Operations: declare variables

Dim MM_editAction
Dim MM_abortEdit
Dim MM_editQuery
Dim MM_editCmd

Dim MM_editConnection
Dim MM_editTable
Dim MM_editRedirectUrl
Dim MM_editColumn
Dim MM_recordId

Dim MM_fieldsStr
Dim MM_columnsStr
Dim MM_fields
Dim MM_columns
Dim MM_typeArray
Dim MM_formVal
Dim MM_delim
Dim MM_altVal
Dim MM_emptyVal
Dim MM_i

MM_editAction = CStr(Request.ServerVariables("SCRIPT_NAME"))
If (Request.QueryString <> "") Then
  MM_editAction = MM_editAction & "?" & Server.HTMLEncode(Request.QueryString)
End If

' boolean to abort record edit
MM_abortEdit = false

' query string to execute
MM_editQuery = ""
%>
<%
' *** Insert Record: set variables

If (CStr(Request("MM_insert")) = "ordre") Then

  MM_editConnection = MM_database_STRING
  MM_editTable = "ordrer"
  MM_editRedirectUrl = "ordre_kundescript.asp"
  MM_fieldsStr  = "sessionID|value|kundeID|value|Status|value|Dato|value|Tid|value|Beloeb|value|Betalingsform|value|Destination|value|Fragt|value"
  MM_columnsStr = "sessionID|none,none,NULL|kundeID|none,none,NULL|Status|',none,''|Dato|',none,''|Tid|',none,''|Beloeb|',none,''|Betalingsform|',none,''|Destination|',none,''|Fragt|',none,''"

  ' create the MM_fields and MM_columns arrays
  MM_fields = Split(MM_fieldsStr, "|")
  MM_columns = Split(MM_columnsStr, "|")
 
  ' set the form values
  For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2
    MM_fields(MM_i+1) = CStr(Request.Form(MM_fields(MM_i)))
  Next

  ' append the query string to the redirect URL
  If (MM_editRedirectUrl <> "" And Request.QueryString <> "") Then
    If (InStr(1, MM_editRedirectUrl, "?", vbTextCompare) = 0 And Request.QueryString <> "") Then
      MM_editRedirectUrl = MM_editRedirectUrl & "?" & Request.QueryString
    Else
      MM_editRedirectUrl = MM_editRedirectUrl & "&" & Request.QueryString
    End If
  End If

End If
%>
<%
' *** Insert Record: construct a sql insert statement and execute it

Dim MM_tableValues
Dim MM_dbValues

If (CStr(Request("MM_insert")) <> "") Then

  ' create the sql insert statement
  MM_tableValues = ""
  MM_dbValues = ""
  For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2
    MM_formVal = MM_fields(MM_i+1)
    MM_typeArray = Split(MM_columns(MM_i+1),",")
    MM_delim = MM_typeArray(0)
    If (MM_delim = "none") Then MM_delim = ""
    MM_altVal = MM_typeArray(1)
    If (MM_altVal = "none") Then MM_altVal = ""
    MM_emptyVal = MM_typeArray(2)
    If (MM_emptyVal = "none") Then MM_emptyVal = ""
    If (MM_formVal = "") Then
      MM_formVal = MM_emptyVal
    Else
      If (MM_altVal <> "") Then
        MM_formVal = MM_altVal
      ElseIf (MM_delim = "'") Then  ' escape quotes
        MM_formVal = "'" & Replace(MM_formVal,"'","''") & "'"
      Else
        MM_formVal = MM_delim + MM_formVal + MM_delim
      End If
    End If
    If (MM_i <> LBound(MM_fields)) Then
      MM_tableValues = MM_tableValues & ","
      MM_dbValues = MM_dbValues & ","
    End If
    MM_tableValues = MM_tableValues & MM_columns(MM_i)
    MM_dbValues = MM_dbValues & MM_formVal
  Next
  MM_editQuery = "insert into " & MM_editTable & " (" & MM_tableValues & ") values (" & MM_dbValues & ")"

  If (Not MM_abortEdit) Then
    ' execute the insert
    Set MM_editCmd = Server.CreateObject("ADODB.Command")
    MM_editCmd.ActiveConnection = MM_editConnection
    MM_editCmd.CommandText = MM_editQuery
    MM_editCmd.Execute
    MM_editCmd.ActiveConnection.Close

    If (MM_editRedirectUrl <> "") Then
      Response.Redirect(MM_editRedirectUrl)
    End If
  End If

End If
%>
<%
Dim rsIndkobskurv__MMColParam
rsIndkobskurv__MMColParam = Session.SessionID
%>
<%
Dim rsIndkobskurv
Dim rsIndkobskurv_numRows

Set rsIndkobskurv = Server.CreateObject("ADODB.Recordset")
rsIndkobskurv.ActiveConnection = MM_database_STRING
rsIndkobskurv.Source = "SELECT * FROM indkoebskurv WHERE sessionID = " + Replace(rsIndkobskurv__MMColParam, "'", "''") + ""
rsIndkobskurv.CursorType = 0
rsIndkobskurv.CursorLocation = 2
rsIndkobskurv.LockType = 1
rsIndkobskurv.Open()

rsIndkobskurv_numRows = 0
%>
<%
Dim rsKunde__MMColParam
rsKunde__MMColParam = Session.SessionID
%>
<%
Dim rsKunde
Dim rsKunde_numRows

Set rsKunde = Server.CreateObject("ADODB.Recordset")
rsKunde.ActiveConnection = MM_database_STRING
rsKunde.Source = "SELECT * FROM kunder WHERE LastSession = '" + Replace(rsKunde__MMColParam, "'", "''") + "'"
rsKunde.CursorType = 0
rsKunde.CursorLocation = 2
rsKunde.LockType = 1
rsKunde.Open()

rsKunde_numRows = 0
%>
<%
Dim rsLevering__MMColParam
rsLevering__MMColParam = Session.SessionID
%>
<%
Dim rsLevering
Dim rsLevering_numRows

Set rsLevering = Server.CreateObject("ADODB.Recordset")
rsLevering.ActiveConnection = MM_database_STRING
rsLevering.Source = "SELECT * FROM levering WHERE sessionID = '" + Replace(rsLevering__MMColParam, "'", "''") + "'"
rsLevering.CursorType = 0
rsLevering.CursorLocation = 2
rsLevering.LockType = 1
rsLevering.Open()

rsLevering_numRows = 0
%>
<%
Dim rsFragt__MMColParam
rsFragt__MMColParam = Session.SessionID
%>
<%
Dim rsFragt
Dim rsFragt_numRows

Set rsFragt = Server.CreateObject("ADODB.Recordset")
rsFragt.ActiveConnection = MM_database_STRING
rsFragt.Source = "SELECT * FROM levering WHERE sessionID = '" + Replace(rsFragt__MMColParam, "'", "''") + "' ORDER BY IDlevering DESC"
rsFragt.CursorType = 0
rsFragt.CursorLocation = 2
rsFragt.LockType = 1
rsFragt.Open()

rsFragt_numRows = 0
%>
<%
Dim rsTotalPris__MMColParam
rsTotalPris__MMColParam = Session.SessionID
%>
<%
Dim rsTotalPris
Dim rsTotalPris_numRows

Set rsTotalPris = Server.CreateObject("ADODB.Recordset")
rsTotalPris.ActiveConnection = MM_database_STRING
rsTotalPris.Source = "SELECT * FROM indkoebskurv WHERE sessionID = " + Replace(rsTotalPris__MMColParam, "'", "''") + ""
rsTotalPris.CursorType = 0
rsTotalPris.CursorLocation = 2
rsTotalPris.LockType = 1
rsTotalPris.Open()

rsTotalPris_numRows = 0
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body onload="document.forms[0].submit();">
<form ACTION="<%=MM_editAction%>" METHOD="POST" name="ordre" id="ordre"><input name="sessionID" type="hidden" id="sessionID" value="<%=Session.SessionID%>">
  <input name="kundeID" type="hidden" id="kundeID" value="<%=(rsKunde.Fields.Item("IDkunde").Value)%>">
  <input name="Status" type="hidden" id="Status" value="Ny">
  <input name="Dato" type="hidden" id="Dato" value="<%=Date()%>">
  <input name="Tid" type="hidden" id="Tid" value="<%=Time()%>">
<input name="Beloeb" type="hidden" id="Beloeb" value="<%
If ((rsFragt.Fields.Item("Levering").Value)="Danmark") OR ((rsFragt.Fields.Item("Levering").Value)="Europa - Express") OR ((rsFragt.Fields.Item("Levering").Value)="Europa - Budget") Then

resul = 0 
do while not rsTotalPris.EOF 
mellemresultat = (cdbl(rsTotalPris("Pris")))*(cdbl(rsTotalPris("Antal")))
resul = resul + mellemresultat
rsTotalPris.Movenext
loop
response.write Formatnumber(resul+(rsFragt.Fields.Item("Fragt").Value),2)

Else

resul = 0 
do while not rsTotalPris.EOF 
mellemresultat = (cdbl(rsTotalPris("Pris")))*(cdbl(rsTotalPris("Antal")))
resul = resul + mellemresultat
rsTotalPris.Movenext
loop
response.write Formatnumber(((resul*0.8)+rsFragt("Fragt")),2)

End if
%>">
  <input name="Betalingsform" type="hidden" id="Betalingsform" value="<%=Request.QueryString("Betalingsform")%>">
  <input name="Destination" type="hidden" id="Destination" value="<%=(rsLevering.Fields.Item("Levering").Value)%>">
  <input name="Fragt" type="hidden" id="Fragt" value="<%=(rsLevering.Fields.Item("Fragt").Value)%>">
  <input type="hidden" name="MM_insert" value="ordre">
</form>
</body>
</html>
<%
rsIndkobskurv.Close()
Set rsIndkobskurv = Nothing
%>
<%
rsKunde.Close()
Set rsKunde = Nothing
%>
<%
rsLevering.Close()
Set rsLevering = Nothing
%>
<%
rsFragt.Close()
Set rsFragt = Nothing
%>
<%
rsTotalPris.Close()
Set rsTotalPris = Nothing
%>
Avatar billede soes Nybegynder
20. juli 2004 - 13:22 #1
nu er det temmelig uoverskueligt når man første gang ser på din kode (Tak DW) men hvad bruger du til ordre nummer i din database?
Jeg vil mene at det nemmeste ville være at lade det være et fortløbende nummer som repræsentere ordrenummeret, det burde ikke give problemer.
Avatar billede pelskee Nybegynder
23. juli 2004 - 11:43 #2
jeg bruger min nøgle som ordrenummer - det er et fortløbende tal.
Avatar billede soes Nybegynder
24. juli 2004 - 00:17 #3
vil det sige at den samme nøgle bliver oprettet to gange i databasen?

(jeg smutter på ferie i morgen så der går nok lidt tid inden at jeg svarer...)
Avatar billede pelskee Nybegynder
09. august 2004 - 10:27 #4
yep. lukker og laver nyt
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