27. januar 2010 - 14:10 Der er 15 kommentarer og
1 løsning

HJÆLP TIL PHP ..

HEJ, min udbyder har opdateret sin PHP til en nyere version.

Det giver mig nogen problemer, idet initialiseringen af nogen (væsentlige) variable ikke længere sker automatisk.

Jeg får følgende 2 fejl:

Notice: Undefined index: pg in /customers/hemdrup.org/hemdrup.org/httpd.www/test2/index.php on line 33

Notice: Undefined index: subpg in /customers/hemdrup.org/hemdrup.org/httpd.www/test2/index.php on line 34
     
og de 2 relevante linier i koden er:

<?php
    $pg = $_REQUEST["pg"];  (33 -- nr indsat af mig)
    $subpg = $_REQUEST["subpg"];  (34 -- nr indsat af mig)

Så følger nogen kommentar linier som dokumenterer hvad disse 2 variable gør - (disse er slettet af pladshensyn)
   
Ved start er både $pg og $subpg ikke initialiseret. Dette råder jeg bod på ved at gøre følgende:
   
if (empty($pg))
{
    $pg = 1;
}
if (empty($subpg))
{
    $subpg = 1;
}

Kan nogen hjælpe mig med at "genoprette" min variable?
Avatar billede mikeo Nybegynder
27. januar 2010 - 14:18 #1
For mig lyder det som om problemet ikke er din PHP variabler, men dine POST/GET variabler.

Er du sikker på at de er defineret når du loader siden?
Avatar billede showsource Seniormester
27. januar 2010 - 14:19 #2
"Ved start er både $pg og $subpg ikke initialiseret"
derfor får du en NOTICE

I din if kan du bruge REQUEST i stedet for dine vars.
Avatar billede showsource Seniormester
27. januar 2010 - 14:21 #3
eller, i toppen af script, bruge:

ini_set("error_reporting", E_ALL & ~E_NOTICE | E_STRICT);

// resten af script
Avatar billede repox Seniormester
27. januar 2010 - 14:21 #4
Det er fordi at det du laver ikke er pæn praksisk, men PHP tilgiver let - de nye settings gør bare at du får besked om at det ikke er godt. Du kan løse det ved at skifte linie 33 og 34 ud med:


<?php
    $pg = $subpg = "";

    if( isset($_REQUEST["pg"]) )
        $pg = $_REQUEST["pg"];
       
    if( isset($_REQUEST["subpg"]) )
        $subpg = $_REQUEST["subpg"];
       
  ...

Avatar billede majbom Novice
27. januar 2010 - 14:29 #5
du skulle ikke tilfældigvis være kunde hos one.com?
27. januar 2010 - 14:36 #6
snestrup2000, du naevner en fejlmelding om undefined index, ikke undefined variable.  Paa one.com, som jeg forstaar har opgraded php, virker din kode paa denne hjemmeside http://christianjorgensen.be/snestrup.php naar jeg fylder pg og subpg ud i en html form.  Hvordan indsaetter du vaerdierne i pg og subpg?
Avatar billede majbom Novice
27. januar 2010 - 14:58 #7
-> #6 - problemet er jo når variablerne ikke er sat og de derfor ikke eksisterer, så kan den ikke finde dem og kommer med en fejl.

derfor er repox' løsning også den mest korrekte, vil jeg mene

sidder selv med et halvstort site som jeg har lavet (ligger hos one) og retter en hel masse, fordi da jeg lavede sitet ikke var klar over forskellen på $array['index'] og $array[index] :(
27. januar 2010 - 15:02 #8
splazz, i den kode jeg har koerende paa http://christianjorgensen.be/snestrup.php har jeg ikke variablerne definerede og den finder dem udemaerket.  I php plejer jeg at komme godt afsted med ikke at definere variabler.  Derfor foreslaar jeg at soege efter problemet i dette tilfaelde et andet sted end i manglende deklarationer af variablerne.
Avatar billede showsource Seniormester
27. januar 2010 - 15:02 #9
splazz =>
Netop
ini_set("error_reporting", E_ALL & ~E_NOTICE | E_STRICT);
eller
ini_set("error_reporting", E_ALL & ~E_NOTICE);

ville sikkert løse det for dig.

Mener jeg har set at man i kontrolpanel hos one.com også kan sætte error_reporting ?
Avatar billede majbom Novice
27. januar 2010 - 15:15 #10
-> #9 - ja det kan slås fra derinde og det viste jeg egentlig godt, men på den anden side, så bliver koden mere korrekt, når det bliver rettet til, så det virker uden at slå error_reporting fra :)
Avatar billede michael_stim Ekspert
27. januar 2010 - 15:25 #11
Det er vel alligevel bedst at have den slået fra. På sin udviklingsside kan man så have den slået til.
Avatar billede repox Seniormester
27. januar 2010 - 15:26 #12
#10
I et live miljø vil jeg mene at der er fordele i at slå error_reporting fra helt overordnet. Eventuelt at logge fejlene istedet så man har mulighed for at gå dem igennem i tilfælde af de skulle opstå.

Min holdning er at man skal reagere på fejl, men skjule dem for brugerne.
Det kan være meget uhensigtsmæssigt at vise fejl i sin applikation overfor brugerne - det skaber potentielle sikkerhedsrisici.
Avatar billede showsource Seniormester
27. januar 2010 - 15:32 #13
splazz => Nemmerlig :O)

$pg = (empty($_REQUEST["pg"]) ? 1 : $_REQUEST["pg"]);
$subpg = (empty($_REQUEST["subpg"]) ? 1 : $_REQUEST["subpg"]);

Derudover er det en go' ide at bruge forskellige navne på sine vars.
Hvis man får sin kode ud at ligge på en server med register_globals sat til on, ( skodserver! ), risikerer man at få problemer.

Hvis $_REQUEST["pg"] er sat, er $pg defineret hvis register_globals sat til on.

Bruger man så længere nede i scriptet
$pg = "noget helt andet";

ændrer $pg jo værdi.

Eks. vil $_SESSION["pg"] sikkert blive noget uventet.
Avatar billede showsource Seniormester
27. januar 2010 - 15:35 #14
Jeg bruger altid selv flg.

if($_SERVER["REMOTE_ADDR"] != "127.0.0.1") {
ini_set('error_reporting', 0);
}

Altså, jeg tester førend jeg lægger ud, og er det lokalt skal alle fejl vises.
Hvilket da også er default i min php.ini
27. januar 2010 - 17:07 #15
HEJ,

Pyha, sikken en masse responsa... (Dejligt).

Jeg forsøger at svare:

1: JO, det er ONE.COM.

2: Jeg så den kode i sin tid på PHP.net og da det er "bibelen" for PHP tog jeg koden derfra.

3.. -> Jo, det er rigtigt, at de 2 variable(r) ikke er defineret ved start, det var det empty(var) skulle gøre.

$pg er en "sidetæller" (index) (og $subpg er en "undersidetæller (subindex)") og kan derfor ikke initialiseres med fast værdi men må tilpasses efter hvad side brugerne ønsker at komme ind på.

Efter at have "bøvlet" noget med det fandt jeg selv en løsning, som tilsyneladendeløste problemet.

<?php

if (empty($_REQUEST["pg"]))
  { $pg = 1; }
else
  $pg = $_REQUEST["pg"];

..

ditto for $subpg...

Men det var før jeg læste denne (vidundelige) mængde svar:

Jeg kendte ikke funktionen "isset(....) ". Det gør jeg nu.

(Havde læst lidt om den (i sin tid) på php.net men blev ikke klogere (dengang)...)

Så "repox " du har fortjent dine point.

OG en million TAK til alle jer andre.

KRIS
Avatar billede repox Seniormester
27. januar 2010 - 17:31 #16
Du fik et svar her.
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