/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
indsæt data i database via formular
Fra : Brian Gregersen


Dato : 21-01-03 00:47

Ny synes jeg lige det gik godt med at hente data fra en database,
men det driller at ligge data i en database via en formular.

Jeg bruger asp og access 2002.

I en html formular sendes man videre til
form_crossdu032.asp via

<FORM action="form_crossdu032.asp" method="post" onSubmit="return
afsendelse(this)">

form_crossdu032.asp filen ser sådan ud.

<!--#include file="dsn.asp"-->

strSQL = "Insert into personer (Fornavn, Efternavn, Adresse,
Postnr, By, Telefon, Emailadr, Foedselsaar, Koen, Klub, Licensnr)
values('" & Request.Form("Fornavn") & "', '" &
Request.Form("Efternavn") & "', '" & Request.Form("Adresse") &
"', '" & Request.Form("Postnr") & "', '" & Request.Form("By") &
"', '" & Request.Form("Telefon") & "', '" &
Request.Form("Emailadr") & "', '" & Request.Form("Foedselsaar") &
"', '" & Request.Form("Koen") & "', '" & Request.Form("Klub") &
"', '" & Request.Form("Licensnr") & "')"

'SQL sætning eksekveres
'Response.write strSQL
Conn.Execute(strSQL)

<!--#include file="dsn2.asp"-->

dsn åbner og lukke databasen og virker fint når jeg henter data
til en startliste.

Jeg har læst et sted at man skulle skive Response.write strSQL
for at se hvordan strengen strSQL ser ud. Det giver dette svar

Insert into personer (Fornavn, Efternavn, Adresse, Postnr, By,
Telefon, Emailadr, Foedselsaar, Koen, Klub, Licensnr)
values('Brian', 'Gregersen', 'yyy', '5230', 'Odense M', 'xxxx',
'bgr@chem.sdu.dk', '1971', 'Mand', 'Odense Triathlon Klub',
'')

Undlader jeg den linje og skriver Conn.Execute(strSQL)
giver det fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT
INTO statement.

/crossdu03/tilmeld/form_crossdu032.asp, line 37

Linje 37 er Conn.Execute(strSQL)

Jeg har kolonner i databasen som ikke udfyldes heriblandt ID som
er nøgle og autonummering.

Nogle af posterne er tal format Postnr, telefon, foedselsaar og
licensnr.

Hvad gør jeg galt?

Håber en venlig sjæl kan hjælpe en nybegynder.

Hilsen
Brian G.










--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Jesper Stocholm (21-01-2003)
Kommentar
Fra : Jesper Stocholm


Dato : 21-01-03 00:55

Brian Gregersen wrote :

> Ny synes jeg lige det gik godt med at hente data fra en database,
> men det driller at ligge data i en database via en formular.
>
> Jeg bruger asp og access 2002.

> Jeg har læst et sted at man skulle skive Response.write strSQL
> for at se hvordan strengen strSQL ser ud. Det giver dette svar
>
> Insert into personer (Fornavn, Efternavn, Adresse, Postnr, By,

"By" er et reserveret ord i Access. Du kan ændre dette ved at "omklamre"
feltnavnet med firkantede parenteser - dvs som [By]. Alternativt kan du jo
give feltet et andet navn.



--
Jesper Stocholm - http://stocholm.dk
www.asp-faq.dk : FAQ for dk.edb.internet.webdesign.serverside.asp
www.usenet.dk/netikette/citatteknik.html : Skriv under det du svarer på
Svar til gruppen og ikke til mig privat !

Brian Gregersen (21-01-2003)
Kommentar
Fra : Brian Gregersen


Dato : 21-01-03 01:11

> "By" er et reserveret ord i Access. Du kan ændre dette ved at "omklamre"
> feltnavnet med firkantede parenteser - dvs som [By]. Alternativt kan du jo
> give feltet et andet navn.

Tusind tak for hjælpen, jeg kunne simpelthen ikke fatte hvad jeg havde gjort
galt. Men sådan er det når man man forsøger på den hårde måde lån og prøv
dig frem.

bye bye




>
>
>
> --
> Jesper Stocholm - http://stocholm.dk
> www.asp-faq.dk : FAQ for dk.edb.internet.webdesign.serverside.asp
> www.usenet.dk/netikette/citatteknik.html : Skriv under det du svarer på
> Svar til gruppen og ikke til mig privat !


--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

F.Larsen (21-01-2003)
Kommentar
Fra : F.Larsen


Dato : 21-01-03 21:42

"Brian Gregersen" <bgr@chem.sdu.dk> wrote in message
news:b0i1ou$fl1$1@sunsite.dk...
> strSQL = "Insert into personer (Fornavn, Efternavn, Adresse,
> Postnr, By, Telefon, Emailadr, Foedselsaar, Koen, Klub, Licensnr)
> values('" & Request.Form("Fornavn") & "', '" &
> Request.Form("Efternavn") & "', '" & Request.Form("Adresse") &
> "', '" & Request.Form("Postnr") & "', '" & Request.Form("By") &
> "', '" & Request.Form("Telefon") & "', '" &
> Request.Form("Emailadr") & "', '" & Request.Form("Foedselsaar") &
> "', '" & Request.Form("Koen") & "', '" & Request.Form("Klub") &
> "', '" & Request.Form("Licensnr") & "')"
>
> 'SQL sætning eksekveres
> 'Response.write strSQL
> Conn.Execute(strSQL)

Brian ... hvad nu hvis jeg intaster følgende på din web side som Licensnr:
'); drop table personer; --

eller:
'

hvad sker der så ?

hint: input validering!
http://online.securityfocus.com/infocus/1603 (punkt#5)

--
Flemming
http://home.cbkn.dk/Spyware/
http://home.cbkn.dk/Spam/






Brian Gregersen (22-01-2003)
Kommentar
Fra : Brian Gregersen


Dato : 22-01-03 09:07

> Brian ... hvad nu hvis jeg intaster følgende på din web side som Licensnr:
> '); drop table personer; --
>
> eller:
> '
>
> hvad sker der så ?

Det er løst med en funktion.
Hvad hvis et felt er tomt???
Sidste 2 felter er valgfri men udfyldes de ikke giver det følgende fejl.

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria
expression.

/crossdu03/tilmeld/form_godkend.asp, line 54

line 54 er Conn.Execute(SQL)
hilsen
Brian

>
> hint: input validering!
> http://online.securityfocus.com/infocus/1603 (punkt#5)
>
> --
> Flemming
> http://home.cbkn.dk/Spyware/
> http://home.cbkn.dk/Spam/
>
>
>
>
>


--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

F.Larsen (22-01-2003)
Kommentar
Fra : F.Larsen


Dato : 22-01-03 12:11

"Brian Gregersen" <bgr@chem.sdu.dk> wrote in message
news:b0ljfq$dq6$1@sunsite.dk...
> Sidste 2 felter er valgfri men udfyldes de ikke giver det følgende fejl.
>
> Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
>
> [Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria
> expression.

der er klassisk SQL injection problem med den form for kode hvor man ikke
foretager grundig validering af input.

Check derfor input og returner en fejl til brugeren inden du opbygger din
SQL sætning, ellers er skaden sket.
iøvrigt skal citationstegn altid "dobbelt qoutes" når de indgår i SQL
sætningen ... dvs Replace("'","''") ...

--
Flemming
http://home.cbkn.dk/Spyware/
http://home.cbkn.dk/Spam/



Jens Gyldenkærne Cla~ (22-01-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 22-01-03 09:56

Brian Gregersen skrev:

>> Brian ... hvad nu hvis jeg intaster følgende på din web side
>> som Licensnr: '); drop table personer; --

Så vidt jeg husker understøtter Access-driveren ikke flere
samtidige databasekald - så ovenstående vil fejle med Access. Med
andre databaser kan det til gengæld godt lade sig gøre (og der kan
bestemt også stadig udføres sql-injection med Access - bare ikke så
alvorlige som ovenstående).


> Hvad hvis et felt er tomt???

Hvis du sammensætter Request-værdien med den tomme streng slipper
du for problemer med ikke-initialiserede variabler.

Altså i stedet for

   strMail = Request.Form("mail")

skriver man

   strMail = Request.Form("mail") & ""


NB: Klip venligst det du ikke svarer på væk - se evt. min signatur.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Søg
Reklame
Statistik
Spørgsmål : 177551
Tips : 31968
Nyheder : 719565
Indlæg : 6408836
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste