/ 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
Fejl, konvertering af streng til nummer
Fra : Preben Holm


Dato : 02-08-04 13:22

Hej alle

Jeg har problemer med flg. kode:

------
antal = unQuote(request.form(CStr(out(0,i))))

if antal > 0 then
------

antal er en streng og jeg kan derfor ikke teste på dens værdi.
dog kan jeg heller ikke konvertere antal til en værdi med hverken int()
eller cint() som jeg har haft slået op på nettet.

Flg. er prøvet:

------
antal = CInt(unQuote(request.form(CStr(out(0,i)))))

if antal > 0 then
------
antal = int(unQuote(request.form(CStr(out(0,i)))))

if antal > 0 then
------
antal = unQuote(request.form(CStr(out(0,i))))

if CInt(antal) > 0 then
------
antal = unQuote(request.form(CStr(out(0,i))))

if int(antal) > 0 then
------

hvad gør jeg galt. "int()" var noget gejl jeg fik fra et forum der var
en der skrev virkede - hmmm...


Mvh / Preben Holm

 
 
Jens Gyldenkærne Cla~ (02-08-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 02-08-04 14:08

Preben Holm skrev:

> ------
> antal = unQuote(request.form(CStr(out(0,i))))
>
> if antal > 0 then
> ------

Hvilken fejlmeddelelse får du?

Se evt. hint til at spørge om hjælp i gruppen her:

   <http://asp-faq.dk/article/?id=41>


> antal er en streng og jeg kan derfor ikke teste på dens værdi.
> dog kan jeg heller ikke konvertere antal til en værdi med
> hverken int() eller cint() som jeg har haft slået op på
> nettet.

Du udfører (elller forsøger at udføre) mange ting på én linje. Prøv
at dele det ud på flere linjer, det gør det lettere at isolere
fejlen.

Hvad indeholder variablerne i og out?


> antal = CInt(unQuote(request.form(CStr(out(0,i)))))

Prøv følgende til debug:

   Response.write "i = " & i & "<br>"

   Response.write "out(0,i) = " & out(0,i) & "<br>"

Fortsæt selv med udskrifter af request.form og
request.form(out(0,i))
--
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

Preben Holm (02-08-2004)
Kommentar
Fra : Preben Holm


Dato : 02-08-04 15:24

>>------
>> antal = unQuote(request.form(CStr(out(0,i))))
>>
>> if antal > 0 then
>>------
>
>
> Hvilken fejlmeddelelse får du?
>
> Se evt. hint til at spørge om hjælp i gruppen her:
>
>    <http://asp-faq.dk/article/?id=41>
>
>
>>antal er en streng og jeg kan derfor ikke teste på dens værdi.
>>dog kan jeg heller ikke konvertere antal til en værdi med
>>hverken int() eller cint() som jeg har haft slået op på
>>nettet.
>
>
> Du udfører (elller forsøger at udføre) mange ting på én linje. Prøv
> at dele det ud på flere linjer, det gør det lettere at isolere
> fejlen.
>
> Hvad indeholder variablerne i og out?
>
>
>
>> antal = CInt(unQuote(request.form(CStr(out(0,i)))))
>
>
> Prøv følgende til debug:
>
>    Response.write "i = " & i & "<br>"
>
>    Response.write "out(0,i) = " & out(0,i) & "<br>"
>
> Fortsæt selv med udskrifter af request.form og
> request.form(out(0,i))



antal = unQuote(request.form(CStr(out(0,i))))
if antal > 0 then

out(0,i) er et id hentet fra en database.
jeg har navngivet et felt i en form der har netop det selv samme navn
som CStr(out(0,i)) giver mig (i tællervariabel).
Dernæst kaldes unQuote på de data jeg har fået hentet fra formen... Det
ved jeg virker.
Nu vil jeg blot tjekke om værdien er større end nul, da dette har
betydning for om jeg vil slette posten eller om jeg vil rette værdien i
posten i databasen.

Dvs. hvis antal er større end nul skal der ske et og hvis den er under
skal der ske noget andet.

Lad mig sige så meget at flg. virker (bare ikke den perfekte løsning,
for negative værdier ønsker jeg sådan set også at slette fra databasen)

if antal = "0" then
sql = "DELETE FROM tabelnavn WHERE id = " & id
cn.execute(sql)
else
sql = "UPDATE tabelnavn SET antal = " & antal & " WHERE id = " & id
cn.execute(sql)
bla bla
end if

Dvs. jeg mangler blot at få konverteret værdien som antal indeholder til
en integer, men den er jo en streng.


Mvh / Preben Holm

Casper Bang (02-08-2004)
Kommentar
Fra : Casper Bang


Dato : 02-08-04 17:41

> Jeg har problemer med flg. kode:
>
> ------
> antal = unQuote(request.form(CStr(out(0,i))))
>
> if antal > 0 then
> ------

Du kan måske gøre:

antal = out(0,i)
if not isnumeric(antal) then antal = 0
if antal > 0 then


> antal = int(unQuote(request.form(CStr(out(0,i)))))

Hvad gør unQuote egentligt? Kender ikke den funktion,...



Preben Holm (02-08-2004)
Kommentar
Fra : Preben Holm


Dato : 02-08-04 18:36

Casper Bang wrote:
>>Jeg har problemer med flg. kode:
>>
>>------
>> antal = unQuote(request.form(CStr(out(0,i))))
>>
>> if antal > 0 then
>>------
>
>
> Du kan måske gøre:
>
> antal = out(0,i)
> if not isnumeric(antal) then antal = 0
> if antal > 0 then

i testtilfælde var antal altid større end nul, så jeg tror ikke det hjælper.
jeg kan lige prøve det lidt senere.


>> antal = int(unQuote(request.form(CStr(out(0,i)))))
>
>
> Hvad gør unQuote egentligt? Kender ikke den funktion,...

Sorry, den glemte jeg lige. Jeg har selv skrevet funktionen... den
fjerner alle '-tegn fra strengen for, hvis brugeren har lidt viden kan
vedkommende jo skrive f.eks.

'; DELETE FROM tabelnavn;

eller lave om på SQL-stregen på mange andre måder. Derfor lader jeg
altid POST-input og GET-input validere gennem unQuote.


Mvh / Preben Holm

Casper Bang (02-08-2004)
Kommentar
Fra : Casper Bang


Dato : 02-08-04 19:52

> > Hvad gør unQuote egentligt? Kender ikke den funktion,...
>
> Sorry, den glemte jeg lige. Jeg har selv skrevet funktionen... den
> fjerner alle '-tegn fra strengen for, hvis brugeren har lidt viden kan
> vedkommende jo skrive f.eks.
>
> '; DELETE FROM tabelnavn;
>
> eller lave om på SQL-stregen på mange andre måder. Derfor lader jeg
> altid POST-input og GET-input validere gennem unQuote.

Men ellser fornuftigt nok... plejer jeg også at gøre, har bare aldrig smidt
det i en funktion.
Troede det var en built-in funktion, sådan som du brugte den :)
Men hvorfor replacer du ikke med '' (to gnyffer)? Derved kan brugerne stadig
indtaste gnyffer hvis de skal bruge det i et felt, uden at det gør noget ved
sikkerheden... databasen finder selv ud af at replace '' med ' "on the fly".

Der burde egentligt være en funktion i IIS man kunne slå til, hvorved den
automatisk lavede en sådan replace på alle input fra post og get... kunne
være nyttigt i mange tilfælde, og formindske risikoen for fejl betydeligt
(og derved øge sikkerheden en hel del).
Nå, det kan være vi får det i IIS10.



Preben Holm (02-08-2004)
Kommentar
Fra : Preben Holm


Dato : 02-08-04 21:27

Casper Bang wrote:
>>>Hvad gør unQuote egentligt? Kender ikke den funktion,...
>>
>>Sorry, den glemte jeg lige. Jeg har selv skrevet funktionen... den
>>fjerner alle '-tegn fra strengen for, hvis brugeren har lidt viden kan
>>vedkommende jo skrive f.eks.
>>
>>'; DELETE FROM tabelnavn;
>>
>>eller lave om på SQL-stregen på mange andre måder. Derfor lader jeg
>>altid POST-input og GET-input validere gennem unQuote.
>
>
> Men ellser fornuftigt nok... plejer jeg også at gøre, har bare aldrig smidt
> det i en funktion.
> Troede det var en built-in funktion, sådan som du brugte den :)
> Men hvorfor replacer du ikke med '' (to gnyffer)? Derved kan brugerne stadig
> indtaste gnyffer hvis de skal bruge det i et felt, uden at det gør noget ved
> sikkerheden... databasen finder selv ud af at replace '' med ' "on the fly".
>
> Der burde egentligt være en funktion i IIS man kunne slå til, hvorved den
> automatisk lavede en sådan replace på alle input fra post og get... kunne
> være nyttigt i mange tilfælde, og formindske risikoen for fejl betydeligt
> (og derved øge sikkerheden en hel del).
> Nå, det kan være vi får det i IIS10.

Det er bl.a. en af årsagerne til jeg laver minimalt ASP fremfor PHP. Det
er altså nice at have en funktion som f.eks. htmlentities (erstatter
HTML-specialtegn (herunder også citationstegn) med HTML-udgaverne heraf)
direkte indbygget i sproget. Det er noget hurtigere. Så det behøver
såmænd ikke være indbygget i sproget.

Btw. min unQuote ser sådan her ud:

Function unQuote(strTekst)
strTekst = Trim(strTekst)
unQuote = Replace(strTekst,"'","''")
End Function

så det er sådan set også nøjagtig det du foreslår. Jeg gider bare ikke
lave replace hver gang. desuden laver jeg også lige en trim som du kan se.


Mvh / Preben Holm

Casper Bang (02-08-2004)
Kommentar
Fra : Casper Bang


Dato : 02-08-04 21:38

> (erstatter
> HTML-specialtegn (herunder også citationstegn) med HTML-udgaverne heraf)

Vidste ikke at der var en HTML udgange a den... kan du huske hvad den
heddet? det er vel ikke &quot...



Preben Holm (02-08-2004)
Kommentar
Fra : Preben Holm


Dato : 02-08-04 21:50

Casper Bang wrote:
>>(erstatter
>>HTML-specialtegn (herunder også citationstegn) med HTML-udgaverne heraf)
>
>
> Vidste ikke at der var en HTML udgange a den... kan du huske hvad den
> heddet? det er vel ikke &quot...
>
>
kan jeg ikke lige huske, men jeg vil prøve at kigge lidt efter den!

Preben Holm (02-08-2004)
Kommentar
Fra : Preben Holm


Dato : 02-08-04 22:00

>>> (erstatter
>>> HTML-specialtegn (herunder også citationstegn) med HTML-udgaverne heraf)
>>
>>
>>
>> Vidste ikke at der var en HTML udgange a den... kan du huske hvad den
>> heddet? det er vel ikke &quot...
>>
>>
> kan jeg ikke lige huske, men jeg vil prøve at kigge lidt efter den!

Hmm... kan ikke lige umiddelbart se en HTML-ækvivalent med mindre det er
` og ´ for de hedder hhv &rsquo; og &lsquo;

se hele listen på:
http://www.w3.org/TR/REC-html40/sgml/entities.html

Jeg kan lige tjekke hvad htmlentities gør senere!


Mvh / Preben Holm

Preben Holm (02-08-2004)
Kommentar
Fra : Preben Holm


Dato : 02-08-04 22:05

> Hmm... kan ikke lige umiddelbart se en HTML-ækvivalent med mindre det er
> ` og ´ for de hedder hhv &rsquo; og &lsquo;
>
> se hele listen på:
> http://www.w3.org/TR/REC-html40/sgml/entities.html
>
> Jeg kan lige tjekke hvad htmlentities gør senere!

Den laver bare en &#039; hvilket jo betyder det afhænger af charset, men
det angives vist blot i funktionen hvis det afviger fra et standard charset.
Nå, men det var igen noget PHP, som vist ikke hører til i denne gruppe!


Mvh / Preben Holm

Casper Bang (03-08-2004)
Kommentar
Fra : Casper Bang


Dato : 03-08-04 09:01

> Hmm... kan ikke lige umiddelbart se en HTML-ækvivalent med mindre det er
> ` og ´ for de hedder hhv &rsquo; og &lsquo;

Hmm, mente nok at de to var de eneste... har i sin tid selv haft ledt efter
HTML koden for en standardgnyf :)



Jens Gyldenkærne Cla~ (03-08-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 03-08-04 10:24

Preben Holm skrev:

> Det er bl.a. en af årsagerne til jeg laver minimalt ASP
> fremfor PHP. Det er altså nice at have en funktion som f.eks.
> htmlentities

Svarer den ikke ret nøjagtigt til Server.HTMLencode?

Dér mangler asp IMO ikke noget - men du har ret i at en funktion
der erstatter anførselstegn kunne være fint. Men det er måske for
meget ude af "asp-scope" - i og med at problemet med anførselstegn
opstår i forbindelse med sql-kald, og det er databasen der får
problemer, ikke asp-parseren.


> Function unQuote(strTekst)
> strTekst = Trim(strTekst)
> unQuote = Replace(strTekst,"'","''")
> End Function

Hvordan håndterer den null-værdier?
--
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

Casper Bang (03-08-2004)
Kommentar
Fra : Casper Bang


Dato : 03-08-04 11:26

> > Function unQuote(strTekst)
> > strTekst = Trim(strTekst)
> > unQuote = Replace(strTekst,"'","''")
> > End Function
>
> Hvordan håndterer den null-værdier?

Jeg er ikke sikker på det her, men man kan vidst godt køre en trim på
NULL... efter den trim, er værdien så ikke længere NULL, men bare en tom
streng - derved virker replace.
Correct me if I'm wrong



Preben Holm (03-08-2004)
Kommentar
Fra : Preben Holm


Dato : 03-08-04 12:48

>>Det er bl.a. en af årsagerne til jeg laver minimalt ASP
>>fremfor PHP. Det er altså nice at have en funktion som f.eks.
>>htmlentities
>
>
> Svarer den ikke ret nøjagtigt til Server.HTMLencode?

Den kendte jeg ikke!


> Dér mangler asp IMO ikke noget - men du har ret i at en funktion
> der erstatter anførselstegn kunne være fint. Men det er måske for
> meget ude af "asp-scope" - i og med at problemet med anførselstegn
> opstår i forbindelse med sql-kald, og det er databasen der får
> problemer, ikke asp-parseren.
>
>
>
>>Function unQuote(strTekst)
>> strTekst = Trim(strTekst)
>> unQuote = Replace(strTekst,"'","''")
>>End Function
>
>
> Hvordan håndterer den null-værdier?

Jeg får jo aldrig en NULL værdi fra en "form" - vel? Og hvis jeg kan
udregne/ved hvilke felter der findes i en form er det jo uden betydning.

Jens Gyldenkærne Cla~ (03-08-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 03-08-04 10:27

Casper Bang skrev:

> Vidste ikke at der var en HTML udgange a den...

Jo da. Den er nødvendig hvis man fx vil skrive følgende:

<img src="haand.png" title="Se min &quot;store&quot; hånd"
alt="Hånd" />


> kan du huske hvad den heddet? det er vel ikke &quot...

Jo (husk bare at afslutte med semikolon).

Du kan se de almindelige entiteter her:
<http://www.w3.org/TR/html401/sgml/entities.html#h-24.4.1>
--
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

Jens Gyldenkærne Cla~ (03-08-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 03-08-04 11:37

Casper Bang skrev:

> Jeg er ikke sikker på det her, men man kan vidst godt køre en
> trim på NULL... efter den trim, er værdien så ikke længere
> NULL, men bare en tom streng - derved virker replace.

Her ser det ud til at både trim og replace fungerer på null - men
jeg har kun testet asp-null, og ikke en null-værdi fra en database.
I asp.net er der forskel på de to, men jeg kan ikke huske om det
også gælder asp.old.
--
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

Casper Bang (03-08-2004)
Kommentar
Fra : Casper Bang


Dato : 03-08-04 11:53

> > Jeg er ikke sikker på det her, men man kan vidst godt køre en
> > trim på NULL... efter den trim, er værdien så ikke længere
> > NULL, men bare en tom streng - derved virker replace.
>
> Her ser det ud til at både trim og replace fungerer på null - men
> jeg har kun testet asp-null, og ikke en null-værdi fra en database.
> I asp.net er der forskel på de to, men jeg kan ikke huske om det
> også gælder asp.old.

Jeg er ret sikker på at replace() ikke funger med en "rigtig" NULL værdi,
fra en database...



Jens Gyldenkærne Cla~ (03-08-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 03-08-04 12:02

Casper Bang skrev:

> Jeg er ret sikker på at replace() ikke funger med en "rigtig"
> NULL værdi, fra en database...

Sådan husker jeg det også. I mellemtiden har jeg slået de to
funktioner op. Om trim står der:

   If string contains Null, Null is returned.
   
Vedr. replace står der:

   If expression is Null: Replace returns an error.
--
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

Jens Gyldenkærne Cla~ (03-08-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 03-08-04 13:37

Preben Holm skrev:

>> Svarer den ikke ret nøjagtigt til Server.HTMLencode?
>
> Den kendte jeg ikke!

Den er ganske praktisk.


>> Hvordan håndterer den null-værdier?

> Jeg får jo aldrig en NULL værdi fra en "form" - vel?

Det har du jo ret i. Jeg har vænnet mig til altid at bruge
sammensætning med en tom streng (varX & "") for at sikre mig mod
null-fejl, men der er givet en del tilfælde hvor det ikke er
nødvendigt.

NB: Kan du lokkes til at klippe lidt i dine citater? Det vil gøre
dine kommentarer lettere at læse.
--
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

Preben Holm (03-08-2004)
Kommentar
Fra : Preben Holm


Dato : 03-08-04 14:12

> Det har du jo ret i. Jeg har vænnet mig til altid at bruge
> sammensætning med en tom streng (varX & "") for at sikre mig mod
> null-fejl, men der er givet en del tilfælde hvor det ikke er
> nødvendigt.

Den har jeg også brugt, men mest fordi det giver mig friheden til at
bruge tal som strengværdier

"" & talvar
giver en streng. Alternativet er at bruget CStr.


> NB: Kan du lokkes til at klippe lidt i dine citater? Det vil gøre
> dine kommentarer lettere at læse.

Sorry, glemmer det bare nogen gange.

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

Månedens bedste
Årets bedste
Sidste års bedste