Avatar billede googolplex Novice
02. december 2003 - 23:01 Der er 7 kommentarer og
1 løsning

Undefined index - hvordan fjerner jeg fejlene

Min kode ser således ud:

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";
    }
}

Men den genererer en masse 'undefined index' notices når jeg slår error_reporting(E_ALL) til.

Jeg fik fjernet en del af dem ved af skrive:

$menubokse_vist = array();

Men de vælter stadig frem :(
Avatar billede jakoba Nybegynder
02. december 2003 - 23:16 #1
brug isset på variabelen førend du prover at bruge 'værdien i den variabel'

$menubokse_vist = array();      //
for ($j = 0; $j < strpos($menu, $menudeler); $j++)
{
    if (  isset($menu[$j])
      && in_array($menu[$j] , array_keys($menubokse))
      && (  !isset($menubokse_vist[$menu[$j]])
          || $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";
    }
}

mvh JakobA
Avatar billede erikjacobsen Ekspert
02. december 2003 - 23:23 #2
Det virker kluntet, det du gør goo... - Hvad indeholder $menu?
Avatar billede googolplex Novice
02. december 2003 - 23:29 #3
/* MENUEN FINDES */

$menubokse = array('a' => 'afstemning', 'c' => 'citat', 'd' => 'download', 'l' => 'links', 's' => 'seneste', 't' => 'status');
$menudeler = '-';
$menustandard = 'acld-st';

if (isset($_SESSION['menu']) && strpos($_SESSION['menu'], $menudeler) !== false) {
    $menu = $_SESSION['menu'];
} else if (isset($_GET['menu']) && strpos($_GET['menu'], $menudeler) !== false) {
    $menu = $_GET['menu'];
} else {
    $menu = $menustandard;
}
Avatar billede erikjacobsen Ekspert
02. december 2003 - 23:34 #4
Ok - jeg ville nok bruge explode/split til at opdele på "-", så du ikke slæber
en strpos med rundt.

Har du flere fejl efter jakobas forslag? Eller mere specifikke fejlbeskedder?
Avatar billede googolplex Novice
02. december 2003 - 23:59 #5
Nej, det hjalp :)

Men jeg er ikke helt sikker på hvorfor det hjalp :(

Forresten, angående fejlhåndtering, hvorfor kan man ikke opfange E_ERROR og E_PARSE med en custom error_handler ?
Avatar billede googolplex Novice
03. december 2003 - 00:15 #6
Nå Jacoba læg et svar.
Avatar billede jakoba Nybegynder
03. december 2003 - 02:02 #7
funktionen isset( $variabel ) returnerer sand hvis den variabel findes.
isset( $arrnavn[$indeks] ) returnerer sand hvis der er en værdi på position $indeks i arrayet $arrnavn.

Og php er så smart indrettet at såsnart det er sikkert hvad resultatet af en betingelse vil blive så holder php op med at vurdere
    if ( $a || $b ) {  // hvis enten $a eller $b
hvis $a er true ved vi med det samme at det vil give sandt så php kikker slet ikke på $b

          (  !isset($menubokse_vist[$menu[$j]])
          || $menubokse_vist[$menu[$j]] !== true
          )

Hvis der slet ikke er sat en værdi i arrayet $menubokse_vist, så står der ihvertfald ikke true der,  det er kun hvis der er en værdi vi bagefter kikke på den værdi for at se om den er true.

mvh JakobA
Avatar billede googolplex Novice
03. december 2003 - 13:09 #8
Det forstod jeg, takker :)

En lille sidebemærkning...

Findes der en oversigt over hvilke fejltyper der hører under E_ERROR, E_WARNING, E_NOTICE osv.

Fx ved jeg at hvis man forsøger at bruge en funktion der ikke eksisterer er det en E_ERROR, men jeg kunne godt bruge en fuldstændig liste :)
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