21. juni 2003 - 11:50Der er
15 kommentarer og 1 løsning
Hvorfor bliver Scriptet (eller SQL kaldet) udført 2 gange?
Som det 5. trin i forbindelse med at registrere en kunde tilmelding, vil jeg udføre scriptet ASP nedenunder. Det bliver kaldt som action=”post” fra en form i det 4. trin af processen. Her er der en hidden-variabel med navn ”Step” og værdi ”Order5.1”. (Jeg har planer om at have flere delskridt i scriptet, så derfor min select-konstruktion.)
Af en eller anden grund resultere det imidlertid i at kunden indsættes 2 gange! Det virker simpelthen som om at mit ASP script bliver kaldt 2 gange?!
For hver gang at jeg tilføjer en kunde, genereres der et kunde nr. til vedkommende. Dette laver jeg ved at tage det største kunde nr. indtil nu og så lægge et tilfældigt tal 1-100 til dette. Det sjove er at hver af 2 kundeinstanser får hvert sit nummer!
Og, det bliver endnu sjovere; For at få et indblik i hvad der egentlig sker, så indsatte jeg en Response.Write("DEBUG: [" & Customer_ID & "]") i scriptet. Denne er placeret lige efter at jeg har udtrukket max-værdien og før at jeg har lagt de 1-100 til.
Hvis max for Customer_ID f.eks. var 10276 før at mit script bliver kaldt, så kan de 2 nye poster f.eks. have hhv. 10334 og den næste 10349. Min debug linje skriver ”DEBUG: [10334]” -- altså værdien på den 1. af de 2 gange scriptet synes at blive udført. Det virker med andre ord som om at jeg aldrig ser resultatet af Write’en for den 1. gang scriptet køres (skulle jo give DEBUG: [10276]).
Er der nogen som kan gennemskue hvad i alverden det er der sker?
sub FastAdd1v1(AValue) SQL = SQL & "'" & AValue & "'" end sub
sub FastAdd1v2(AKey) SQL = SQL & "'" & Session("Order!" & AKey) & "'" end sub
sub FastAdd2() SQL = SQL & ", " end sub
sub AddNewCustomer() SQL = "SELECT max(Customer_ID) as Max_Customer_ID FROM acomma_Customers" set rs = Conn.Execute(SQL)
Customer_ID = rs("Max_Customer_ID") if not IsNumeric(Customer_ID) then Customer_ID = 10000 end if Response.Write("DEBUG: [" & Customer_ID & "]") Customer_ID = Customer_ID + Int(Rnd()*100) + 1
SQL = "INSERT INTO acomma_Customers VALUES (" call FastAdd1v1(Customer_ID) call FastAdd2() call FastAdd1v2("Name") call FastAdd2() call FastAdd1v2("Company") call FastAdd2() call FastAdd1v2("Address") call FastAdd2() call FastAdd1v2("Phone") call FastAdd2() call FastAdd1v2("EMail") set rs = Conn.Execute(SQL) end sub
select case Request.Form("Step")
case "Order5.1" call AddNewCustomer()
case else response.Write("ERROR IN SCRIPT (code 75)")
case else response.Write("ERROR IN SCRIPT (code 75)")
end select
sub FastAdd1v1(AValue) SQL = SQL & "'" & AValue & "'" end sub
sub FastAdd1v2(AKey) SQL = SQL & "'" & Session("Order!" & AKey) & "'" end sub
sub FastAdd2() SQL = SQL & ", " end sub
sub AddNewCustomer() SQL = "SELECT max(Customer_ID) as Max_Customer_ID FROM acomma_Customers" set rs = Conn.Execute(SQL)
Customer_ID = rs("Max_Customer_ID") if not IsNumeric(Customer_ID) then Customer_ID = 10000 end if Response.Write("DEBUG: [" & Customer_ID & "]") Customer_ID = Customer_ID + Int(Rnd()*100) + 1
SQL = "INSERT INTO acomma_Customers VALUES (" call FastAdd1v1(Customer_ID) call FastAdd2() call FastAdd1v2("Name") call FastAdd2() call FastAdd1v2("Company") call FastAdd2() call FastAdd1v2("Address") call FastAdd2() call FastAdd1v2("Phone") call FastAdd2() call FastAdd1v2("EMail") set rs = Conn.Execute(SQL) end sub
erikjacobsen -> Nej der skal ikke mere til for at fremprovokere fejlen. Der er f.eks. ikke nogen redirect indblandet.
Denne del af scriptet (kaldet inc_order5.asp) bliver inkluderet i et andet script (order5.asp) - som fungere som template for sidens gennerelle udseende (se næste post). Den bliver aktiveret via en form på den forige side (order4.asp). Efter at der trykkes på submit-knappem der, så er det pludselig to ens kunder mere i databasen.
Kan ikke anbefale at være hjælpe eller arbejder for acomma da de ikke betaler hvad de skylder folk..
Synes godt om
Ny brugerNybegynder
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.