03. november 2003 - 20:49Der er
14 kommentarer og 1 løsning
Indsætter to gange i database:
Hej eksperter...
Jeg har følgende script, der skal sætte data fra en formular ind i en acces-database:
<% ' først tjekker jeg om alle felter er udfyldt if Request.Form("navn") = "" then Response.Write "Du har glemt at skrive dit navn.<br><br><a href=""java script:history.go(-1)"">Prøv igen</a>" elseif Request.Form("navn") = "webmaster" or Request.Form("navn") = "Webmaster" then Response.Write "Kun webmaster må bruge dette navn.<br><br><a href=""java script:history.go(-1)"">Prøv igen</a>" elseif Request.Form("email") = "" then Response.Write "Du har glemt at skrive din e-mail.<br><br><a href=""java script:history.go(-1)"">Prøv igen</a>" elseif Request.Form("katagori") = "tom" then Response.Write "Du har ikke valgt en katagori.<br><br><a href=""java script:history.go(-1)"">Prøv igen</a>" elseif Request.Form("titel") = "" then Response.Write "Du har ikke givet din artikel en titel.<br><br><a href=""java script:history.go(-1)"">Prøv igen</a>" elseif Request.Form("artikel") = "" then Response.Write "Du har ikke skrevet en artikel.<br><br><a href=""java script:history.go(-1)"">Prøv igen</a>" else ' Så åbner jeg databasen Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("/db/Leksikon.mdb") Conn.Open DSN strSQL = "SELECT * FROM Leksikon WHERE Katagori='" & Request.Form("katagori") & "' And Titel ='" & Request.Form("titel") & "'" Set rs = Conn.Execute(strSQL)
'hvis en artikel med den titel er oprettet, skal bruger rette det, ellers indsættes data i databasen if (rs.bof or rs.eof) then strSQL1 = "INSERT into Leksikon (Katagori, Titel, Indhold, Navn, Email) values('" & Request.Form("katagori") & "', '" & Request.Form("titel") & "', '" & Request.Form("artikel") & "', '" & Request.Form("navn") & "', '" & Request.Form("email") & "')" Conn.Execute (strSQL1) Response.write "Korrekt indsat" else Response.Write "Der findes allerede en artikel i katagorien: " & request.Form("katagori") & ", med titlen: " & request.Form("titel") & "!<br>Du må ændre titlen. Klik <a href=""java script:history.go(-1)"">her</a>" end if
' Luk databaseforbindelse Conn.Close Set Conn = Nothing end if %>
Problemet er, at hvis man glemmer at udfylde et af felterne korrekt, og bliver bedt om at springe et trin tilbage og rette det, vil den i anden omgang prøve at indsætte dataene to gange (hvilket den ikke kan pga. if (rs.bof or rs.eof) then betingelsen).
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
Slettet bruger
03. november 2003 - 20:56#1
Prøv dette: else set rs=Nothing Response.Write "Der findes allerede en artikel i katagorien: " & request.Form ("katagori") & ", med titlen: " & request.Form("titel") & "!<br>Du må ændre titlen. Klik <a href=""java script:history.go(-1)"">her</a>" end if
Blot en tanke, .... hvorfor lader du serveren lave arbejdet med valideringen, hvorfor laver du det ikke clientside istedet og så først tillader submit når alle felter er udfyldt ?
Er det alt koden til siden? Det lyder underlidt den både viser en fejl og forsøger at sætte ind i databasen. Det skulle efter det jeg kan se ikke være muligt med den if then elseif then elseif osv. du har lavet.
Det I ser er hele body af siden, så ja, det er det! Jeg forstår det heller ikke!
Indtaster man alle data i formularen korrekt første gang, er der ingen problemer. Det er kun hvis man bliver sendt tilbage for at rette, at den kokser!
Et helt andet alternativ kunne være, istedet for at lave en history.go(-1) , så istedet referere "fremad" til en ny formside, hvor du så udfylder parametrene, og når du submitter derfra, vil det være en ren submit.
For mig at se, er der intet galt med dit script. Du har ingen løkker der kan blive kørt en enkelt gang for meget ved et uheld eller lign...
Hvad hvis du først mangler to felter, hopper tilbage og udfylder det ene, så når du trykker submit fejler den igen med det andet du glemte at udfylde. Du hopper tilbage igen-igen, og udfylder det sidste. Vil den så indsætte tre gange?
Mit forslag må så være som tidligere: Istedet for at sende brugeren retur til forrige side, så lav send brugeren "fremad" istedet, til en ny form-side, hvor der så eventuelt gøres opmærksom på hvilke felter der skal rettes. Eventuelt en HTTP-redirect?
Jeg kan virkelig ikke se hvad der skulle være galt. Måske noget browser konfigurering. Prøv eventuelt at teste med en anden browser. Du kan jo downloade Mozilla Firebird. Det er en net lille browser der kan hentes på mozilla.org
Jeg har haft andre til at se på mit script, uden at de kan forklare, hvad der er galt. Min webudbyder ved heller ikke hvor fejlen ligger, så nu har jeg fundet et helt andet alternativ. Jeg håber der er forståelse for at jeg beholder p selv... ellers må I jo brokke jer!
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.