website met ?pagina=home

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jerry php

Jerry php

17/10/2012 22:54:13
Quote Anchor link
Beste,

ik werk met een pagina systeem, door middel van deze code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
$ar = array("home", "login", "register");                            
        $p = $_GET['pagina'];                    
        if(in_array($p, $ar)) {                
            echo '<br />';
            require_once('./pagina/' . $p . '.php');
            echo '<br /><br />';
        }
        else {
        echo '<br />';
        require('pagina/error.php');
        echo '<br /><br />';
        }


Maar als ik dus op de index kom, krijg ik melding dat hij niet bestaat, omdat de link niet bestaat. De link moet dus zijn: www.blablabla.nl/index.php?pagina=home maar als je op een site komt is het altijd www.blablablabla.nl/index.php

hoe los ik dit op??
 
PHP hulp

PHP hulp

26/11/2020 19:42:35
 
Wouter J

Wouter J

17/10/2012 22:57:43
Quote Anchor link
Een check inbouwen of $_GET['pagina'] wel is ingesteld (isset) zo ja => gewoon doorgaan, zo nee => stel $_GET['pagina'] in met de waarde 'home'.
 
Ozzie PHP

Ozzie PHP

17/10/2012 22:59:02
Quote Anchor link
Zoiets...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$ar
= array("home", "login", "register");
$p = 'home';
if (isset($_GET['pagina']) && in_array($_GET['pagina'], $ar)) {
  $p = $_GET['pagina'];
}

require_once('./pagina/' . $p . '.php');
?>
Gewijzigd op 17/10/2012 22:59:53 door Ozzie PHP
 
Jerry php

Jerry php

17/10/2012 23:09:58
Quote Anchor link
Zeker een goede oplossing, heb er even andere draai aangegeven. Maar ik had zeker even het zetje van jullie nodig, dank jullie wel! Ik zal het even hier posten, heeft de volgende er ook iets aan

Ik heb het zo opgelost:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ar = array("home", "login", "register");                            
        if(!isset($_GET['pagina']))
        {                
            $p = "home";
            echo '<br />';            
            require_once('./pagina/' . $p . '.php');
            echo '<br /><br />';
        }
        
        else
        {
            $p = $_GET['pagina'];  
            if(in_array($p, $ar)) {                
                echo '<br />';
                require_once('./pagina/' . $p . '.php');
                echo '<br /><br />';
            }

            else {
            echo '<br />';
            require('pagina/error.php');
            echo '<br /><br />';
            }
        }
 
Chris PHP

Chris PHP

18/10/2012 07:53:10
Quote Anchor link
En zorg voor een beveiliging van je site, zodat wanneer je alleen home, login, contact hebt er wel gekeken wordt dat mensen geen henkie, etc gaan gebruiken.
 
Ozzie PHP

Ozzie PHP

18/10/2012 08:26:20
Quote Anchor link
Jerry, bij programmeren is het een goede gewoonte om dubbele code (zoals in jouw voorbeeld) zoveel mogelijk te vermijden. Maak er dan bijvoorbeeld dit van:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$ar
= array("home", "login", "register");
$p = 'error';
if (!isset($_GET['pagina'])) {
  $p = 'home';
}
elseif (in_array($_GET['pagina'], $ar)) {
  $p = $_GET['pagina'];
}

require_once('./pagina/' . $p . '.php');
?>

Zie je het verschil?
 
G P

G P

18/10/2012 08:29:17
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$_GET['pagina'] = isset($_GET['pagina']) ? $_GET['pagina'] : 'home';
 
Ozzie PHP

Ozzie PHP

18/10/2012 08:39:16
Quote Anchor link
@GP, wat is je bedoeling?
 
Chris PHP

Chris PHP

18/10/2012 08:41:09
Quote Anchor link
Nou, de bedoeling van GP is dat wanneer de waarde niet wordt meegegeven aan pagina in de url, het standaard home is.
 
G P

G P

18/10/2012 08:44:07
Quote Anchor link
@Ozzie: Hetzelfde als al de rest maar dan in 1 lijn, waarom code in 20 lijnen schrijven als het in 1 lijn kan?
 
Wouter J

Wouter J

18/10/2012 08:46:27
Quote Anchor link
Waarom niet zo doen, nog wat simpeler:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if (!isset($_GET['page'])) {
    $_GET['page'] = 'home';
}


// ...
?>
 
Ozzie PHP

Ozzie PHP

18/10/2012 08:47:02
Quote Anchor link
Ik snap de code, alleen is deze niet toereikend. Er vindt geen controle plaats of de pagina geldig is, en in het geval er een onjuiste pagina wordt aangeroepen, moet niet 'home.php' getoond worden, maar 'error.php'.
 
G P

G P

18/10/2012 08:53:05
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$_GET
['pagina'] = isset($_GET['pagina']) ? $_GET['pagina'].'.php' : 'home.php';
if (file_exists($_GET['pagina'])){
    require_once($_GET['pagina']);
}
else {
    require_once('error.php');
}

?>
 
Chris PHP

Chris PHP

18/10/2012 08:54:22
Quote Anchor link
Ozzie PHP op 18/10/2012 08:47:02:
Ik snap de code, alleen is deze niet toereikend. Er vindt geen controle plaats of de pagina geldig is, en in het geval er een onjuiste pagina wordt aangeroepen, moet niet 'home.php' getoond worden, maar 'error.php'.


De error is niet perse nodig natuurlijk, je kunt bij niet bestaande pagina's ook gewoon weer naar home verwijzen. Dit is voor gebruikers zoiezo veel makkelijker, dan een error pagina.

Het is maar net wat je persoonlijk makkelijker vind om te maken, maar beide is natuurlijk goed.
 
Ozzie PHP

Ozzie PHP

18/10/2012 09:00:05
Quote Anchor link
Chris, ik zou persoonlijk ook voor 'home' kiezen ipv een error pagina maar die code had ik in de 3e reactie van dit topic al gegeven. Blijkbaar wilde Jerry toch een error pagina en daar had hij zelf een code voor gemaakt... die ik vervolgens weer heb verbeterd.

@GP:
Stel nu ik heb een pagina... heelgeheim.php
Met jouw code kan iedereen die pagina zien. Lijkt me niet echt een succes ;)
 
G P

G P

18/10/2012 09:16:20
Quote Anchor link
1) Dan zou het heel dom zijn om heelgeheim.php in dezelfde map te steken als de andere files
2) heelgeheim.php zou op zichzelf al moeten controleren of het mag opgeroepen worden of niet
 
Ozzie PHP

Ozzie PHP

18/10/2012 09:21:01
Quote Anchor link
Waar het om gaat is dat je met jouw code een soort van vrijbrief geeft om bestanden aan te kunnen roepen.

Stel nu dat ik een beetje ga lopen testen en ik vul in plaats van www.blablabla.nl/index.php?pagina=home iets heel anders in, bijvoorbeeld www.blablabla.nl/index.php?pagina=../../../var/www/config om maar eens een voorbeeldje te noemen... snap je het gevaar? Je moet altijd heel goed opletten zodra je informatie die van de bezoeker afkomt gaat verwerken in je code. Een "lek" zit in een klein hoekje.
 
Reshad F

Reshad F

18/10/2012 11:32:37
 
Ozzie PHP

Ozzie PHP

18/10/2012 11:40:20
Quote Anchor link
Ook hier kun je ongelimiteerd bestanden aanroepen. Niet veilig dus.
 
Pietje akkers

pietje akkers

18/10/2012 12:07:24
Quote Anchor link
Ik geef ozzie gelijk, het voorbeeld van reshad en GP zijn beide niet veilig.. Wat ozzie al zei; 'een lek zit in een klein hoekje' en dat moet je op elke manier proberen te voorkomen.
 
Kris Peeters

Kris Peeters

18/10/2012 12:07:56
Quote Anchor link
Wat denk je hier van?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$page
= isset($_GET['pagina']) ? $_GET['pagina'] : '';
$pages = glob('pagina/*.php');

if (in_array('pagina/'. $page .'.php', $pages)) {
  require_once( 'pagina/' . $page . '.php' );
}

else {
  require_once( 'pagina/home.php' );
}

?>
Gewijzigd op 18/10/2012 12:08:45 door Kris Peeters
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.