|  | 		    
					
        
         
          
         
	
          | |  | 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
 
 
 
 
 
 |  |  | 
 |  |