Avatar billede hav0k Nybegynder
15. januar 2006 - 22:25 Der er 19 kommentarer og
1 løsning

Notice: Undefined variable: hvorfor er det et must?

Eksempel: Hvis jeg nu ganske simpelt har en form så plejer jeg også  lige efter formen at echo'e en $status, således:

echo $status;

Normalt findes $status ikke, men hvis der er brug for en meddelelse til brugeren så sætter jeg bare $status = "hov hov du.. det må du ikke"; (bare eksempelvis)

Hvordan kan det være at jeg ikke må sige echo $status hvis den ikke findes? For hvis jeg sætter error_reporting til så skriver den:
Notice: Undefined variable: status in bla bla...

Hvad er den korrekte syntakslære til dette?
Det kan da ikke passe at jeg skal sige id($status) echo $status; - eller hvad?
Avatar billede hav0k Nybegynder
15. januar 2006 - 22:26 #1
sorry if($status) * :p
Avatar billede showsource Seniormester
15. januar 2006 - 22:43 #2
jow, hvis alle fejl vises, skal du bruge if(isset($var))
eller
$status = isset($_GET["noget"]) ? $_GET["noget"] : "Noget andet";
echo $status;
Avatar billede thesurfer Nybegynder
15. januar 2006 - 22:58 #3
Du kan jo altid start med: $status = "";

Så kan du altid bruge: if ($status != "") echo "Der var fejl:<br>" . $status;

..eller hvordan man nu gør i PHP.. :-)

/theSurfer
Avatar billede elskermad.dk Nybegynder
15. januar 2006 - 23:01 #4
if (!empty($status)) ville jeg bruge
Avatar billede showsource Seniormester
15. januar 2006 - 23:31 #5
mjahhhh,

if(isset($status) && trim($status) != "") {
echo "OK";
}else{
echo "NIX";
}

empty() er jo "go' nok" selvom det kun er mellemrum og liniskift
Avatar billede hav0k Nybegynder
15. januar 2006 - 23:32 #6
Hmm har bare ret mange steder hvor sådan et "problem" optræder.. der er ikke noget lidt simplere at gøre? Sådan rent praktisk har det jo egentlig heller ikke nogen betydning (udover at skulle se på fejlbeskederne).
Avatar billede hav0k Nybegynder
15. januar 2006 - 23:33 #7
(og det er dem jeg sådan set gerne vil af med  :p)

og hvis det har en anderledes betydning i praksis (at udskrive tomme variabler) så sig endelig til!
Avatar billede showsource Seniormester
15. januar 2006 - 23:37 #8
Du kan jo bruge ini_set() for at disable errors.

Men omvendt, så er du altid langt mere sikker på du får lavet output/input som forventet!!!!!
Og du kan derfor være mere sikker på at din kode vil virke på andre servere

Men anyway,

<?php
ini_set("error_reporting"; 0); // Ingen fejlmeddelser overhovedet

//resten af scriptet

?>
Avatar billede showsource Seniormester
15. januar 2006 - 23:42 #9
i praksis, altså på www, bør man vel disable errors.
Men når du tester lokalt, så vis alle fejlmeddelser!

<?php
$host = $_SERVER["HTTP_HOST"];

switch($host) {
// UDE PÅ WWW
case "www.ditdomain.dk":
ini_set("error_reporting", 0);
break;

// Når du tester lokalt.........
default:
ini_set("error_reporitng", "E_ALL");

}

// resten af dit script

?>
Avatar billede rednex Nybegynder
16. januar 2006 - 02:44 #10
Notices er sådan set ikke fejl. Det er nærmere compilerens måde at gøre opmærksom på at der måske er en fejl. Når du prøver at udskrive en variabel som ikke eksisterer kunne det jo være pga. en tastefejl (at du f.eks. var kommet til at skrive echo $starus).

Den nemmeste måde at komme over den notice du får, er at initialisere $status til '' (altså en tom streng). Så er du sikker på at den findes, og skulle du komme til at taste forkert et sted, så får du en notice som fortæller hvor den er smuttet. Ganske praktisk :o)

Det er en rigtig god idé altid at sørge for at de variabler man bruger er initialiseret. Især værdier som man modtager fra klienten (f.eks. $_GET).
Avatar billede hav0k Nybegynder
16. januar 2006 - 22:11 #11
Okay det gir måske ikke så meget mening at gøre dette, men igen - php har mange mærkelige facetter.. Mht. error reporting ka jeg sagtens slå det til og fra.. det var mere i sammenhæng med andre problemer at det er lidt irriterende at se på 1mia. af de der notice: undefined variable osv.. (men tak alligevel showsource). Kunne altså godt li' at vide hvorfor det ligger i php at alle variabler helst skal initieres først (selvom de får en 0 værdi)?
Avatar billede olebole Juniormester
16. januar 2006 - 22:15 #12
<ole>

- det er vel fordi, PHP på visse områder tenderer et seriøst sprog. Sådan opfører de fleste seriøse sprog sig  ;o)

/mvh
</bole>
Avatar billede rednex Nybegynder
16. januar 2006 - 23:10 #13
Især når man kører med register_globals on, er det et RIGTIG god idé at sørge for selv at initialisere sine variabler. Ellers er der en risiko for at andre gør det for dig. Det kan godt have meget uheldige konsekvenser.
Avatar billede hav0k Nybegynder
17. januar 2006 - 17:04 #14
jeg kører dog med register_globals off så der er jeg heldigvis undtaget :)

men okay jeg kan godt se pointen så hvis alle der har været med til det her dropper et svar så deler point ud :)
Avatar billede olebole Juniormester
17. januar 2006 - 22:09 #15
Jeg springer over i denne forbindelse - men tak for tilbudet  ;o)
Avatar billede showsource Seniormester
17. januar 2006 - 23:01 #16
heller ikke her
Avatar billede hav0k Nybegynder
18. januar 2006 - 15:05 #17
okæh, jer der bestemmer ;)

hvis der er andre så skriv.. (rednex / thesurfer)
Avatar billede thesurfer Nybegynder
18. januar 2006 - 15:44 #18
Ingen points til mig, tak.

/theSurfer
Avatar billede rednex Nybegynder
18. januar 2006 - 16:08 #19
Ellers tak. Snup dem bare selv :o) Jeg er ganske tilfreds med bare at få lov at "prædike" lidt en gang i mellem.
Avatar billede hav0k Nybegynder
24. januar 2006 - 19:40 #20
Jamen bare præd'k løs :)
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