Avatar billede no_doubt Nybegynder
29. marts 2008 - 21:01 Der er 9 kommentarer og
1 løsning

Spot en "fejl"

<%
session.lcid = 1030

Function DBDate(fDate)
dim fDay, fMon, fYear
fYear= Year(fDate)
fMon= Month(fDate)
fDay= Day(fDate)
fDay= right("0"&fDay, 2)
fMon= right("0"&fMon, 2)
DBDate =  "#"& fMon &"-"& fDay &"-"& fYear &"#"
end function
   
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db.mdb")

sql = "Insert into kunder (navn, adresse, tlf, mail, ip) values ('" & replace(Request.Form("navn"),"'","''") & "', '" & replace(Request.Form("adresse"),"'","''") & "', " & replace(Request.Form("tlf"),"'","''") & ", '" & replace(Request.Form("mail"),"'","''") & "', '" & Request.ServerVariables("REMOTE_ADDR") & "')"
Conn.Execute(sql)
sql2 = "select top 1 * from kunder where ip = '" & Request.ServerVariables("REMOTE_ADDR") & "' order by id desc"
set rs2 = Conn.Execute(sql2)

For Each bla in Request.Form
  If Request.Form(bla) = "ON" Then
    del = Split(bla,"_")
    Typeen = del(0)
      VaerelsesNummer = del(1)
    Datoen = del(2)
   
    sql3 = "select * from booking where dato = "&DBDate(Datoen)&""
    set rs3 = Conn.Execute(sql3)
    if rs3.eof then   

    sql4 = "Insert into booking (dato, "& Typeen & VaerelsesNummer &") values ("&DBDate(Datoen)&", '"& rs2("navn") & "_" & rs2("id") &"')"
    Conn.Execute(sql4)

    else
    sql5 = "UPDATE booking SET "& Typeen & VaerelsesNummer &" = '"& rs2("navn") & "_" & rs2("id") &"' where dato = "&DBDate(Datoen)&""
    Conn.Execute(sql5)
    end if
   
  End If
Next
response.redirect "default.asp?dato="&request.form("gemdato")&""
%>
Avatar billede erikjacobsen Ekspert
29. marts 2008 - 21:11 #1
Een fejl er at du har lavet det sådan, at man ikke kan bestille 2 gange fra samme IP-nummer. Det er for dumt. Brug et autoincrementfelt/identityfelt som unik id.

Een anden fejl er nok at betragte et telefonnummer som et tal. Det skal du opbevare som en streng.

Derudover vil vi næppe kunne finde fejlen uden at få at vide hvordan den ytrer sig.
Avatar billede no_doubt Nybegynder
29. marts 2008 - 21:26 #2
Hej Erik

Prøv at se: http://www.aqua-care.firmdesign.dk/plan/default.asp?dato=29-03-2008

Hvis man booker noget på en dag hvor der I FORVEJEN er booket melder den fejl
(update) delen

Hvis man derimod booker på en dag der er helt tom, virker det fint
(insert)
Avatar billede erikjacobsen Ekspert
29. marts 2008 - 21:37 #3
Måske fordi der står

  B_2_29-03-20081

Hvad laver det 1-tal til sidst?

Men det er altså ikke ret solid kode du laver, no_doubt. Jeg kan ikke give dig et kursus i "programmering", men der er meget du kan lære ;)
Avatar billede no_doubt Nybegynder
29. marts 2008 - 21:50 #4
Arh, copyen af nogle felter gav 1 tallet :-(

Og ip'en blev blot brugt til en test.

I forhold til id, bruger jeg da allerede et autoincrementfelt
Avatar billede no_doubt Nybegynder
29. marts 2008 - 21:51 #5
Men bukker mig i støvet, du er en gud.

Svar ?
Avatar billede erikjacobsen Ekspert
29. marts 2008 - 22:24 #6
Sikke noget vrøvl - jeg er bare lidt bedre end dig .. hehe

Nej tak, ingen point. Svar selv, accepter dit eget svar.
Avatar billede keysersoze Ekspert
29. marts 2008 - 22:56 #7
overvej også hvad der kan ske hvis to personer bestiller på samme tid - i din kode er der risiko for at de to booking-id'er forveksles...
Avatar billede no_doubt Nybegynder
30. marts 2008 - 11:56 #8
keyser...hvordan kan man undgå det ?
Avatar billede no_doubt Nybegynder
09. december 2009 - 16:06 #9
svar ?
Avatar billede no_doubt Nybegynder
27. maj 2011 - 18:42 #10
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