Gå til innhold

Rett bruk av "fnutter" i $array[$bar]


Anbefalte innlegg

$array[$bar];
$array["$bar"];
$array[''.$bar.''];

 

Notice: Undefined index: on line 1

Notice: Undefined index: on line 2

Notice: Undefined index: on line 3

 

Altså, det er en fnuttfeil, regelen sier $array['foo']. Men hvis jeg skal ha en variabel i stedet for foo, altså $bar, så må det bli noe surr med fnutter, for jeg får en notice. Den er det forsåvidt ikke noe problem å bli kvitt via error_reporting(), men jeg vil gjerne programmere så nøyaktig som mulig. Er det noen som vet hvordan jeg kan bli kvitt Noticen? Sitter og studerer gjennom eksempler i manualen, men ikke funnet noe så langt.

 

edit: ser at det er flere problemer inne i bildet her, så korrekt spørsmål skal være hvordan bruke fnutter riktig ved $array[$bar]?

Endret av fjartan
Lenke til kommentar
Videoannonse
Annonse
Noticen får du fordi variabelen ikke har noen verdi, og noticen kan fjernes med å endre på error reportinga ;)

5342921[/snapback]

 

Argh.. irriterer meg når folk ikke gidder å skrive koden skikkelig, men heller tar snarveier. Fy skamme seg! :mad:

 

For de som har tilgang til PHP installasjonen, så oppfordrer jeg til bruk av php.ini-recommended som standard php.ini fil og at du slår på følgende innstillinger i filen når du utvikler:

 

error_reporting  =  E_ALL
display_errors = On

 

Dette vil tvinge til å lære deg til å kode renere og sikrere og har vi alle noe igjen for.

 

El Nino

Lenke til kommentar
Så du mener at jeg skal skrive if($_GET['page']) { $page = $_GET['page']; } else { $page = ""; } for hver gang, istedenfor $page = $_GET['page']; ? I don't think so ;)

5348647[/snapback]

 

Ja. Hvor mange ganger skriver du det likssom? 10-20 ganger?.. da ville jeg lagd en funksjon som gjorde det..

 

El Nino

Lenke til kommentar
Gjest Slettet+6132
El Nino:

Var inne på tanken å gjøre slik som ex0n sier, akkurat for å slippe notice'er, men etter å ha sjekket litt fant jeg ut at slike notice'er har ike noe å si og man kan enkelt skjule dem...

 

Så hvorfor ta seg bryet da? Hvordan blir koden "renere" hvis man gjør det slik?

5351780[/snapback]

 

Er nettopp det jeg mener, om du har en udefinert variabel er det mye lettere å slå av noticer (som kommer opp for hver udefinerte variabel), enn å skrive om scriptet ;)

Lenke til kommentar

Hvorfor kan dere ikke heller høre litt på El Nino isteden for å si i mot?

El Nino er en proffesjonell PHP utvikler, og har dette som jobb - så det kan være lurt å lytte litt til råd og erfaringer.

 

Grunnen til at El Nino har rett er ganske enkel. Når du får opp en notice så er dette fordi PHP forteller deg at det er noe feil i scriptet ditt! Ellers ville det ikke dukke opp noen feilmelding.

 

Over til det ex0n mener var et argument for å skippe det.

1. if($_GET['page']) er feil kode. Der gjør du en boolean validering av variabelen, det du ser etter er enten isset() eller empty(), avhengig av resten av koden din.

2. Selvfølgelig skal du alltid validere data som kommer fra en bruker!

Hvis den ikke er satt:

- skyldes dette i så fall en glipp fra en bruker?

Da skal det vises en feilmelding.

- eller skyldes det at den ikke er nødvendig? Hvis den ikke er nødvendig så skal den heller ikk brukes senere i scriptet og derfor skal ingen ny variabel ($page) få en tom verdi. Dette vil i så fall kvalifisere til PHP 21 vanligste feil - artikkelen kan leses på zend.com.

 

Selv i et så enkelt script som:

<?php echo "Velkommen, ditt navn er: " . $_GET['navn']; ?>

Må variabelen valideres! Hvis den ikke er satt så står det "Velkommen, ditt navn er: ". Det ville være forventet en feilmelding!

 

Jeg bruker ikke dette selv på ferdige scripts, for der burde det alltid finnes en egen error handler, som sender deg alle feilmeldinger - og da er det ikke dumt å ta med notice også.

 

Nesten alltid må en variabel valideres, så hvis det er eneste unnskyldningen dere har for å ikke skrive renere kode så burde dere vurdere å bytte programmeringsstil. Argumentet om ressursbruk er litt sterkere, men totalt sett så er dette for lite for å bruke som unnskyldning. Glem ikke sikkerheten - validering av variabler er viktig!

Lenke til kommentar
Gjest Slettet+6132
Absolutt, lytt til fjartan og El Nino!

PHP er et kraftig språk, som er veldig plattform uavhengig - så skriv det også deretter!

5352015[/snapback]

 

Joda, men når jeg sitter med en webserver kun til privat bruk til min egen database over DVDer osv gidder jeg ikke kode frem masse feilmeldinger osv, siden jeg vet hva skriptet gjør uansett. Da er det enklere å slå av noticer. Men såklart, skulle dette vært et offisielt script med flere brukere hadde jeg selvsagt lagt litt mer tid i det for å kode 100% riktig.

Lenke til kommentar

Hvorfor legge til seg uvaner?

Dette høres ut som warnings i C++. Mange som bare skrur dem av, men det straffer seg senere. (Les kræsj!/memory leak)

 

PHP er et utrolig snilt språk. Du kan gjøre nesten hva du vil med typer og array. Når PHP sier ifra, så er det så definitivt noe du burde sjekke, for da er du virkelig ute å kjøre.

Endret av Nazgul
Lenke til kommentar
Gjest Slettet+6132
Hvorfor legge til seg uvaner?

Dette høres ut som warnings i C++. Mange som bare skrur dem av, men det straffer seg senere. (Les kræsj!/memory leak)

 

PHP er et utrolig snilt språk. Du kan gjøre nesten hva du vil med typer og array. Når PHP sier ifra, så er det så definitivt noe du burde sjekke, for da er du virkelig ute å kjøre.

5352481[/snapback]

 

Det er ikke særlig stor fare med en udefinert variabel i et privat script, hadde det vært en fare hadde jeg retta det ;)

 

EDIT: Men her kommer vi veldig off-topic gutter...

Endret av Slettet+6132
Lenke til kommentar
Hvorfor legge til seg uvaner?

Dette høres ut som warnings i C++. Mange som bare skrur dem av, men det straffer seg senere. (Les kræsj!/memory leak)

 

PHP er et utrolig snilt språk. Du kan gjøre nesten hva du vil med typer og array. Når PHP sier ifra, så er det så definitivt noe du burde sjekke, for da er du virkelig ute å kjøre.

5352481[/snapback]

 

Det er ikke særlig stor fare med en udefinert variabel i et privat script, hadde det vært en fare hadde jeg retta det ;)

 

EDIT: Men her kommer vi veldig off-topic gutter...

5352498[/snapback]

 

Problemet er vel at du anbefaler og viser andre hvordan de skal ta snarveier. For alt du vet så kan det hende at de skriver koder som skal publiseres på en public webserver og det utgjør en sikkerhetsrisko.

 

Og som Nazgul sier: Hvorfor legge til seg uvaner?

 

Skriver du koden riktig fra første stund, så slipper du feilmeldinger.

 

"Hastverk er lastverk, det sa min mor".

 

El Nino

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...