Avatar billede googolplex Novice
23. oktober 2003 - 22:35 Der er 16 kommentarer og
1 løsning

Hvad er forskellen på dette

To ting :)

Hvad er forskellen på dette i PRAKSIS:

if (isset($var))

OG

if (!is_null($var))


Hvad er forskllen på dette i PRAKSIS:

if (!$var)

OG

if (empty($var))

OG

if ($var == '')


Jeg kan nemlig ikke se en forskel, nogen der kan fortælle mig om der er en ?
Avatar billede erikjacobsen Ekspert
23. oktober 2003 - 22:41 #1
Prøv en
    error_reporting(E_ALL);
øverst i dit script og prøv igen.

Jeg tror det er en nørd ting ikke at vil have at vide når man har lavet en fejl,
for det går nok alligevel. isset() er den korrekte måde at checke at en variabel
ikke har været brugt.
Avatar billede googolplex Novice
23. oktober 2003 - 23:19 #2
Forstår jeg dig (og error reporting) ret hvis jeg siger at 1 & 2 er ens samt 3 & 4 & 5 er ens BORTSET fra når man skal tjekke om en variabel ikke har været brugt (ikke er sat) ??

Hvis ja, så smid et svar :)
Avatar billede googolplex Novice
23. oktober 2003 - 23:20 #3
Du kan i øvrivt se mine resultater her:

http://www.ladefoged-roenne.dk/variabel_check.php
Avatar billede googolplex Novice
23. oktober 2003 - 23:22 #4
Lige en sidste ting:

Bør jeg så altid benytte isset() og empty() de steder hvor de er ens ellers ?
Avatar billede erikjacobsen Ekspert
23. oktober 2003 - 23:29 #5
Ja, jeg mener du har ret nu. Men væn dig til at se alle fejl - det
giver robust kode.
Avatar billede googolplex Novice
23. oktober 2003 - 23:38 #6
Jeg fandt denne function i menualen, er den ikke perfekt ? Den luger alle 'undefined index' fejl fra og viser resten:

function error_handler($errno, $errstr, $errfile, $errline, $errctx) {
    if ($errno == E_NOTICE && substr($errstr, 0, 17) == "Undefined index: ") return;
    echo "\nerror_handler:\n\terrno=$errno\n\terrstr=$errstr\n";
    echo "\terrfile=$errfile\n\terrline=$errline\n";
    if ($errno & (E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR)) die();
}
set_error_handler("error_handler");
error_reporting(E_ALL);

HVAD bruger du ?


Husk svar :)
Avatar billede erikjacobsen Ekspert
23. oktober 2003 - 23:42 #7
Jeg snyder hvis jeg kan komme af sted med det ;)  Men principielt kun
  error_reporting(E_ALL);
eller tilsvarende i php.ini.
Avatar billede googolplex Novice
23. oktober 2003 - 23:49 #8
Med E_ALL vælter det bare ind med 'undefined index' fejl :(

Husk nu det svar :P
Avatar billede fangel Nybegynder
24. oktober 2003 - 08:32 #9
notices kommer jo af en grund !

---

jeg bruger desuden min selvskrevne error-handling, se artiklen på showsource.dk

man _bør_ ('should' hvis du har læst den RFC) kode efter error_reporting=E_ALL og register_globals=off - på den måde ved at man den vil køre uanset opsætning

undtagen hvis man kører med en gammel PHP version... (fuck buydomains.dk - de kører 4.0.6 ! hader at være freelancer for personer der bruger dem | nogen der har prøvet at lege med sessions i 4.0.6?)

---

back-on-track/topic -> undefined index, kommer jo ved if($arr['key-der-ikke-findes']) - ændre dette til if(isset($arr['key-der-ikke-findes']) og du kører igen... ;)

ved if(!$var) bliver denne jo også sand ved $var = 0 eller $var = false

Morten
Avatar billede erikjacobsen Ekspert
24. oktober 2003 - 09:09 #10
Nej du får ingen svar. Endnu. Hvis jeg ikke kan overbevise dig om at du
altid skal køre med error_reporting(E_ALL); føler jeg mig ikke fortjent til point.

(Morten: man behøver da ikke tage alt freelance arbejde man bliver tilbudt...*g*)
Avatar billede googolplex Novice
24. oktober 2003 - 15:39 #11
erikjacobsen ->

Bare rolig, jeg er overbevist, det har da absolut sine fordele at programmere solidt og til alle servere uanset opsætning:

Men så kan du måske lige svare mig på følgende :-)

1. Jeg havde følgende kode:

$for ($j = 0; $j < strpos($menu, $menudeler); $j++)
{
    if (in_array($menu[$j], array_keys($menubokse)) && $menubokse_vist[$menu[$j]] !== true)
    {
        include($_SERVER['DOCUMENT_ROOT'] . '/menubokse/' . $menubokse[$menu[$j]] . '.php');
        $menubokse_vist[$menu[$j]] = true;
        echo "<div class=\"mellemrum\"></div>\n\n";
    }
}

Det generede en 'undifed variabel' fejl ($menubokse_vist). Skal jeg så bare rette fejlen ved at sætte følgende i starten ?:

$menubokse_vist = array();

2. Følgende gav også fejl:

function findip()
{
    $ip = $_SERVER['REMOTE_ADDR'];
    $fip = $_SERVER['HTTP_X_FORWARDED_FOR'];
   
    if ($fip != '' && $fip != 'unknown') {
        $ip = $fip;
    }

    $ip = explode(',', $ip);
    $ip = $ip[0];

    return $ip;
}

Skal jeg så gøre følgende i stedet:

function findip()
{
    $ip = $_SERVER['REMOTE_ADDR'];
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
    {
        $fip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }

    if (isset($fip) && $fip != '' && $fip != 'unknown') {
        $ip = $fip;
    }

    $ip = explode(',', $ip);
    $ip = $ip[0];

    return $ip;
}

Vil bare gerne lige vide om jeg gør det rigtigt ?
Avatar billede googolplex Novice
24. oktober 2003 - 15:40 #12
dea_pg ->

Har kigget på din artikel, det ser spændende ud, vender lige tilbage hvis jeg har problemer :)

Kan man ikke lave det med en klasse i stedet ?
Avatar billede fangel Nybegynder
24. oktober 2003 - 16:47 #13
joo - men jeg havde ikke leget nok med klasser da jeg skrev funktionerne - og nu virker de...

Morten
Avatar billede erikjacobsen Ekspert
24. oktober 2003 - 16:50 #14
Ja, du skal definere det som array. Og ja, du skal teste med isset som du gør.
En REMOTE_ADDR bør altid være der. Er du i tvivl så test en ekstra gang ;)
Avatar billede googolplex Novice
26. oktober 2003 - 22:49 #15
Jeg mangler et svar for at lukke :)
Avatar billede fangel Nybegynder
27. oktober 2003 - 16:30 #16
du får lige et fra mig - hvis du skal bruge det...

Morten
Avatar billede fangel Nybegynder
27. oktober 2003 - 18:36 #17
tak ;)
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