ik wil mijn pagina's includen
ik ben bezig met mijn website en wil de pagina's laten includen en deze include wil ik via het menu kunnen aanpassen.
de code die ik nu heb is dit:
<!-- index.php -->
<!doctype HTML>
<html>
<head>
<!-- CSS-->
<!-- css van achtergrond -->
<link rel="stylesheet" type="text/css" href="css/background.css" />
<!-- scripts-->
<!-- includes-->
</head>
<body>
<div id="container">
<div id="menu">
</div>
<div id="content">
Code (php)
</div>
</body>
</html>
graag zou ik willen weten waarom er geen pagina's worden weergegeven die in de map page
mvg ralph
Zonder die informatie weet hij uiteraard nooit waar of what hij moet doen. Want $_GET haalt niet de url op, maar in dit geval de waarde van page.
echo $_GET['page'] eens.
dit doet hij dus ook niet XD
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
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
switch($_GET['page']){
case '1':
include_once('home.php');
break;
case '2':
include_once('pagina.html');
break;
case '3':
include_once('pagina.html');
break;
case '4':
include_once('pagina.html');
break;
case '5':
include_once('pagina.html');
break;
case '6':
include_once('pagina.html');
break;
case '7':
include_once('pagina.php');
break;
default:
include_once('home.php');
break;
}
?>
switch($_GET['page']){
case '1':
include_once('home.php');
break;
case '2':
include_once('pagina.html');
break;
case '3':
include_once('pagina.html');
break;
case '4':
include_once('pagina.html');
break;
case '5':
include_once('pagina.html');
break;
case '6':
include_once('pagina.html');
break;
case '7':
include_once('pagina.php');
break;
default:
include_once('home.php');
break;
}
?>
omdat ik over t algemeen zo min mogelijk wil typen
CoffeeCup Designer
Je haalt nu $page door de war met $_GET['page'] deze hebben niets met elkaar te maken in het opzicht wat jij wil.
Nu is gewoon een leeg $_GET['page'] (altans een lege string "") gedeclareerd aan $page. Maar $_GET['page'] zal altijd leegblijven want hij krijgt geen waarde mee die verwerkt kan worden.
Aaah niet veel typen? Dan is dit wellicht iets beter Je haalt nu $page door de war met $_GET['page'] deze hebben niets met elkaar te maken in het opzicht wat jij wil.
Nu is gewoon een leeg $_GET['page'] (altans een lege string "") gedeclareerd aan $page. Maar $_GET['page'] zal altijd leegblijven want hij krijgt geen waarde mee die verwerkt kan worden.
Ralph van der Tang op 07/05/2012 11:29:34:
omdat ik over t algemeen zo min mogelijk wil typen
Heel slechte drijfveer. Ban die gedachte uit je brains en dingen gaan beter beginnen gaan voor je.
@ralph: vaak werkt het door het eerst in 'dummiemanier' te schrijven, dus de manier zoals reshadd het doet. als je dan slim bent kun je het gaan inkorten naar eigengepost script, al zijn er hier en daar wel kleine verbeterpuntjes:
Code (php)
waarom is dit beter?:
- geen variabelen kopieren
- isset() ipv empty()
ook moet je gaan nadenken over de veiligheid, want die laat nu te wensen over.
wil je het helemaal kort doen, zijn er ook nog de ternary operators:
Code (php)
doet precies hetzelfde, maar moet je misschien nog even links laten liggen, want het is vrij moeilijk te begrijpen
Gewijzigd op 07/05/2012 15:00:58 door Jeroen VD
Gewijzigd op 07/05/2012 15:11:39 door Jurgen B
Hierbij liet ik Wouter J een stukje zien van mij zelf, deze moest ik gelijk niet meer gebruiken omdat deze niet veilig was.
De reden achter het niet veilig zijn was? Dat ik home kon veranderen door bijvoorbeeld index.php?page=../../admin/index.php. Zo doende kon men ook in andere mappen komen. Het lijkt mij even op eerste oog dat dit ook mogelijk is bij het stukje van de TS.
Wouter J gaf mij daarom een ander beter en veilige stukje code om in de index te zetten. Misschien is dit ook wat voor jou, daarom deel ik deze even hier.
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
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
// werken met constants is altijd handig
define('ROOT', dirname(__FILE__).DIRECTORY_SEPARATOR);
// haal alle pagina's op uit %root%/pages/
// die eindigen met .php
$pages = glob(ROOT.'pages'.DIRECTORY_SEPARATOR.'*.php');
if( !isset($_GET['p']) )
$_GET['p'] = 'home';
$pages = array_map('basename', $pages);
// addslashes functie is niet nodig, omdat je NOOIT
// andere tekens als letters of cijfers mag gebruiken
// in een url
if( in_array($_GET['p'].'.php', $pages) )
{
// include het bestand
require ROOT.'pages'.DIRECTORY_SEPARATOR.$_GET['p'].'.php';
}
else
{
// include de 404 error pagina
require ROOT.'error'.DIRECTORY_SEPARATOR.'404.php';
}
?>
// werken met constants is altijd handig
define('ROOT', dirname(__FILE__).DIRECTORY_SEPARATOR);
// haal alle pagina's op uit %root%/pages/
// die eindigen met .php
$pages = glob(ROOT.'pages'.DIRECTORY_SEPARATOR.'*.php');
if( !isset($_GET['p']) )
$_GET['p'] = 'home';
$pages = array_map('basename', $pages);
// addslashes functie is niet nodig, omdat je NOOIT
// andere tekens als letters of cijfers mag gebruiken
// in een url
if( in_array($_GET['p'].'.php', $pages) )
{
// include het bestand
require ROOT.'pages'.DIRECTORY_SEPARATOR.$_GET['p'].'.php';
}
else
{
// include de 404 error pagina
require ROOT.'error'.DIRECTORY_SEPARATOR.'404.php';
}
?>
simpele ervan is dat je een index.ini maakt met de links erin en dit ophaalt met.
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
<?php
if (file_exists("hierkomtfileroute") && is_array($content = parse_ini_file("hierinifileroute", true)))
{
if (array_key_exists("navigation", $content))
{
foreach ($content["navigation"] as $basename => $title)
{
print "<li><a " . ($basename == basename($_SERVER["REQUEST_URI"]) ? "class=\"current\"" : false) . " href=\"/" . $basename . "\">" . $title . "</a></li>";
}
}
}
?>
if (file_exists("hierkomtfileroute") && is_array($content = parse_ini_file("hierinifileroute", true)))
{
if (array_key_exists("navigation", $content))
{
foreach ($content["navigation"] as $basename => $title)
{
print "<li><a " . ($basename == basename($_SERVER["REQUEST_URI"]) ? "class=\"current\"" : false) . " href=\"/" . $basename . "\">" . $title . "</a></li>";
}
}
}
?>
hoe dan je ini file eruitziet is zo
[navigation]
home.php = "Home"
Gewijzigd op 07/05/2012 16:13:36 door Reshad F
Je kan een switch wel compacter schrijven en je kan een aantal bovenstaande oplossingen integreren.
bv.
Code (php)
De oplossingen met in_array zijn ook handig: het geeft je de mogelijkheid om die items uit een DB/xml/... te lezen.