/ 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
for mange '
Fra : pepss


Dato : 22-01-04 12:24

Hejsa NG
jeg bruger denne function alle de steder brugerne kan sjette noget ind i
databasen.

Function plingEscape(tekst)
plingEscape = Replace(tekst & "", "'", "''")
End function

en af de steder er et "brev system" men har går det lidt galt!
hvis man sender et brev hvor der stå " hej do' " bliver det så indsat som "
hej do'' " besvar man så brevet kommer der så til at stå " hej do '''' " den
skal jo så ikke mange gange frem og tilbage før det er rigtig slemt!
nå man til spørgsmålet!
går det du over "sikkerheden" ved at gøre sådan:
plingEscape = Replace(tekst & "", "'", "'' ") (altså et mellemrum efter '')?
så vil jeg jo kunne lave en replace som laver 2 ' til 1 !
for mange

--
Pepss
Den ordblinde der prøver at blive webdesigner
Fræk frækkere www.cafe-flirt.dk



 
 
Lars Hoffmann (22-01-2004)
Kommentar
Fra : Lars Hoffmann


Dato : 22-01-04 12:53


"pepss" <olefriis@privat.dk> escribió en el mensaje
news:buobto$m4d$1@sunsite.dk...
> Hejsa NG
> jeg bruger denne function alle de steder brugerne kan sjette noget ind i
> databasen.
>
> Function plingEscape(tekst)
> plingEscape = Replace(tekst & "", "'", "''")
> End function

Du mener vel:

Function plingEscape(tekst)
plingEscape = Replace(tekst, "'", "''")
End function

> en af de steder er et "brev system" men har går det lidt galt!
> hvis man sender et brev hvor der stå " hej do' " bliver det så indsat som
"
> hej do'' " besvar man så brevet kommer der så til at stå " hej do '''' "
den
> skal jo så ikke mange gange frem og tilbage før det er rigtig slemt!
> nå man til spørgsmålet!
> går det du over "sikkerheden" ved at gøre sådan:
> plingEscape = Replace(tekst & "", "'", "'' ") (altså et mellemrum efter
'')?
> så vil jeg jo kunne lave en replace som laver 2 ' til 1 !
> for mange

Nej, men det er ikke det der er problemet. Når du laver ' om til '' skrives
der kun et enkelt + til database. Pointen er at en database forstår '' som
', hvorimod den forstår ' som "tekstrengsafgrænsning"

Derfor er dit problem ikke den funktion du omtaler, men nok nærmere hvor og
hvornår du bruger den.

Kom med noget mere kode så vi nemmere kan gætte problemet.
Med venlig hilsen
Lars Hoffmann



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


Dato : 22-01-04 12:58

Lars Hoffmann skrev:

>> Function plingEscape(tekst)
>> plingEscape = Replace(tekst & "", "'", "''")
>> End function

Denne udgave konverterer automatisk null-værdier til tomme strenge.

> Function plingEscape(tekst)
> plingEscape = Replace(tekst, "'", "''")
> End function

Det gør denne ikke. Man kan godt klare sig uden null-håndtering i
funktionen, så skal man bare tjekke for null før man kalder den.
--
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

Jørn Andersen (22-01-2004)
Kommentar
Fra : Jørn Andersen


Dato : 22-01-04 17:00

On Thu, 22 Jan 2004 12:57:42 +0100, Jens Gyldenkærne Clausen
<jens@gyros.invalid> wrote:

>Lars Hoffmann skrev:
>
>>> Function plingEscape(tekst)
>>> plingEscape = Replace(tekst & "", "'", "''")
>>> End function
>
>Denne udgave konverterer automatisk null-værdier til tomme strenge.
>
>> Function plingEscape(tekst)
>> plingEscape = Replace(tekst, "'", "''")
>> End function
>
>Det gør denne ikke. Man kan godt klare sig uden null-håndtering i
>funktionen, så skal man bare tjekke for null før man kalder den.

Jo, men kommer Null-værdier ikke kun fra databaser?
Så det burde i princippet ikke være nødvendigt at bekymre sig om
Null-værdier, når man putter *ind* i dtabaser, men kun når man trækker
ud. - Eller er der noget jeg har overset?

Noget andet er, at det selvfølgelig ikke gør nogen skade - bortset fra
en overflødig string concatenation, men dem har de fleste af os
sikkert for mange af i forvejen ...

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

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


Dato : 22-01-04 17:48

Jørn Andersen skrev:

> Jo, men kommer Null-værdier ikke kun fra databaser?

Jeg kan ikke huske om de kan opstå direkte i asp - fx ved request
af en manglende querystring - men du har sikkert ret.

Jeg har bare fået en vane med at lave null-escape når jeg laver
funktioner fordi jeg lidt for mange gange er stødt på fejl på grund
af null.
--
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

Torben Brandt (22-01-2004)
Kommentar
Fra : Torben Brandt


Dato : 22-01-04 19:25

Jens Gyldenkærne Clausen skrev:
> Jørn Andersen skrev:
>
>>Jo, men kommer Null-værdier ikke kun fra databaser?
>
> Jeg kan ikke huske om de kan opstå direkte i asp - fx ved request
> af en manglende querystring - men du har sikkert ret.

Der kommer så vidt jeg ved en Empty.

Man kan jo også selv lave en variabel, der indeholder Null. Jeg vælger
en gang imellem at lade en funktion returnere Null, hvis der ikke kunne
returneres et "ordenligt" resultat. Som alternativ til at kalde en fejl...

/Torben


Jørn Andersen (22-01-2004)
Kommentar
Fra : Jørn Andersen


Dato : 22-01-04 20:21

On Thu, 22 Jan 2004 17:48:01 +0100, Jens Gyldenkærne Clausen
<jens@gyros.invalid> wrote:

>Jeg har bare fået en vane med at lave null-escape når jeg laver
>funktioner fordi jeg lidt for mange gange er stødt på fejl på grund
>af null.

Også her - livrem og seler er oftest bedre end bukserne nede om hælene


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

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


Dato : 22-01-04 12:54

pepss skrev:

> Function plingEscape(tekst)
> plingEscape = Replace(tekst & "", "'", "''")
> End function

Hvordan bruger du funktionen?


> en af de steder er et "brev system" men har går det lidt galt!
> hvis man sender et brev hvor der stå " hej do' " bliver det så
> indsat som " hej do'' " besvar man så brevet kommer der så til
> at stå " hej do '''' "

Så bruger du funktionen et sted hvor den ikke skal bruges. Pointen
med funktionen er at den netop ikke ændrer på teksten - den escaper
bare tegnet ' (apostrof/enkelt anførselstegn) så det opfattes
korrekt af databasen.

Der skal erstattes hvis du skal sende data _til_ databasen med en
sql-streng:

sql = "UPDATE foo SET bar = '" & plingEscape(formtekst) & "' ...

sql = "INSERT INTO foo (foobar) VALUES ('" & plingEscape(formte...


Der skal _ikke_ erstattes med plingEscape hvis du henter data fra
databasen:

   Response.write rs("tekst")

(her skal der muligvis erstattes linjeskift med <br>, men det er en
anden sag).


Der skal heller ikke erstattes med plingEscape hvis du gemmer data
ved hjælp af et postsæt:

   sql = "SELECT * FROM tekster WHERE id = 42"
   set rs = Conn.Execute(sql)
   rs.Edit
   rs("tekstfelt") = tekstvariabel



Hvis man skal vise tekst i et input-felt, skal man sørge for at der
ikke opstår konflikter mellem anførselstegn om value-parameteren og
anførselstegn i teksten.

Følgende eksempler går godt:

   <input value='Her er et "-tegn'>
   <input value="Her er et '-tegn">
   <input value="Her er et &quot;-tegn">

Følgende eksempler virker ikke:

   <input value="Her er et "-tegn">
   <input value="Her er et ""-tegn">
   <input value="Her er et \"-tegn">

Dobbelte anførselstegn kan i html kun escapes med en entitet -
enten &quot; eller &#34;

Bruger man asp kan det klares automatisk med Server.HTMLencode.
--
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

pepss (22-01-2004)
Kommentar
Fra : pepss


Dato : 22-01-04 13:50


"Jens Gyldenkærne Clausen" skrev
> pepss skrev:
>
> > Function plingEscape(tekst)
> > plingEscape = Replace(tekst & "", "'", "''")
> > End function
>
> Hvordan bruger du funktionen?

strbrev = plingEscape(Request.Form("brev"))
strSQL = "Insert into brev (fra, idfra, til, tilid, dato, brev) values( '" &
Session("navn") & "', '" & strfraid & "', '" & Request.Form("til") & "', '"
& strtilid & "', '" & strdato & "', '"& strbrev &"')"
Conn.Execute(strSQL)

> > en af de steder er et "brev system" men har går det lidt galt!
> > hvis man sender et brev hvor der stå " hej do' " bliver det så
> > indsat som " hej do'' " besvar man så brevet kommer der så til
> > at stå " hej do '''' "
>
> Så bruger du funktionen et sted hvor den ikke skal bruges. Pointen
> med funktionen er at den netop ikke ændrer på teksten - den escaper
> bare tegnet ' (apostrof/enkelt anførselstegn) så det opfattes
> korrekt af databasen.

[snip]

hvis jeg forstå det rigtig (og jeg gør det rigtig) vil det altså kun komme
til at stå en ' i databasen?


--
Pepss
Den ordblinde der prøver at blive webdesigner
Fræk frækkere www.cafe-flirt.dk



pepss (22-01-2004)
Kommentar
Fra : pepss


Dato : 22-01-04 13:57


"Jens Gyldenkærne Clausen" skrev
> pepss skrev:
>
> > Function plingEscape(tekst)
> > plingEscape = Replace(tekst & "", "'", "''")
> > End function

> Så bruger du funktionen et sted hvor den ikke skal bruges.

igen havde du ret!
jeg brugte functionen 2 gange inden jeg sendte til databasen

--
Pepss
Den ordblinde der prøver at blive webdesigner
Fræk frækkere www.cafe-flirt.dk



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


Dato : 22-01-04 14:19

pepss skrev:

>> Hvordan bruger du funktionen?
>
> strbrev = plingEscape(Request.Form("brev"))
> strSQL = "Insert into brev (fra, idfra, til, tilid, dato,


Det ser fint ud.


> hvis jeg forstå det rigtig (og jeg gør det rigtig) vil det
> altså kun komme til at stå en ' i databasen?

Netop. Det gælder generelt for escape-sekvenser at det kun er det
tegn der skal escapes der kommer ud i den anden ende (fx i
databasen). Det er helt analogt med asp/vbscript-måden at escape
anførselstegn på:

Response.write "Se mit fine ""-tegn" udskriver:

   Se mit fine "-tegn

- det ekstra "-tegn bruges alene til at angive at der skal
udskrives et "-tegn.
--
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 : 177549
Tips : 31968
Nyheder : 719565
Indlæg : 6408822
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste