[PHP] Pagina en menu includen

Pagina: 1
Acties:
  • 281 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Extera
  • Registratie: Augustus 2004
  • Laatst online: 05-05 16:02
Oke, ik ben begonnen aan een website.
Nu heb hierin vroeger php gebruikt, en wil dit nu op dezelfde manier weer gebruiken.

Op mijn webserver staat in de root index.php, de eerste pagina die een bezoeker ziet.
in de root staat een map die "inc" heet.

Nu wil ik in een tabel bestanden (.php .htm .jpg enz) uit de inc map zetten.

In de inc map staan nu index.php, projects.php en scores.php, puur om even te testen.
In project.php staat simpelweg de tekst projects, en in scores en index staat de ook de tekst die gelijk is aan de naam van de pagina.

De code die ik vroeger gebruikte was iets in de richting van

PHP:
1
2
3
If $id="";
then include ("inc/index.htm");
else include ("inc/$id.htm");


De links op de site worden dus: ?id=projects enz.
Hij zou dus als de code correct is projects.htm uit de inc map moeten halen en neer moeten zetten op de plek waar de php code staat.

Je begrijpt het al, dit werkt voor geen meter.
Weet iemand hoe ik dit aan de praat krijg?

Ik heb op een ander forum de volgende code gekregen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
define('_INC_PATH','inc/'); //vanuit de root in inc map dus
define('_404_FILE','404.php'); //in de root een 404.php maken
define('_HOME_FILE',_INC_PATH.'welcome.php'); //bestand naar je startpagina

if( isset($_GET['page']) && !empty($_GET['page']) ) {
  if((bool)file_exists(_INC_PATH.$_GET['page'])) {
    require_once(_INC_PATH.$_GET['page']);
  } else {
    require_once(_INC_PATH._404_FILE);
  }
} else {
  require_once(_HOME_FILE);
}
?> 


Deze werkt tot zover dat hij overal de 404.php neerzet

iemand die mij kan helpen? voor veel van jullie zal dit basis php zijn.

de site word tweetalig, en ik wil graag dezelfde code gebruiken om ook het menu te includen, kan ik dan dit stukje:
PHP:
1
2
3
if( isset($_GET['page']) && !empty($_GET['page']) ) {
  if((bool)file_exists(_INC_PATH.$_GET['page'])) {
    require_once(_INC_PATH.$_GET['page']);


aanpassen naar:
PHP:
1
2
3
if( isset($_GET['page']) && !empty($_GET['menu']) ) {
  if((bool)file_exists(_INC_PATH.$_GET['menu'])) {
    require_once(_INC_PATH.$_GET['menu']);


en dan de links zo maken:
index.php?page=projects?menu=NL

Ik kreeg de tip om de links netjes te maken, en een .htacccess bestand met de onderstaande code in de root te zetten

code:
1
2
RewriteEngine On
RewriteRule $pagina/(.*)/^ bestand.php?page=$1


index.php?page=projects
is dan het zelfde als:
jouwsite.nl/pagina/projects/

kan deze zo worden gemaakt zodat ?menu=NL er ook in komt?

zodat de link index.php?page=projects?menu=NL
extera.nl/pagina/projects/nl word, of nog beter extera.nl/nl/projects

Alvast bedankt, ik ben echt een noob hierin, als dit eenmaal werkt kan ik de site gaan vullen :)
het gaat om de site www.extera.nl misschien het het om daar te kijken om een idee van de site en de indeling te krijgen.

Mijn Serverrack - iRacing Profiel


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

'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.


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Hier zijn al genoeg topics over geweest op GoT...

Wat je sowieso nooit moet doen, is user input vertrouwen. Dus include nooit een url-waarde als bestand in je pagina. Controleer sowieso eerst of die file binnen je webroot valt, en of het wel een pagina is waarvan jij wil dat die geinclude wordt.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Extera
  • Registratie: Augustus 2004
  • Laatst online: 05-05 16:02
Waarom zou ik geen userinput vertrouwen? omdat links dan niet zouden werken ofzo?

Mijn Serverrack - iRacing Profiel


Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Je houd nu ook geen rekening met de .php extensie :) Het is misschien sowieso beter om een array te gebruiken met daarin alle toegestande bestanden, dan voorkom je dat er 'vreemde' bestanden worden geinclude. :)

voorbeeldje:
PHP:
1
2
3
4
5
6
7
$allowed = array('projects', 'info');

if( isset($_GET['page']) && in_array($_GET['page'], $allowed)) { 
  include('inc/'.$_GET['page'].'.php');
} else {
  include('inc/home.php');
}

Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Stel, je hebt dit:

index.php
PHP:
1
2
3
4
5
6
<?php
if (isset($_GET['page']) && !empty($_GET['page'])) 
{ 
   include $_GET['page']; 
}
?>


En ik als bezoeker doe:

code:
1
index.php?page=../../../bestand_met_gevoelige_info.doc


Dan zou het mogelijk kunnen zijn dat ik zomaar bestanden met wachtwoorden, creditcard gegevens of wat dan ook opvraag. :)


-- edit --

Hier boven wordt een prima manier gepost, zeker voor websites die niet snel veranderen en je zelf in beheer hebt. :)

[ Voor 15% gewijzigd door OkkE op 15-11-2006 16:31 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Userinput kan altijd vreemde aanhalings tekens bevatten, die code in je script kunnen droppen, dit is niet meer het geval wanneer je de vars buiten quotes haalt.(Correct me if i am wrong) En volgens mij zowiezo niet meer mogelijk sinds PHP5.

het blijft echter wel nog link in queries. Gooi er dan een mysql_magic_quotes ofiets dergelijks overheen.

Edit:
Of idd zoiets als hierboven.

[ Voor 5% gewijzigd door Depress op 15-11-2006 16:30 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Sterker nog, als de optie 'bestanden openen via http' aanstaat kan ik elke willekeurige php code op je server uitvoeren (inclusief drop statements op de DB en unlink commando's op het filesystem).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

het gebruik van dergelijke methoden betekent trouwens ook dat je pagina door google veel slechter geindexeerd wordt.

Acties:
  • 0 Henk 'm!

  • Extera
  • Registratie: Augustus 2004
  • Laatst online: 05-05 16:02
Grote prutser schreef op woensdag 15 november 2006 @ 16:27:
Je houd nu ook geen rekening met de .php extensie :) Het is misschien sowieso beter om een array te gebruiken met daarin alle toegestande bestanden, dan voorkom je dat er 'vreemde' bestanden worden geinclude. :)

voorbeeldje:
PHP:
1
2
3
4
5
6
7
$allowed = array('projects', 'info');

if( isset($_GET['page']) && in_array($_GET['page'], $allowed)) { 
  include('inc/'.$_GET['page'].'.php');
} else {
  include('inc/home.php');
}
wow, weer veel geleerd. bedankt
de site werkt nu dus.

kan ik nu page vervangen voor 'menu' en dezelde code in 't menu zetten?
het hoe zit het met het .htacces bestandje?

Mijn Serverrack - iRacing Profiel


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Verwijderd schreef op woensdag 15 november 2006 @ 16:34:
het gebruik van dergelijke methoden betekent trouwens ook dat je pagina door google veel slechter geindexeerd wordt.
Interessant. Leg uit. ;)

'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.


Acties:
  • 0 Henk 'm!

  • Extera
  • Registratie: Augustus 2004
  • Laatst online: 05-05 16:02
het menu werkt nu ook, bedankt!

Ik wil nu eigenlijk wel de url in de adresbalk hebben, zodat ik makkelijk naar een bepaalde pagina op de site kan linken, kan iemand mij vertellen hoe ik dat voor elkaar krijg?

Mijn Serverrack - iRacing Profiel


Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Extera schreef op woensdag 15 november 2006 @ 16:53:
het menu werkt nu ook, bedankt!

Ik wil nu eigenlijk wel de url in de adresbalk hebben, zodat ik makkelijk naar een bepaalde pagina op de site kan linken, kan iemand mij vertellen hoe ik dat voor elkaar krijg?
Zo te zien gebruik je nu een soort van redirect. Kun je die niet anders instellen, zodat het niet een frame is met daarin een andere pagina, maar echt een redirect? :)

Ik heb zelf wel eens aan een website gewerkt die eerst ook zo ingesteld stond als je nu hebt, maar daar konden we het aanpassen in het control panel :)

[ Voor 13% gewijzigd door user109731 op 15-11-2006 17:23 ]


Acties:
  • 0 Henk 'm!

  • Extera
  • Registratie: Augustus 2004
  • Laatst online: 05-05 16:02
redirect heb nu ik uitgezet.

kan ik nu met een .htacces bestandje de url "mooi" maken?
sorry, maar ik ben hierin zo'n verschikkelijke noob.

ieder z'n vak gelukkig :)

Mijn Serverrack - iRacing Profiel


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Met een .htaccess en RewriteRules bijvoorbeeld:
code:
1
RewriteRule ^(.*)$  ?page=$1


Je kan ook met .htaccess zeggen dat altijd naar index.php moet worden verwezen mits met bestand niet bestaat, om daarna de url te exploden met php.

Op beide manieren kan je urls afvangen zoals http://domein.nl/pagina1/actie2. Manier 1 maakt er intern http://domein.nl/index.php?page=pagina1&actie=actie2 van (moet je wel nog wat meer in .htaccess zetten dan die ene regel van mijn voorbeeld). De tweede manier handelt intern de variabelen in de url af.

Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Dat zal dan zoiets worden (heb je meerdere variabelen in een querystring dan zet je er geen ? maar een & tussen):
code:
1
2
RewriteEngine On
RewriteRule ^([A-Za-z]{2})/(.*?)/?$ pagina.php?menu=$1&page=$2

Hiermee zou iets als extera.nl/nl/projects naar pagina.php?menu=nl&page=projects omgezet worden, maar er kan een klein foutje in zitten, ik ben niet zo'n regexp held :)

[ Voor 8% gewijzigd door user109731 op 15-11-2006 17:51 ]


Acties:
  • 0 Henk 'm!

Verwijderd

ik heb google webmaster tools gebruikt hiervoor en het blijkt dat dergelijke urls via een GET variabele veel minder snel geindexeerd worden als gewone links. Don't ask me why, dit gaat trouwens enkel over google, voor de rest weet ik het niet
Pagina: 1