[PHP] GET in function werkt niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
Beste Tweakers,

Ik wil met behulp buildPage(); (wat de functienaam al zegt) de pagina "bouwen". Nu loop ik echter tegen een probleem aan dat ik even niet kan oplossen :X .

Met de functie buildPage(); wordt met behulp van $_GET["page"] een pagina uit de URL opgevraagd en gekeken of deze bestaat en uiteindelijk ge-include. Zie hieronder de functie

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function buildPage(){
    if(isset($_GET["page"])){
            if(file_exists($_GET["page"] . '.php')){
                   include ($_GET["page"] . '.php');
        }
        else{
            echo '<b>Pagina niet gevonden!!!</b></p>';
        }
        }elseif(empty($_GET["page"])){
            include "pages/default.php";
            }
}


Ik roep deze functie aan met buildPage(); ergens in een php file alleen nu krijg ik de melding dat de pagina niet gevonden is. Tijdens het debuggen is al de 'quot' fout eruit gehaald maar nu krijg ik het nog niet werkend :X . Ook heb ik lang gezocht naar een andere oplossing echter kom ik hier steeds op terug en kan ik echt even niks anders meer verzinnen :X .

Wat doe ik verkeerd, of kan ik geen $_get gebruiken in een functie? Hoe kan ik dan de opgevraagde pagina (?page=nieuws bijv.) mee sturen in de functie?

Alvast bedankt _/-\o_

Twitter Flickr


Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 23-08 23:43
Zou je de include niet op een andere plek moeten zetten ....

Acties:
  • 0 Henk 'm!

  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 22-08 11:59

Mike2k

Zone grote vuurbal jonge! BAM!

Welke foutmelding krijg je? wat gebeurt er als je de $_GET['page'] echo'd?

Die include staat trouwens gewoon goed.

TS controleert eerst of de variabele is gezet, daarna of er een php bestand bestaat en zoja dan include hij deze...

[ Voor 52% gewijzigd door Mike2k op 18-11-2009 21:02 ]

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


Acties:
  • 0 Henk 'm!

  • eXcyle
  • Registratie: Juni 2002
  • Laatst online: 30-08 23:45
edit:
nevermind...

[ Voor 131% gewijzigd door eXcyle op 18-11-2009 21:05 ]


Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
Mike2k schreef op woensdag 18 november 2009 @ 21:01:
Welke foutmelding krijg je? wat gebeurt er als je de $_GET['page'] echo'd?

Die include staat trouwens gewoon goed.

TS controleert eerst of de variabele is gezet, daarna of er een php bestand bestaat en zoja dan include hij deze...
Wanneer ik $_GET["page"] echo dan krijg ik niks (ook geen error), zelfs niks met print_r :?

EDIT:
Misschien werkt het niet omdat ik met onderstaande .htaccess werk? :?
code:
1
2
3
4
5
6
7
8
9
Options +Indexes
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^posts/([^/\.]+)/?$ index.php?page=pages/article&p=$1   [L]
RewriteRule ^page/([^/\.]+)/?$ index.php?page=pages/$1  [L]

RewriteRule ^admin/([^/\.]+)?$ index.php?page=admin/$1  [L]
RewriteRule ^admin/([^/\.]+)/([^/\.]+)?$ index.php?page=admin/$1&b=$2 [L]
RewriteRule ^admin/update/([^/\.]+)/?$ index.php?page=admin/update&p=$1 [L]

[ Voor 36% gewijzigd door JefSnare op 18-11-2009 21:14 ]

Twitter Flickr


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Dit lijkt me geen nuttig ontwerp, en daarnaast ook nog wijd open voor misbruik, zeker met de verkeerde instellingen. :) Zie hier bijvoorbeeld. Wat is er mis met gewoon aparte pagina's ipv index.php?page=... ?

Heb je error reporting wel aan staan trouwens?

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Zal ik dan maar de eerste zijn om te zeggen dat je wat je daar doet zo onveilig is als de pest? include NOOIT een bestand waarvan de naam uit userdata komt.

.edit: ah, en ik ben inmiddels niet meer de eerste, gelukkig :P

[ Voor 17% gewijzigd door .oisyn op 18-11-2009 21:19 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
.oisyn schreef op woensdag 18 november 2009 @ 21:19:
Zal ik dan maar de eerste zijn om te zeggen dat je wat je daar doet zo onveilig is als de pest? include NOOIT een bestand waarvan de naam uit userdata komt.

.edit: ah, en ik ben inmiddels niet meer de eerste, gelukkig :P
Er wordt eerst gekeken of de file bestaat en dan wordt het ge-include...
Echter kom ik er nog steeds niet uit over de $_GET in de functie :?

Twitter Flickr


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

JefSnare schreef op woensdag 18 november 2009 @ 21:20:
[...]


Er wordt eerst gekeken of de file bestaat en dan wordt het ge-include...
Wat is je punt? Als het bestand niet zou bestaan is er niets onveilig. Het gaat juist om het includen van bestanden die wel bestaan maar waarvan jij nooit bedoeld hebt dat ze geinclude worden. En dat beperkt zich niet tot PHP bestanden.

http:// jefsnare.nl/pagina.php?page=../../../../../etc/passwd%00
Bestand bestaat, en wordt geinclude. En ik heb toegang tot je passwd file. Feest. Misschien moet je even op de link die pedorus gaf klikken.

[ Voor 31% gewijzigd door .oisyn op 18-11-2009 21:26 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
.oisyn schreef op woensdag 18 november 2009 @ 21:24:
[...]

Wat is je punt? Als het bestand niet zou bestaan is er niets onveilig. Het gaat juist om het includen van bestanden die wel bestaan maar waarvan jij nooit bedoeld hebt dat ze geinclude worden. En dat beperkt zich niet tot PHP bestanden.

http:// jefsnare.nl/pagina.php?page=../../../../../etc/passwd%00
Bestand bestaat, en wordt geinclude. En ik heb toegang tot je passwd file. Feest. Misschien moet je even op de link die pedorus gaf klikken.
Ik snap je punt, ik moet mij daar echt in verdiepen;). Mijn PHP kennis is nu ook niet echt diepgaand, voor nu gooi ik het even dicht met een switch van "toegestaande" pagina's. Okay tis lame maar ik moet daar nog even rustig naar kijken :X

Twitter Flickr


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

JefSnare schreef op woensdag 18 november 2009 @ 21:28:
voor nu gooi ik het even dicht met een switch van "toegestaande" pagina's. Okay tis lame maar ik moet daar nog even rustig naar kijken :X
Daar is niets lames aan. Sterker nog, een dergelijke manier zou ik juist aanraden :). Of een check met in_array() waarbij je een array hebt met mogelijk toegestande bestanden.

Als je echt per se willekeurige files wilt kunnen includen, zorg dan dat je de variabele checkt op ongewenste tekens. Bijvoorbeeld dat alleen de tekens a-z en 0-9 erin voor mogen komen.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
.oisyn schreef op woensdag 18 november 2009 @ 21:31:
[...]

Daar is niets lames aan. Sterker nog, een dergelijke manier zou ik juist aanraden :). Of een check met in_array() waarbij je een array hebt met mogelijk toegestande bestanden.

Als je echt per se willekeurige files wilt kunnen includen, zorg dan dat je de variabele checkt op ongewenste tekens. Bijvoorbeeld dat alleen de tekens a-z en 0-9 erin voor mogen komen.
Bedankt ;) Ik ga er zeker even naar kijken.

Verder ben ik erachter gekomen dat ik ook in een paginerings functie geen eerder gedeclareerde variabelen kan gebruiken :? Terwijl ik dat toch wil :P

EDIT: Ik kom er helemaal niet meer uit 8)7

Wat ik wil is een pagina includen met de functie buildPage(); (oid) dan wordt binnen de functie een $_GET naar de parameter "page" uitgevoert, alleen dat (die $_GET) doet het niet :?

[ Voor 14% gewijzigd door JefSnare op 18-11-2009 21:43 ]

Twitter Flickr


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
JefSnare schreef op woensdag 18 november 2009 @ 21:36:
EDIT: Ik kom er helemaal niet meer uit 8)7

Wat ik wil is een pagina includen met de functie buildPage(); (oid) dan wordt binnen de functie een $_GET naar de parameter "page" uitgevoert, alleen dat (die $_GET) doet het niet :?
Wat ik je wel kan zeggen is dat de 12 regels in de TS, afgezien van de security problemen, gewoon werken. $_GET is een superglobal, dus altijd beschikbaar.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • donquix
  • Registratie: Augustus 2009
  • Laatst online: 22:55
Ik had een keer het zelfde probleem en toen loste ik dit op door $_GET als global te declareren in mijn functie:

PHP:
1
2
3
4
function foobar(){
      global $_GET;
      .....
}

Acties:
  • 0 Henk 'm!

Verwijderd

Knal eens iets als
$vars = get_defined_vars();
print_r($vars);
in het begin van je functie.

nvm, get_defined_vars() werkt bij mij niet binnen een functie.
var_dump($_GET);
werkt wel prima binnen een functie.

[ Voor 39% gewijzigd door Verwijderd op 18-11-2009 22:22 ]


Acties:
  • 0 Henk 'm!

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 22:52
Werkt $_GET buiten de functie wel zoals je verwacht dan? En hoe roep je de pagina bijvoorbeeld aan?

Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
Neej, op een of andere manier gaat het fout in de $_GET, ik verwacht de invulling nieuws&p=6 maar krijg alleen nieuws. Dit is alleen wanneer ik het met een functie probeer. Als ik de functie vergeet en gewoon de if jes in de body zet dan doet ie het wel :S

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
//buildPage
function buildPage($var){
        if(isset($var)){
            if(file_exists($var . '.php')){
                   include ($var . '.php');
        }
        else{
            echo '<h3>Error!</h3><p><b>Pagina niet gevonden!!!</b></p>';
        }
        }elseif(empty($var)){
            include "pages/default.php";
            }
}


die functie roep ik aan met buildPage($_GET['page']); en dan werkt het niet maar wanneer ik gewoon de alleen if(isset [..] tot het einde van de lussen neerzet werkt het in de body wel :?

Twitter Flickr


Acties:
  • 0 Henk 'm!

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 15-08 22:46

KompjoeFriek

Statsidioot

Waarom blijf je bovenstaande manier niet gebruiken?
Die werkt en lijkt me ook een stuk makkelijker (want wil je een andere variabele gaan gebruiken, hoef je die nog maar op 1 plek aan te passen)

WhatPulse! - Rosetta@Home - Docking@Home


Acties:
  • 0 Henk 'm!

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 22:52
JefSnare schreef op woensdag 18 november 2009 @ 22:28:
Neej, op een of andere manier gaat het fout in de $_GET, ik verwacht de invulling nieuws&p=6 maar krijg alleen nieuws. Dit is alleen wanneer ik het met een functie probeer. Als ik de functie vergeet en gewoon de if jes in de body zet dan doet ie het wel :S

...

die functie roep ik aan met buildPage($_GET['page']); en dan werkt het niet maar wanneer ik gewoon de alleen if(isset [..] tot het einde van de lussen neerzet werkt het in de body wel :?
Ik weet niet precies wat je nu bedoelt, maar met bla.php?page=nieuws&p=6 zal in $_GET["page"] nooit nieuws&p=6 staan. In $_GET["page"] staat dan nieuws en in $_GET["p"] zal 6 staan.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
donquix schreef op woensdag 18 november 2009 @ 22:09:
Ik had een keer het zelfde probleem en toen loste ik dit op door $_GET als global te declareren in mijn functie:

PHP:
1
2
3
4
function foobar(){
      global $_GET;
      .....
}
Een _superglobal_ nog eens global zetten? Das wel een goeie :+ Als je $_GET niet beschikbaar is in een functie dan is er iets grondig mis met je installatie volgens mij :X

Acties:
  • 0 Henk 'm!

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 15-08 22:46

KompjoeFriek

Statsidioot

Cartman! schreef op woensdag 18 november 2009 @ 22:38:
[...]

Een _superglobal_ nog eens global zetten? Das wel een goeie :+ Als je $_GET niet beschikbaar is in een functie dan is er iets grondig mis met je installatie volgens mij :X
bijvoorbeeld de variables_order ;)

WhatPulse! - Rosetta@Home - Docking@Home


Acties:
  • 0 Henk 'm!

Verwijderd

Hoe include je de file waar buildPage instaat? (ik zal laatst iemand een include('http://..../common.php') doen). Wat geeft een print_r($_GET) voor de aanroep van buildPage en in de buildPage?

Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
De print_r geeft helemaal niets terug ook gegeken naar wat globals...
Het had wel te maken met $_GET[p]; zie hieronder

Heb nu dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function buildPage($build){
        if(isset($build)){
            if(file_exists($build . '.php')){
                   include ($build . '.php');
        }
        else{
            echo '<h3>Error!</h3><p><b>Pagina niet gevonden!!!</b></p>';
        }
        }elseif(empty($build)){
            include "pages/default.php";
            }
}


en als aanroeping dit:
PHP:
1
2
3
$build = $_GET['page'].'&amp;p=.'.$_GET['p'];
                    print $build;
                    buildPage($build);


Waardoor bijvoorbeeld dit eruit komt: /pages/article&p=48

Alleen, het werkt dus nog steeds niet :(

EDIT:
Zou het komen door het achtervoegsel? Dan bestaat file pages/article&p=48.php inderdaad niet maar hoe moet ik het dan doen :? :X

EDIT 2.0:
TS gaat oogjes dicht doen en morgen een frisse kijk ertegen aan gooien ;)

[ Voor 14% gewijzigd door JefSnare op 18-11-2009 23:02 ]

Twitter Flickr


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nee, duh, je kunt GET parameters niet doorgeven met include directives. Je moet een file geven. De file "article&amp;p=48.php" bestaat wat dat betreft ook helemaal niet.

Als je per se de p door wil geven, zet die dan zelf in de $_GET variabele.
PHP:
1
2
$_GET["p"] = 48;
buildPage($_GET["page"]);

[ Voor 29% gewijzigd door .oisyn op 18-11-2009 23:03 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
.oisyn schreef op woensdag 18 november 2009 @ 23:01:
Nee, duh, je kunt GET parameters niet doorgeven met include directives. Je moet een file geven. De file "article&amp;p=48.php" bestaat wat dat betreft ook helemaal niet.

Als je per se de p door wil geven, zet die dan zelf in de $_GET variabele.
PHP:
1
2
$_GET["p"] = 48;
buildPage($_GET["page"]);
_/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_

HET WERKT, had toch eigenlijk beter tot morgen kunnen wachten dan had ik het (met wat hulp) wel gezien :X . Heel erg bedankt allemaal _/-\o_

Oplossing
PHP:
1
2
$build = $_GET['page'];
buildPage($build);


en de functie
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function buildPage($build){
        if(isset($build)){
            if(file_exists($build . '.php')){
                   include ($build . '.php');
        }
        else{
            echo '<h3>Error!</h3><p><b>Pagina niet gevonden!!!</b></p>';
        }
        }elseif(empty($build)){
            include "pages/default.php";
            }
}


Afgezien van veiligheid werkt het nu, nu nog even dichttimmeren voor de hacks ;)

[ Voor 28% gewijzigd door JefSnare op 18-11-2009 23:12 ]

Twitter Flickr


  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Weet je al hoe je dat gaat doen dan? Aangezien dit je toch aardig wat moeite kostte, laat je het nu lijken alsof dichttimmeren heel simpel is?

Engineering is like Tetris. Succes disappears and errors accumulate.


  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 22-08 11:59

Mike2k

Zone grote vuurbal jonge! BAM!

Even ter aanvulling.

Dit:
PHP:
1
2
3
4
<?php 
$build = $_GET['page']; 
buildPage($build); 
?>

Kan ook net zo makkelijk zo, aangezien je toch alle checks in je functie uitvoert:
PHP:
1
2
3
<?php 
buildPage($_GET['page']); 
?>


Levert je in dit geval maar 1 regeltje winst op, maar als je dit een paar keer moet doen ;)

[ Voor 4% gewijzigd door Mike2k op 19-11-2009 08:22 ]

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
armageddon_2k1 schreef op donderdag 19 november 2009 @ 08:02:
Weet je al hoe je dat gaat doen dan? Aangezien dit je toch aardig wat moeite kostte, laat je het nu lijken alsof dichttimmeren heel simpel is?
Nog niet helemaal, tips zijn welkom :X . Ik had eerst bedacht om een switch te maken. .oisyn vulde dit aan door misschien een array te maken met toegestane bestanden. Tenslotte nog eens met een karaktercheck. Ik moet dit even gaan opzoeken en bekijken. Het is simpel gezegd, alleen nu nog uitvoeren.

PHP:
1
$arr = array("index.php","default.php","article.php");


Zoals bovenstaande lijkt mij het veiligste + een check op karakters. Of niet? :?

EDIT: @Mike2k:
Inderdaad, maar misschien wil ik nog een karakter check uitvoeren voordat de functie geladen wordt. Voor nu scheelt het inderdaad een regeltje ;)

EDIT 2.0:
Ik heb een check toegevoegd:
PHP:
1
if(!preg_match('!^[^\.]+$!', $build))


Alles wat een backslash of . (punt) bevat wordt niet toegestaan en in de functie wordt gekeken of $build inderdaad onjuiste waarden bevat dan wordt de standaard pagina geladen inclusief een hack melding.

[ Voor 24% gewijzigd door JefSnare op 19-11-2009 09:47 ]

Twitter Flickr


  • XiniX88
  • Registratie: December 2006
  • Laatst online: 19:30
http://nl.php.net/basename

dichttimmeren met basename is ook leuk, kan je nooit een map terug...

Voorbeeld (bron php.net/basename):
PHP:
1
2
3
4
<?php
$path = "/home/httpd/html/index.php";
$file = basename($path);         // $file is set to "index.php"
$file = basename($path, ".php"); // $file is set to "index"

[ Voor 52% gewijzigd door XiniX88 op 19-11-2009 10:46 ]


  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
XiniX88 schreef op donderdag 19 november 2009 @ 10:45:
http://nl.php.net/basename

dichttimmeren met basename is ook leuk, kan je nooit een map terug...

Voorbeeld (bron php.net/basename):
PHP:
1
2
3
4
<?php
$path = "/home/httpd/html/index.php";
$file = basename($path);         // $file is set to "index.php"
$file = basename($path, ".php"); // $file is set to "index"
Dit kan ik niet gebruiken omdat meerdere mappen e.d. worden geladen. Ik kan het wel gebruiken als ik de index daarin defineer ($file = basename($path, ".php"); // $file is set to "index"). Dat zou ik nog even moeten uitpluizen.

Het dichttimmeren lukt opzich wel alleen ik kan nog steeds niet bestaande pagina's includen en dan een error krijgen, dit ben ik aan het veranderen door een dubbelcheck in de functie... variabele aan te maken bij de "file_exists" of deze true of false is. Dan kan ik specifieker de fout doorgeven, indien het geen hack is.

Twitter Flickr


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je kan de mappen ook gewoon buiten de basename-aanroep zetten hoor.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
Dat is schijnbaar ook mogelijk lees ik nu hier en bij andere bronnen, zeker de moeite waard om dat te gebruiken zodat de rest van de bestanden (bijvoorbeeld een passwd in de etc map) niet bereikt kunnen worden. Thnx voor de tips!

Twitter Flickr


  • donquix
  • Registratie: Augustus 2009
  • Laatst online: 22:55
Mike2k schreef op donderdag 19 november 2009 @ 08:21:
[...]
Kan ook net zo makkelijk zo, aangezien je toch alle checks in je functie uitvoert:
PHP:
1
2
3
<?php 
buildPage($_GET['page']); 
?>


Levert je in dit geval maar 1 regeltje winst op, maar als je dit een paar keer moet doen ;)
Maar dan krijg je wel een notice als $_GET['page'] niet bestaat.

Het is netter om eerst te kijken of hij niet leeg is:
PHP:
1
$_GET['page'] = isset($_GET['page'])?$_GET['page']:"";


Dit zorgt ervoor dat er altijd een waarde in $_GET['page'] zal staan.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Zodat je vervolgens een lege filenaam probeert te includen? Hoe pointless. Het is niet aan buildPage() om te testen of de string leeg is, die verwacht gewoon een valide bestandsnaam. Waarschijnlijk wil je buildPage() niet eens aanroepen als $_GET["page"] niet gezet is maar een errorpagina laten zien oid.

Al met al vind ik het een behoorlijk slechte tip - je verplaatst het probleem alleen maar (en maakt 'm daarmee minder zichtbaar)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • donquix
  • Registratie: Augustus 2009
  • Laatst online: 22:55
Zoals buildPage() nu is laat ie ook een error zien als de pagina leeg is dan wel niet bestaat. Met $_GET['page'] = isset($_GET['page'])?$_GET['page']:""; kun je eventueel ook een default page meegeven om zo je functie verder te kunnen vereenvoudigen.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Een pagina die niet bestaat is wat anders dan een pagina die niet wordt meegegeven.
Ah wacht, ik had de hele empty() check niet gezien.

[ Voor 26% gewijzigd door .oisyn op 19-11-2009 15:20 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
De functie wordt opgevraagd in een template file en daarin wil ik zo weinig mogelijk php code zetten, dus ik probeer zoveel mogelijk in de functie('s) alles te controleren. In dit geval dan, want het kan bij een login form anders lopen, die controleer ik eerst of deze ingevuld zijn en dan pas posten.

De functie vereenvoudigen kan, maar dan komt er dus meer code in de template file en dat vindt ik in dit geval niet handig...

EDIT:
Je zou denken dat de functie dan gaat controleren ook wanneer er een .hack geprobeerd wordt, alleen dit soort dingen handel ik af in de functie. Het staat wel onhandig die parameter zo maar het werkt nu, dus kom er voorlopig even niet aan. Wel voeg ik een basename toe want dat werkt wel handig. ;)

[ Voor 26% gewijzigd door JefSnare op 19-11-2009 22:08 ]

Twitter Flickr

Pagina: 1