Avatar billede googolplex Novice
31. juli 2004 - 09:20 Der er 7 kommentarer og
1 løsning

Sikre variabeltypen

Jeg har set en 'php-guru' gøre følgende i en artikel:

if ($_POST['var'] == strval(intval($_POST['var'])))
{
    echo $_POST['var'] ' is a string';
}

Men hvorfor ikke bare bruge is_string() ?
Hvad med at bruge '===' i stedet for '==', er det fornuftigt ?
Hvordan sikrer jeg mig bedst at noget er et array/object ?
Avatar billede googolplex Novice
31. juli 2004 - 09:21 #1
Der manglede lige et . i "echo $_POST['var'] ' is a string';"
Avatar billede erikjacobsen Ekspert
31. juli 2004 - 10:45 #2
Du mener vel at den så er en int. Ja, jeg synes også den er underlig. Jeg ville
ikke forlade må intval, men altid bruge et regulært udtryk til at checke, at den
indeholder det rigtige.
Avatar billede erikjacobsen Ekspert
31. juli 2004 - 10:45 #3
"ikke forlade må intval" = "ikke forlade mig på intval"
Avatar billede jakoba Nybegynder
31. juli 2004 - 11:31 #4
Det er lidt sjusk ja, men hvis hensigten blot er at sikre sig mod insertion i et brugerindtastet felt er den tilstrækkelig og giver samtidig den 'korrekte' talværdi i en streng. Med en regexp skulle du tilføje et par liniers fejlhåndtering bagerter.
Avatar billede googolplex Novice
31. juli 2004 - 12:41 #5
Ja, jeg mente selvfølgelig is_int() :)

Jeg bruger altid en af is_() funktionerne (http://dk.php.net/manual-lookup.php?pattern=is_&lang=en) når jeg skal tjekke typen.

Hvordan ville man tjekke med eksempelvis preg_match() og (hvorfor) er dette bedre ?
Avatar billede erikjacobsen Ekspert
31. juli 2004 - 13:56 #6
intval i sig selv godkender "  123abc" som 123. Det er efter min mening noget sjusk,
for det fanger ikke selv fejlen. I dit script laves så en sammenligning igen med det
opridelige, og så bliver den fanget. Det er en indirekte vej, hvis man skal sige
det pænt.

Men hvad godkender det script du har vist så: "123", "+123", "-123" ?
Det er bestemt ikke oplagt, selv om jeg godt kan tænke mig til svaret.

Tester du med et regulært udtryk står der præcis hvad der godkendes. Det regulære
udtryk kan ovenikøbet hentes fra en database, så man kan validere felter af
forskellig type uden at ændre koden. Det kan være smart.

Hvad vil du fx checke med preg_match?
Avatar billede googolplex Novice
31. juli 2004 - 16:16 #7
Det er som sagt ikke noget jeg har fundet på :)

Jeg har fandt det i et uddrag (http://shiflett.org/php-security.pdf) fra en bog om PHP sikkerhed og studsede noget over fremgangsmåden.

Men jeg er enig i at man bør checke med preg_match(), is_() funktionerne bruger jeg internt i mine klasse, jeg kan godt se at de er ikke gode til at validere ekstern data.

Smid et svar :)
Avatar billede googolplex Novice
01. august 2004 - 15:19 #8
Lukker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester