/ 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
insert sql script
Fra : Jeppe Søndergaard


Dato : 21-03-09 22:39

hej med jer jeg håber der er en eller anden der kan hjælpe mig med at få
indføjet (ADRESSE og POSTNR) det er
et sql script her er så selve den linje der driller mig

strSQL = "Insert into kunder (Navn) values('" & Request.Form("Navn") & "')"
hvordan kommer jeg vedre så jeg kan få adressse ind efter navn

hilsen jeppe


 
 
Stig Johansen (21-03-2009)
Kommentar
Fra : Stig Johansen


Dato : 21-03-09 23:05

Jeppe Søndergaard wrote:

> hej med jer jeg håber der er en eller anden der kan hjælpe mig med at få
> indføjet (ADRESSE og POSTNR) det er
> et sql script her er så selve den linje der driller mig
>
> strSQL = "Insert into kunder (Navn) values('" & Request.Form("Navn") &
> "')" hvordan kommer jeg vedre så jeg kan få adressse ind efter navn

Du skal bare lave dem med kommaer imellem.
Så i princippet med adresse:
strSQL = "Insert into kunder (Navn,Adresse) values('" & Request.Form("Navn")
& ','" & Request.Form("Adresse") & "')"

På samme måde fortsætter du med de andre felter.
Men lige et par ting.
At bruge indholdet fra Request.Form direkte i en SQL sætning er fy-fy, da
det giver sårbarhed overfor SQL injection.

Du skal som minimum lave en replace af ' til '' (=2 stk ') i variablerne fra
Request.Form.

Hvis det er en Access database er det sådan set godt nok, men hvis det er
andre databaser bør du bruge parameterized queries.

Start med at udskrive SQL strengen i stedet for at eksekvere den.
Response.write strSQL

Her kan man nemmere se om den færdigbyggede SQL er rigtig.
I det her tilfælde skal den være
Insert into kunder(Navn,Adresse) values('navnet','adressen')

Postnummer skriver du også, hvis det er et tal felt, skal der ikke være 'er
om værdien.


--
Med venlig hilsen
Stig Johansen

Jeppe Søndergaard (22-03-2009)
Kommentar
Fra : Jeppe Søndergaard


Dato : 22-03-09 01:25

hej igen efter at jeg skrev som stig beskrev ind så nu får jeg den fejl
meddelse nedenuder, og til dit spørsmål om det er access database så er det
og hele guiden er hentet her http://www.html.dk/tutorials/asp/lektion20.asp
så jeg har bare fulgt hans guide til at lave en script til at indsætte data
men er der nogen der har et bedre link til et indsæt script så høre jeg
gerne da jeg er ren nybegynder i asp

Microsoft VBScript compilation error '800a03ea'

Syntax error

/indsaet.asp, line 12

strSQL = "Insert into kunder (Navn,Adresse) values('" &
Request.Form("Navn")& ','" & Request.Form("Adresse") & "')"

hvad kan det være for den virker udmærket godt når kun har Navn alene og
ikke adresse så jeg håber i kan hjælpe mig med den fejl for at gøre det
nemre paster jeg lige hele sidens kode neduder her
------
<html>
<head>
<title>Indsætte data i databasen</title>
<%
' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("fpdb/database.mdb")
Conn.Open DSN

' SQL sætning opbygges
strSQL = "Insert into kunder (Navn,Adresse) values('" &
Request.Form("Navn")& ','" & Request.Form("Adresse") & "')"

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

' Luk databaseforbindelse
Conn.Close
Set Conn = Nothing
%>
</head>
<body>

<h1>Databasen er opdateret!</h1>
</body>
</html>
----------
med venlig helsen jeppe søndergaard


"Stig Johansen" <wopr.dk@gmaill.com> skrev i meddelelsen
news:49c56494$0$90262$14726298@news.sunsite.dk...
> Jeppe Søndergaard wrote:
>
>> hej med jer jeg håber der er en eller anden der kan hjælpe mig med at få
>> indføjet (ADRESSE og POSTNR) det er
>> et sql script herj er så selve den linje der driller mig
>>
>> strSQL = "Insert into kunder (Navn) values('" & Request.Form("Navn") &
>> "')" hvordan kommer jeg vedre så jeg kan få adressse ind efter navn
>
> Du skal bare lave dem med kommaer imellem.
> Så i princippet med adresse:
> strSQL = "Insert into kunder (Navn,Adresse) values('" &
> Request.Form("Navn")
> & ','" & Request.Form("Adresse") & "')"
>
> På samme måde fortsætter du med de andre felter.
> Men lige et par ting.
> At bruge indholdet fra Request.Form direkte i en SQL sætning er fy-fy, da
> det giver sårbarhed overfor SQL injection.
>
> Du skal som minimum lave en replace af ' til '' (=2 stk ') i variablerne
> fra
> Request.Form.
>
> Hvis det er en Access database er det sådan set godt nok, men hvis det er
> andre databaser bør du bruge parameterized queries.
>
> Start med at udskrive SQL strengen i stedet for at eksekvere den.
> Response.write strSQL
>
> Her kan man nemmere se om den færdigbyggede SQL er rigtig.
> I det her tilfælde skal den være
> Insert into kunder(Navn,Adresse) values('navnet','adressen')
>
> Postnummer skriver du også, hvis det er et tal felt, skal der ikke være
> 'er
> om værdien.
>
>
> --
> Med venlig hilsen
> Stig Johansen


Rune Jensen (22-03-2009)
Kommentar
Fra : Rune Jensen


Dato : 22-03-09 03:02

Jeppe Søndergaard skrev:
> hej igen efter at jeg skrev som stig beskrev ind så nu får jeg den fejl
> meddelse nedenuder, og til dit spørsmål om det er access database så er
> det og hele guiden er hentet her
> http://www.html.dk/tutorials/asp/lektion20.asp så jeg har bare fulgt
> hans guide til at lave en script til at indsætte data men er der nogen
> der har et bedre link til et indsæt script så høre jeg gerne da jeg er
> ren nybegynder i asp
>
> Microsoft VBScript compilation error '800a03ea'
>
> Syntax error
>
> /indsaet.asp, line 12
>
> strSQL = "Insert into kunder (Navn,Adresse) values('" &
> Request.Form("Navn")& ','" & Request.Form("Adresse") & "')"
^ ^
| |
Problemet

Dine anførselstegn.. du bliver ved med at have problemer med dem
;)

> hvad kan det være for den virker udmærket godt når kun har Navn alene og
> ikke adresse så jeg håber i kan hjælpe mig med den fejl for at gøre det
> nemre paster jeg lige hele sidens kode neduder her

Fordi det er rigtigt indtil og med navn -
Nu gjorde jeg lige sådan som Stig foreslog og skilte dine anførselstegn
fra hinanden - husk at ' _ikke_ er det samme som " selv om de begge er
anførselstegn. Et par " er indhegningen i VBscript, mens et par ' er
indhegning i SQL. Hvad du laver med scriptet (genererer) er
SQL-statement, men det gøres med VBscript.

Her er linjen forklaret:
strSQL = "Insert into kunder (Navn,Adresse) values('" &

Her er den god nok. Du starter med en " og slutter med en ". At der er
en ' inde i er fint, da de to " " omkranser den - en afsluttende ' skal
så også bare være i en " " på et tidspunkt for at få valid SQL


Request.Form("Navn")& ','" & Request.Form("Adresse") & "')"


Navn er god nok

så lægger du en ny streng til med & - eller forsøger på det, og det er
her, det går galt

Med & ','" der går du uden for ASP lige pludselig. Du har en afsluttende
" men ingen begyndelse, og det huskes at både ' og " optræder i par.
Dvs. du prøver at plusse med ',' og det mås man ikke, da du er i
VBscript ikke SQL.

Request.Form("Navn")& "','" & Request.Form("Adresse") & "')"

...bør virke.

...her har du også en afsluttende ' i en " " til sidst, så det bør give
valid SQL.

Som andre også har skrevet, kan det være en fordel at dele det op, og så
udskrive det med response.write i stedet for at tildele det i en
variabel. Start fra bunden og læg ny del til (inddelt faktisk af hvert
&-tegn), indtil den viser fejl. Det, som bliver udskrevet er din SQL.


Sikkerhed
---------

Jeg er i tvivl om, du har sikkerheden med. Normalt vil man altid
validere inputs - her fra en form - sådan at man er sikker på, den alene
indeholder data, man er interesseret i at arbejde videre med. Navn og
adresse f.eks. bør tjekkkes for, at de alene indeholder alfanumeriske
tegn, punktum og space, og hvis noget ud over det, så bare blokér for
videre kørsel (nåhja, man kan selvfølgelig lige give en fejlmelding til
brugeren).

Lyder det rigtigt (spurgte han DB-nørderne)?


MVH
Rune Jensen

Rune Jensen (22-03-2009)
Kommentar
Fra : Rune Jensen


Dato : 22-03-09 03:05

Rune Jensen skrev:

> Lyder det rigtigt (spurgte han DB-nørderne)?

...og Stig havde jo allerede svaret, da jeg spurgte
;)

Jeg må vidst lære at læse lidt mere grundigt..


MVH
Rune Jensen

Jeppe Søndergaard (22-03-2009)
Kommentar
Fra : Jeppe Søndergaard


Dato : 22-03-09 11:25

hej allesammen
mange tak for hjælpen nu virker har ellers brugt mange dage på at finde et
script som vil virke så tak for hjælpen

hilsen jeppe
"Rune Jensen" <runeofdenmark@gmail.com> skrev i meddelelsen
news:49c59ccb$0$25186$456a7185@news.cirque.dk...
> Rune Jensen skrev:
>
>> Lyder det rigtigt (spurgte han DB-nørderne)?
>
> ..og Stig havde jo allerede svaret, da jeg spurgte
> ;)
>
> Jeg må vidst lære at læse lidt mere grundigt..
>
>
> MVH
> Rune Jensen


Jørn Andersen (22-03-2009)
Kommentar
Fra : Jørn Andersen


Dato : 22-03-09 02:57

On Sun, 22 Mar 2009 01:25:18 +0100, Jeppe Søndergaard
<jeppe@skala-n.com> wrote:

>Microsoft VBScript compilation error '800a03ea'
>
>Syntax error
>
>/indsaet.asp, line 12
>
>strSQL = "Insert into kunder (Navn,Adresse) values('" &
>Request.Form("Navn")& ','" & Request.Form("Adresse") & "')"

Der mangler et " efter Request.Form("Navn")& (i Stigs svar).

Prøv med:
strSQL = "Insert into kunder (Navn, Adresse) values('" &
Request.Form("Navn") & "', '" & Request.Form("Adresse") & "')"
(det hele på én linie)

eller:
strSQL = "Insert into kunder (Navn, Adresse)" & _
" values('" & Request.Form("Navn") & "', '" & _
Request.Form("Adresse") & "')"
(med linieskift)

Derudover er det en rigtig dårlig idé at have Request-resultater direkte
i en SQL-streng. Når du har fået det til at virke, så se mere her:
<url: http://www.asp-faq.dk/article/?id=95>

Good luck!

--
Jørn Andersen,
Brønshøj

Stig Johansen (22-03-2009)
Kommentar
Fra : Stig Johansen


Dato : 22-03-09 06:00

Jørn Andersen wrote:

> Der mangler et " efter Request.Form("Navn")& (i Stigs svar).

FFS det er pinligt, det er vist ikke så lang tid siden jeg lavede samme
smutter.

Jeg vil stadig foreslå at bruge en editor med syntax highlighting, eks
hapedit:
http://hapedit.free.fr/

Her ville fejlen springe lige i øjnene.
Hvorfor opdagede jeg det så ikke, kan man spørge?

Jo, det er fordi jeg næsten altid bruger min Linux til news/web, og det er
ikke altid jeg starter min windows PC op for at teste.

Beklager fejlen, men bare rolig, det vil garanteret ske igen B:)

--
Med venlig hilsen
Stig Johansen

Stig Johansen (22-03-2009)
Kommentar
Fra : Stig Johansen


Dato : 22-03-09 06:20

Jørn Andersen wrote:

> Når du har fået det til at virke, så se mere her:
> <url: http://www.asp-faq.dk/article/?id=95>

Bliver den egentlig vedligeholdt ?

SQL injection er lige så stort et problem på almindelige klienter som alle
andre steder, og 'vi' har kendt til problemet, og brugen af parameterized
queries, siden ca. '95-'96.

Metoden med blot at replace ' til '' (2 stk ') er ikke holdbar til andet end
Access (I princippet bør den udvides med %00).

Hvis man er nysgerrig over eksempler fra det virkelige liv, lavede jeg
sidste år en beskrivelse af fremgangsmåde og metodik af de SQL injection
bølger, der hærgede verden sidste forår-sommer.
Den er muligvis lidt langhåret, men giver en ide om 'how it's done'.
Bemærk, at der slet ikke indgår '-er i injection forsøget, samt at man
benytter talfelter, hvor man traditionelt ikke validerer overhovedet.
Avisoverskrifterne med 'to millioner PC'ere inficeret i England', 'Diverse
offentlige sider inficeret via SQL injection, taler sit sørgelige sprog om
den generellle tilstand.
<http://w-o-p-r.dk/storm.monitor/SQL.injection/how.it.is.done.asp>

Jeg kan forestille mig, at der ikke har været taget stilling til eks. MS
SQLServer på tidspunktet hvor artiklen blev skrevet, da MS SQLServer
dengang kostede 2 spidser af en jetjager for at bruge på Web.

Det er ikke så lang tid siden jeg synes jeg så et indlæg fra Leif Neland,
hvor han havde eksempel på SELECT med parameterized queries, og jeg har
selv postet lidt hist og pist med INSERT med ditto.

Jeg vil foreslå, at artiklen bliver opdateret med en overskrift/advarsel om,
at man kun bør bruge denne metodik med Access (og lige udvide den med %00).

Derudover bør nogen lave en artikel med den rigtige metode, altså
parameterized queries.

Jeg er desværre ikke den store pædagog og skribent, men jeg vil godt bidrage
med code snippets, hvis der er nogen der vil påtage sig skriveopgaven.

--
Med venlig hilsen
Stig Johansen

Jørn Andersen (22-03-2009)
Kommentar
Fra : Jørn Andersen


Dato : 22-03-09 08:12

On Sun, 22 Mar 2009 06:20:22 +0100, Stig Johansen <wopr.dk@gmaill.com>
wrote:

>Jørn Andersen wrote:
>
>> Når du har fået det til at virke, så se mere her:
>> <url: http://www.asp-faq.dk/article/?id=95>
>
>Bliver den egentlig vedligeholdt ?

Svjh var det Jens Gyldenkærne Clausen, der meldte sig - ikke til selv at
være aktiv vedligheholder, men til at hjælpe andre, der havde lyst til
at skrive, med at få det op på serveren.

Så prøv evt. at kontakte ham - han er også MS SQL-erfaren (blandt meget
andet).
Jeg har dog ikke set ham ret meget på Usenet i længere tid - sidst
vistnok for et halvt års tiden i .database-gruppen.


Mvh. Jørn

--
Jørn Andersen,
Brønshøj

Stig Johansen (22-03-2009)
Kommentar
Fra : Stig Johansen


Dato : 22-03-09 09:07

Jørn Andersen wrote:

> Så prøv evt. at kontakte ham - han er også MS SQL-erfaren (blandt meget
> andet).

Det kan lyde lidt hårdt, men jeg har absolut ingen (personlig) interesse i
at få ændret den artikel.

Nu nævnte jeg MS SQLServer, men det gælder alle 'større' databaser.

I og med du henviser til den (artiklen), troede jeg bare du havde 'en finger
med i spillet'.

Som Leif var inde på, tror jeg man er bedre tjent ved at fjerne den, end at
henvise til den.

Min interesse er kun at påpege nogle problemstillinger, ikke at servere
færdige løsninger.

--
Med venlig hilsen
Stig Johansen

Rune Jensen (22-03-2009)
Kommentar
Fra : Rune Jensen


Dato : 22-03-09 09:00

Stig Johansen skrev:

> Derudover bør nogen lave en artikel med den rigtige metode, altså
> parameterized queries.

Jeg mangler selv den del til en artikel om emnet SQL-injections på min
side, men...

> Jeg er desværre ikke den store pædagog og skribent, men jeg vil godt bidrage
> med code snippets, hvis der er nogen der vil påtage sig skriveopgaven.

Man kunne måske bruge Jeppes kode som eksempel? Hvordan ville det skulle
laves med parameterized queries?

Som sagt har jeg en artikel, som bevæger sig på emnet, og jeg mangler de
oplysninger om PQ, men måske det er meget smart de oplysninger også står
et sted, som ikke bare går ned eller forsvinder. Nyhedsgruppernes
spørgsmål og svar er jo lagt ud på flere servere, og forsvinder ikke
bare sådan eller går ned. Desuden, kan det jo gennemgås af flere her,
det vil give artiklen mere værdi at flere med fornøden viden har
accepteret de oplysninger, den er baseret på.

Der er et ret stort behov for den viden, folk ved det bare ikke altid at
de har det behov.. opdager det måske først, når deres side ser underlig
ud med kode de ikke selv har lavet.

Der skal nok være noget om validering af input/output også. So far er
den eneste metode jeg kender til at teste, om noget er f.eks.
alfanumerisk at bruge RegExp - det er ret komplekst, og ikke specielt
morsomt, så det ville være dejligt med en alternativ metode. Jeg
overvejede faktisk nogle standard functions til det.

Noget om fremgangsmåden og rækkefølgen, kunne være interessant, altså
skal man validere på input output altid, hvordan gør man dette, hvor/i
hvilke tilfælde er der mulighed for injections (POST/GET,
forms/querystring - cookies? bruger nogen det til DB?), samt det med
parameterized queries og evt. tillægsmuligheder for sikkerhed i den
forbindelse samt om, hvor sikker metoderne er. Så vidt jeg ved, er PQ
ret sikker.


MVH
Rune Jensen

Stig Johansen (22-03-2009)
Kommentar
Fra : Stig Johansen


Dato : 22-03-09 12:42

"Rune Jensen" <runeofdenmark@gmail.com> wrote in message
news:49c5f00f$0$25178$456a7185@news.cirque.dk...
> Man kunne måske bruge Jeppes kode som eksempel? Hvordan ville det skulle
> laves med parameterized queries?

Jeg synes ikke det er passende at referere til givne personer.

> Som sagt har jeg en artikel, som bevæger sig på emnet, og jeg mangler de
> oplysninger om PQ, men måske det er meget smart de oplysninger også står
> et sted, som ikke bare går ned eller forsvinder. Nyhedsgruppernes
> spørgsmål og svar er jo lagt ud på flere servere, og forsvinder ikke
> bare sådan eller går ned.

Næh, den føromtalte artikel består tilsyneladende.

> Desuden, kan det jo gennemgås af flere her,
> det vil give artiklen mere værdi at flere med fornøden viden har
> accepteret de oplysninger, den er baseret på.
>
> Der er et ret stort behov for den viden, folk ved det bare ikke altid at
> de har det behov.. opdager det måske først, når deres side ser underlig
> ud med kode de ikke selv har lavet.
>
> Der skal nok være noget om validering af input/output også. So far er
> den eneste metode jeg kender til at teste, om noget er f.eks.
> alfanumerisk at bruge RegExp - det er ret komplekst, og ikke specielt
> morsomt, så det ville være dejligt med en alternativ metode. Jeg
> overvejede faktisk nogle standard functions til det.

Budskabet er, at man behøver slet ikke 'validering' med alle mulige former
for begrænsninger/regexp/'jeg skal gi dig skal jeg', blot at lave
parameterized queries, så skal man ikke tænke på mere.

Eksempel på 'noget', hvor man kan taste hvadsomhelst:
MessageVersionDelta = MessageVersionDelta + 1
sql="INSERT INTO Messages VALUES(" + _
cStr(MessageVersion+MessageVersionDelta)+"," + _
cStr(UserId)+","+ _
MessageType + "," + _
"?,'"+ _
cStr(Now)+"')"
if debug then Response.Write sql + "<br />"

AdoCommandMessage.CommandText = sql
AdoCommandMessage(0) = MessageBody
AdoCommandMessage.Execute

Bemærk her, at kun MessageBody er input fra brugeren, og kan indeholde
hvadsomhelst (uden det kan gøre skade)

--
Med venlig hilsen/Best regards
Stig Johansen




Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste