/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Hvorfor fejler $_GET ikke?
Fra : Jacob Jensen


Dato : 12-05-06 13:01

Betragt følgende kode:
if( $_GET['id'] ) noget; else noget;

Denne kode vil fejle hvis siden f.eks. er tilgået med URL'en
http://etdomæne.dk/index.php. Fejlen er noget med index not found eller der
omkring.

Betragt nu følgende kode:
if( isset($_GET['id']) ) noget; else noget;

Denne kode fejler IKKE hvis siden tilgås med URL'en
http://etdomæne.dk/index.php.

Hvordan kan det være? Jeg tilgår vel stadigvæk array'et med et forkert
index... eller?

--
Jacob Jensen
E-mail: jacob@etlivmedsle.dk
Hjemmeside: www.etlivmedsle.dk



 
 
Martin (12-05-2006)
Kommentar
Fra : Martin


Dato : 12-05-06 15:04

Jacob Jensen wrote:
> Betragt følgende kode:
> if( $_GET['id'] ) noget; else noget;
>
> Denne kode vil fejle hvis siden f.eks. er tilgået med URL'en
> http://etdomæne.dk/index.php. Fejlen er noget med index not found eller der
> omkring.
>
> Betragt nu følgende kode:
> if( isset($_GET['id']) ) noget; else noget;
>
> Denne kode fejler IKKE hvis siden tilgås med URL'en
> http://etdomæne.dk/index.php.

Kunne id, blive sat sat på andre måder? - Fx ved $id = 1; eller noget i
den dur, også register_globals er on?

Prøv bare med en simpel echo "ID: ".$_GET["id"]; og se hvad der sker?

>
> Hvordan kan det være? Jeg tilgår vel stadigvæk array'et med et forkert
> index... eller?
>

Geert Lund (12-05-2006)
Kommentar
Fra : Geert Lund


Dato : 12-05-06 17:19

Jacob Jensen wrote:

> Hvordan kan det være? Jeg tilgår vel stadigvæk array'et med et forkert
> index... eller?

Det er fordi isset() [1] netop bruges til at checke om variablen
overhovedet er initialiseret og "sat" - og det du oplever er at PHPs
fejlhåndtering netop er sat op til at lade være med at udsende en
warning når isset funktionen benyttes modsat hvis du blot checker på
indholdet uagtet variablen er sat eller ej.

Det er altså internt i PHP der skælmens mellem tilgangen til variablen.

Du kan i teorien blot sætte et passende error_report level og dermed
være fri for PHPs warnings. Det er dog min opfattelse at det er generel
god programmeringsskik altid at checke at variable der skabes
"on-the-fly" er initialiseret med en værdi som forventet.


[1] http://www.php.net/isset

--
Med venlig hilsen
Geert Lund,
www.GLD.dk

Jacob Jensen (13-05-2006)
Kommentar
Fra : Jacob Jensen


Dato : 13-05-06 10:48

> Det er fordi isset() [1] netop bruges til at checke om variablen
> overhovedet er initialiseret og "sat" - og det du oplever er at PHPs
> fejlhåndtering netop er sat op til at lade være med at udsende en warning
> når isset funktionen benyttes modsat hvis du blot checker på indholdet
> uagtet variablen er sat eller ej.

Hmmm, skummelt.

> [1] http://www.php.net/isset

Tak. Nu fandt jeg det. Gemt væk inde i et eksempel :) IMHO er php's
dokumentation virkelig ringe.

Jacob



Martin (13-05-2006)
Kommentar
Fra : Martin


Dato : 13-05-06 12:10

Jacob Jensen wrote:
> Tak. Nu fandt jeg det. Gemt væk inde i et eksempel :) IMHO er php's
> dokumentation virkelig ringe.

PHPs dokumentation er da noget af det bedste jeg har set, og noget af
det nemmeste at finde rundt i. Set i forhold til ASP's og MySQL's imo.

Henrik Stidsen (13-05-2006)
Kommentar
Fra : Henrik Stidsen


Dato : 13-05-06 12:47

Jacob Jensen wrote on 13-05-2006 :
> IMHO er php's dokumentation virkelig ringe.

Det er du vist ene om at mene. PHP's dokumentation er berømt for sin
kvalitet. Prøv at dykke ned i f.eks. Microsofts dokumentation til .NET
- du vil gang på gang ønske dig over til PHP eller JAVAs dokumentation.

--
Henrik Stidsen - http://henrikstidsen.dk/
"If we were to wake up some morning and find that everyone was the same
race, creed and color, we would find some other cause for prejudice by
noon." - George Aiken



Geert Lund (13-05-2006)
Kommentar
Fra : Geert Lund


Dato : 13-05-06 13:16

Jacob Jensen wrote:

> Hmmm, skummelt.

Hvorfor er det skummelt at man har valgt netop at lave en funktion der
kan checke om noget ønsket er SANDT/FALSKT og at man i det tilfælde ikke
udskriver nogen fejlmeddelelser da man jo netop bruger denne funktion
til at bestemme om man fortsætter ind i sine andre checks eller ej - alt
efter om variablen er blevet initialiseret?

>>[1] http://www.php.net/isset
> Tak. Nu fandt jeg det. Gemt væk inde i et eksempel :) IMHO er php's
> dokumentation virkelig ringe.

Hvordan ringe? Jeg tror du er uenig med mange på det punkt - specielt
errata-systemet har hjulpet mange gennem årerne og giver tusindvis af
eksempler.

--
Med venlig hilsen
Geert Lund,
www.GLD.dk

Jacob Jensen (14-05-2006)
Kommentar
Fra : Jacob Jensen


Dato : 14-05-06 12:10

> Tak. Nu fandt jeg det. Gemt væk inde i et eksempel :) IMHO er php's
> dokumentation virkelig ringe.

Nu var det jo ikke meningen at vi skulle diskutere PHP's dokumentation men
det er vel lidt min egen skyld. Jeg svarer lige på mig selv, da der
tilsyneladende er flere (mange måske endda) der er interesseret i hvorfor
jeg mener det jeg mener :)

Jeg har ikke rigtigt leget med ASP's eller MySQL's dokumentation, men prøv
at sammenligne eksempelvis med Suns Java. Bortset fra det var min pointe
egentligt ikke at sammenligne. Blot at det er virkeligt rodet og svært at
bruge til noget fornuftigt.

Jeg sidder tit med en eller anden lille ting hvor jeg ender med simpelthen
at må prøve mig frem på emperisk vis. Det irreterer mig at jeg ikke kan slå
op i dokumentationen og finde svaret under eksempelvis funktionens
beskrivelse. Det er ikke særligt udtømmende beskriver efter min mening.
Eksemplerne er meget rare at have, men jeg savner en præcis beskrivelse af
funktionens semantik.

Mange steder virker det ikke særligt entydigt bestemt hvad en eller anden
nærmere udvalgt sprogkonstruktion skal gøre. Det virker ofte sådan lidt
"hovsa, nu har vi lige brug for det her, det implementerer vi lige". Men det
stemmer også fint overens med det jeg har hørt. Nemlig at opfinderen slet
ikke havde overvejet at det egentligt skulle blive til noget stort
officielt. Det var vist, til at starte med, bare noget han lavede for sig
selv. Det er ikke specielt velovervejet eller velkonstrueret.

Her er lidt til at underbygge det jeg siger:
http://www.prosa.dk/prosabladet/vispblad.php?m_id=95&id=2281

Citat: "Han havde end ikke planer om at skrive et programmeringssprog. "

Citat2: "- Jeg troede aldrig, at jeg skulle skrive et sprog; jeg ved ikke,
hvordan man skriver et sprog. Det er fyre som Larry Wall [skaberen af Perl],
der ved noget om den slags, siger Rasmus Lerdorf."

Citat3: "De sagde, at de havde set på min PHP-engine, og de var overrasket
over, at den overhovedet virkede." <- om PHP2

Alt i alt synes jeg PHP er brugbart men det er noget snask :) Til sidst skal
det lige siges at jeg ikke har lavet voldsomt meget PHP-programmering, så
det er muligvis en vanesag. Som nybegynder synes i hvert fald ikke
dokumentationen er særlig brugbar.

Jacob



Søg
Reklame
Statistik
Spørgsmål : 177516
Tips : 31968
Nyheder : 719565
Indlæg : 6408629
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste