website met ?pagina=home
ik werk met een pagina systeem, door middel van deze code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
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 />';
}
$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??
isset) zo ja => gewoon doorgaan, zo nee => stel $_GET['pagina'] in met de waarde 'home'.
Een check inbouwen of $_GET['pagina'] wel is ingesteld (Code (php)
1
2
3
4
5
6
7
8
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');
?>
$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
Ik heb het zo opgelost:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 />';
}
}
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 />';
}
}
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.
Code (php)
Zie je het verschil?
@GP, wat is je bedoeling?
Nou, de bedoeling van GP is dat wanneer de waarde niet wordt meegegeven aan pagina in de url, het standaard home is.
@Ozzie: Hetzelfde als al de rest maar dan in 1 lijn, waarom code in 20 lijnen schrijven als het in 1 lijn kan?
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'.
Code (php)
1
2
3
4
5
6
7
8
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');
}
?>
$_GET['pagina'] = isset($_GET['pagina']) ? $_GET['pagina'].'.php' : 'home.php';
if (file_exists($_GET['pagina'])){
require_once($_GET['pagina']);
} else {
require_once('error.php');
}
?>
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.
@GP:
Stel nu ik heb een pagina... heelgeheim.php
Met jouw code kan iedereen die pagina zien. Lijkt me niet echt een succes ;)
2) heelgeheim.php zou op zichzelf al moeten controleren of het mag opgeroepen worden of niet
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.
Ook hier kun je ongelimiteerd bestanden aanroepen. Niet veilig dus.
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
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' );
}
?>
$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