Avatar billede cmau Nybegynder
12. november 2005 - 15:47 Der er 32 kommentarer og
1 løsning

Undefined offset

Hejsa

Jeg får en lidt sjov fejl med denne kode:

$dirs = explode('/', $_SERVER['PHP_SELF']);
$size = sizeof($dirs);

Fejlen:

Notice: Undefined offset: 5 in c:\programmer\php\www\middagspausen\php\php on line 294

Notice: Undefined offset: 5 in c:\programmer\php\www\middagspausen\php\php on line 294

Notice: Undefined offset: 5 in c:\programmer\php\www\middagspausen\php\php on line 301

De linjer der står er hver gang $size bliver brugt. Det mærkelige er, at hvis jeg hår koden sådan her, så kommer der ingen fejl:

$dirs = explode('/', $_SERVER['PHP_SELF']);
$size = sizeof($dirs)-1;

Den udskriver jo bare en mindre :/
Avatar billede hmortensen Nybegynder
12. november 2005 - 15:51 #1
Du skal sætte $size først:
$size = 0;
Avatar billede cmau Nybegynder
12. november 2005 - 15:57 #2
Hjælper ikke hmortensen
Avatar billede hmortensen Nybegynder
12. november 2005 - 16:02 #3
Jeg kan ikke fremprovokere den fejl du får.

Men så du kan se, er det en notice, som du kan sætte serveren til ikke at vise, ved at ændre error_reporting i php.ini
Avatar billede cmau Nybegynder
12. november 2005 - 16:12 #4
error_reporting  =  E_ALL

Hvad skal den sættes til?
Avatar billede hmortensen Nybegynder
12. november 2005 - 16:30 #5
Sådan her, så vises fatale fejl og advarsler:
error_reporting = E_ALL & ~E_NOTICE
Avatar billede cmau Nybegynder
12. november 2005 - 16:33 #6
Det hjælper ikke noget, den skriver stadig notice.
Avatar billede hmortensen Nybegynder
12. november 2005 - 16:43 #7
Har du genstartet webserveren ?
Avatar billede cmau Nybegynder
12. november 2005 - 16:47 #8
Ja, men kan lige prøve igen.
Avatar billede cmau Nybegynder
12. november 2005 - 16:51 #9
Nu har jeg også lige prøvet at genstarte computeren, det hjalp heller ikke.
Avatar billede hmortensen Nybegynder
12. november 2005 - 16:53 #10
Prøv at lave en fil hvor der står:
<?php
phpinfo();
?>

Og søg så efter error_reporting, og se om den står rigtig.
Avatar billede cmau Nybegynder
12. november 2005 - 16:56 #11
error_reporting 2047 2047
Avatar billede taskmgr Nybegynder
12. november 2005 - 16:57 #12
Må vi ikke se lidt mere kode?
Avatar billede erikjacobsen Ekspert
12. november 2005 - 16:59 #13
Du kommer een for langt. Hvad står der omkring linie 294 og 301
Avatar billede cmau Nybegynder
12. november 2005 - 17:02 #14
For langt? hvad mener du?

<?php

function breadcrumb()
{
    $root = 'http://www.jensgram.dk/'; // Domænet
    $dirs = explode('/', $_SERVER['PHP_SELF']); // Split ved slashes
    $size = sizeof($dirs); // Antal biblioteker
    $outp = '<a href="' . $root . '">Forside</a>';
    $div  = ' / '; // Adskillelse ved links mellem biblioteker i output
    $fnam = substr($dirs[$size], 0, strrpos($dirs[$size], '.')); // Filnavn (mellem begyndelse af sidste element i $dirs-array'et og (sidste) punktum)

    for ($i = 1; $i < $size; $i++) {
        $outp .= $div . '<a href="' . $root . $dirs[$i] . '/">' . ucwords(strtr($dirs[$i], '_', ' ')) . '</a>'; // Lav adskillelse og link til det aktuelle bibliotek ($dirs[$i])
        $root .= $dirs[$i] . '/'; // Tilføj det aktuelle bibliotek til $root.
    }

        $outp .= $div . '<a href="' . $root . $dirs[$size] . '">' . ucwords(strtr($fnam, '_', ' ')) . '</a>'; // Skriv link til filnavn, hvis det ikke skal skjules

    return $outp;
}

print breadcrumb();

?>
Avatar billede taskmgr Nybegynder
12. november 2005 - 17:05 #15
<?php

function breadcrumb()
{
    $root = 'http://www.jensgram.dk/'; // Domænet
    $dirs = explode('/', $_SERVER['PHP_SELF']); // Split ved slashes
    $size = sizeof($dirs); // Antal biblioteker
    $outp = '<a href="' . $root . '">Forside</a>';
    $div  = ' / '; // Adskillelse ved links mellem biblioteker i output
    $fnam = substr($dirs[$size-1], 0, strrpos($dirs[$size-1], '.')); // Filnavn (mellem begyndelse af sidste element i $dirs-array'et og (sidste) punktum)

    for ($i = 1; $i < $size; $i++) {
        $outp .= $div . '<a href="' . $root . $dirs[$i] . '/">' . ucwords(strtr($dirs[$i], '_', ' ')) . '</a>'; // Lav adskillelse og link til det aktuelle bibliotek ($dirs[$i])
        $root .= $dirs[$i] . '/'; // Tilføj det aktuelle bibliotek til $root.
    }

        $outp .= $div . '<a href="' . $root . $dirs[$size-1] . '">' . ucwords(strtr($fnam, '_', ' ')) . '</a>'; // Skriv link til filnavn, hvis det ikke skal skjules

    return $outp;
}

print breadcrumb();

?>
Avatar billede cmau Nybegynder
12. november 2005 - 17:07 #16
Jamen du må ikke trække en fra size, så viser den ikke det sidste.
Avatar billede taskmgr Nybegynder
12. november 2005 - 17:13 #17
$size starter fra 1, $dirs starter fra 0.
Dit "Undefined offset" får du, fordi du prøver at udskrive $dirs[5] (som skulle være [4]).
Du skal nok også trække 1 fra i din for-løkke.
Avatar billede cmau Nybegynder
12. november 2005 - 17:19 #18
Jamen hvis du trækker 1 fra skriver den sådan her
Forside / Middagspausen / Php / Php /
Og linket er sådan her:
http://localhost/middagspausen/php/php/news

Så den burde skriver:
Forside / Middagspausen / Php / Php / News /
Avatar billede taskmgr Nybegynder
12. november 2005 - 17:26 #19
Så kan du vel lave et tjek på den sidste skråstreg.

<?php

function breadcrumb()
{
    $_SERVER['PHP_SELF'] = "middagspausen/php/php/news";
    $root = 'http://www.jensgram.dk/'; // Domænet
    if(substr($_SERVER['PHP_SELF'], -1, 1) != "/"){
        $_SERVER['PHP_SELF'] .= "/";
    }
    $dirs = explode('/', $_SERVER['PHP_SELF']); // Split ved slashes
    $size = sizeof($dirs); // Antal biblioteker
    $outp = '<a href="' . $root . '">Forside</a>';
    $div  = ' / '; // Adskillelse ved links mellem biblioteker i output
    $fnam = substr($dirs[$size-1], 0, strrpos($dirs[$size-1], '.')); // Filnavn (mellem begyndelse af sidste element i $dirs-array'et og (sidste) punktum)

    for ($i = 1; $i < $size-1; $i++) {
        $outp .= $div . '<a href="' . $root . $dirs[$i] . '/">' . ucwords(strtr($dirs[$i], '_', ' ')) . '</a>'; // Lav adskillelse og link til det aktuelle bibliotek ($dirs[$i])
        $root .= $dirs[$i] . '/'; // Tilføj det aktuelle bibliotek til $root.
    }

        $outp .= $div . '<a href="' . $root . $dirs[$size-1] . '">' . ucwords(strtr($fnam, '_', ' ')) . '</a>'; // Skriv link til filnavn, hvis det ikke skal skjules

    return $outp;
}

print breadcrumb();

?>
Avatar billede taskmgr Nybegynder
12. november 2005 - 17:30 #20
Glem den første linie i funktionen. Jeg testede lidt :)
Avatar billede cmau Nybegynder
12. november 2005 - 17:31 #21
hvorfor sætter du $_SERVER['PHP_SELF'] = "middagspausen/php/php/news"; ??

Det indhold kan skifte meget.
Avatar billede taskmgr Nybegynder
12. november 2005 - 17:33 #22
Se min sidste kommentar...
Avatar billede cmau Nybegynder
12. november 2005 - 17:50 #23
jep okay.. Men jeg kan se at hvis jeg åbner:
http://localhost/middagspausen/php/php
Skriver den:
Forside / Middagspausen / Php /

Hvis jeg så åbner den samme bare med / på:
http://localhost/middagspausen/php/php
Så skriver den:
Forside / Middagspausen / Php / Php /
Som den også burde have gjort først.
Avatar billede cmau Nybegynder
12. november 2005 - 17:59 #24
Kunne man ikke gøre sådan at den tjekker om der er / tilsidst?

hvor den tager højde på om det er sådan her

http://localhost/middagspausen/php/php
til
http://localhost/middagspausen/php/php/

http://localhost/middagspausen/php/php?showfrom=2
til
http://localhost/middagspausen/php/php/?showfrom=2
Avatar billede taskmgr Nybegynder
12. november 2005 - 18:07 #25
Bruger du det sidste jeg skrev?

Dette skulle meget gerne gøre det du vil have:
if(substr($_SERVER['PHP_SELF'], -1, 1) != "/"){
  $_SERVER['PHP_SELF'] .= "/";
}
Avatar billede taskmgr Nybegynder
12. november 2005 - 18:10 #26
Du skal i øvrigt måske bruge $_SERVER['REQUEST_URI'] i stedet for $_SERVER['PHP_SELF']
Avatar billede cmau Nybegynder
12. november 2005 - 18:13 #27
Ja jeg bruger den..

har også lige ændret til URI, men jeg mener sådan at den tjekker altid, i toppen af siden, hvis den står uden / tilsidst i adresse linjen er der andre links der fucker,
Avatar billede cmau Nybegynder
12. november 2005 - 18:14 #28
jeg bliver nød til at bruge $_SERVER['PHP_SELF'] ellers får den ?shoblabla med, alt efter ?'et
Avatar billede cmau Nybegynder
13. november 2005 - 15:38 #29
Har du en ide tuil hvordan det kan det lade sig gøre at man tjekker urlen om den slutter med /, som den her gør:
http://localhost/middagspausen/php/forside/?showfrom=6
Den forkerte version:
http://localhost/middagspausen/php/forside?showfrom=6
Hvis den så finder den nederste af de 2, så skal den lave en header location hen, så den får / med.

Husk på at der ikke altid er ? det kan jo godt være
http://localhost/middagspausen/php/forside/
http://localhost/middagspausen/php/forside
http://localhost/middagspausen/php/forside/nogetmere/
osv.
Avatar billede cmau Nybegynder
15. november 2005 - 17:58 #30
smid svar, fandt selv ud af det andet.
Avatar billede cmau Nybegynder
22. november 2005 - 15:59 #31
`??
Avatar billede cmau Nybegynder
14. december 2005 - 16:47 #32
SVAR???
Avatar billede taskmgr Nybegynder
15. december 2005 - 09:23 #33
.
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