Registreren

    Informatie

    Het is heel gemakkelijk om lid te worden. Door je gegevens op te geven op de registratie pagina ontvang je automatisch een email met je inlog gegevens.

  • Registreer je hier

Aanmelden

    Informatie

    Omdat je niet aangemeld bent is het gebruikerspaneel niet beschikbaar. Vul hiernaast je gegevens in om gebruik te maken van het gebruikerspaneel.

Aanmeldformulier


Include script

PHP is een scripttaal, die bedoeld is om op webservers dynamische webpagina's te creëren. PHP is in 1994 ontworpen door Rasmus Lerdorf, een senior software engineer bij IBM. Destijds was de taal duidelijk geïnspireerd door Perl.

Aanvankelijk stonden de letters PHP voor Personal Home Page (de volledige naam was Personal Home Page/Forms Interpreter, PHP/FI). Sinds PHP 3.0 is de betekenis een recursief acroniem geworden: PHP: Hypertext Preprocessor.

Include script

Berichtdoor Theo » 03 Sep 2008 22:45

Inleiding
Frames zijn oud. Ze worden nauwelijks ondersteund door XHTML. Dit betekent dat we op zoek moeten naar een andere oplossing.

Stel: je hebt een site ontworpen en alle inhoud erin gezet. Je hebt 30 HTML bestanden met uiteenlopende inhoud maar één design. Nu kom je erachter dat je één linkje bent vergeten in het menu. Nu kun je 30 html bestanden aan gaan passen.

Dit is natuurlijk niet wat we willen omdat een site dynamisch kan zijn. Dit betekent dat er vaak dingen veranderen.

Daarom heb ik deze tutorial geschreven. Het geeft je een manier om pagina's te includen met behulp van PHP.



De code

PHP
Code: Alles selecteren
<?php
/******     INSTELLINGEN ******/
$path = 'pages/'; // zet een slash achter de naam van de map
$default_page = 'home'; // zonder extensie

$page = isset( $_GET['page'] ) ? $_GET['page'] : $default_page;
$notallowed = array( '.', '\\', '/' );

if(
 file_exists( $path . $page . '.php' ) and !in_array( substr( $page, 1, 1 ), $notallowed ) and strpos( $page, '../' ) === false and strpos( $page, '..\\' ) === false )
{
    include( $path . $page . '.php' );
}
else
{
    include( $path . $default_page . '.php' );
}
?>

Nu ben jij misschien geen PHP scripter en snap je totaal niet wat dit script doet. Hieronder leg ik uit wat het script doet.

Uitleg
De makkelijkste manier van uitleggen is om nogmaals de code erbij te pakken. In de code zet ik met commentaren wat een bepaalde regel doet.
PHP
Code: Alles selecteren
<?php
/******     INSTELLINGEN ******/
// Het pad naar de map waarin de bestanden staan die je wilt includen
$path = 'pages/'; // zet een slash achter de naam van de map
// De standaard pagina die wordt geladen wanneer er geen of een foutieve pagina wordt include
$default_page = 'home'; // zonder extensie

// Indien er een query in de URL te vinden is deze pakken of anders de standaard pagina.
$page = isset( $_GET['page'] ) ? $_GET['page'] : $default_page;
// De volgende mogelijkheden zijn niet mogelijk in de query (in de URL). Als dit er niet in zou zitten zou men door bv: pagina.php?page=../../../../php.ini bij een bestand kunnen komen wat je niet wilt.
$notallowed = array( '.', '\\', '/' );

// Constroleren of de pagina bestaat EN niet begint met één van de bovengenoemde tekens. 
//Tevens wordt er gecontroleerd of ../ niet voorkomt in de pagina. Hiermee zou men naar bovenliggende mappen kunnen 'surfen'.
if( file_exists( $path . $page . '.php' ) and !in_array( substr( $page, 1, 1 ), $notallowed ) and strpos( $page, '../' ) === false and strpos( $page, '..\\' ) === false )
{
    // De pagina bestaat en is geldig, dus wordt deze geinclude
    include( $path . $page . '.php' );
}
else
{
    // De pagina die is opgegeven is niet goed of bestaat niet, dus wordt de standaard pagina geladen
    include( $path . $default_page . .php );
}
?>



Instellingen
Voordat je het script kunt gebruiken zijn er een aantal instellingen die je aan moet passen. Het gaat om het volgende stukje code:

$path: de map waarin je de pagina's hebt staan, bijvoorbeeld 'pages'.

$default_page: de standaard pagina die wordt geladen wanneer een verkeerde of geen pagina wordt aangeroepen.


Integreren in je site
Nu je de instellingen goed hebt staan moet je de code nog ergens plaatsen. Hiervoor heb je een bestand nodig die de layout bevat. Op de plaats van de inhoud plaats je de code.

Voorbeeld:

PHP
Code: Alles selecteren
<html>
<head>
<title>PHP inklude</title>
</head>
<body>
   <div>
      <div>header</div>
      <div>menu</div>
      <div>content:
<?php
/******     INSTELLINGEN ******/
$path = 'pages/'; // zet een slash achter de naam van de map
$default_page = 'home'; // zonder extensie

$page = isset( $_GET['page'] ) ? $_GET['page'] : $default_page;
$notallowed = array( '.', '\\', '/' );

if( file_exists( $path . $page . '.php' ) and !in_array( substr( $page, 1, 1 ), $notallowed ) and strpos( $page, '../' ) === false and strpos( $page, '..\\' ) === false )
{
    include( $path . $page . '.php' );
}
else
{
    include( $path . $default_page . '.php' );
}
?>
</div>
      <div>footer</div>
   </div>
</body>
</html>




De include pagina's
Uiteraard hebben we pagina's nodig die geinclude moeten worden. Met maken van deze pagina moet je rekening houden dat ze geinclude worden. Oftewel: ze worden midden in main.php geinclude.

Dit houdt in dat je de volgende tags niet gebruikt:

  • <html>
  • <head>
  • <title>
  • <link>
  • <meta>
  • <body>
  • enzovoorts...
Waarom niet? Omdat deze al main.php staan. Dit betekent ook dat de stylesheet in main.php staat en dat je in die stylesheet de opmaak geeft aan de elementen in het te includen bestand.


Voorbeeld
main.php

PHP
Code: Alles selecteren
<html>
<head>
<title>PHP include</title>
</head>
<body>
   <div>
      <div>header</div>
      <div>menu</div>
      <div>content:
<?php
/******     INSTELLINGEN ******/
$path = 'pages/'; // zet een slash achter de naam van de map
$default_page = 'home'; // zonder extensie

$page = isset( $_GET['page'] ) ? $_GET['page'] : $default_page;
$notallowed = array( '.', '\\', '/' );

if( file_exists( $path . $page . '.php' ) and !in_array( substr( $page, 1, 1 ), $notallowed ) and strpos( $page, '../' ) === false and strpos( $page, '..\\' ) === false )
{
    include( $path . $page . '.php' );
}
else
{
    include( $path . $default_page . '.php' );
}
?>
</div>
      <div>footer</div>
   </div>
</body>
</html>

includebestand.shtml

HTML
Code: Alles selecteren
<h1>dit is mijn kop</h1>
<p>en hier een paragraaf</p>

Resultaat (main.php?page=includebestand)

HTML
Code: Alles selecteren
<html>
<head>
<title>PHP inklude</title>
</head>
<body>
   <div>
      <div>header</div>
      <div>menu</div>
      <div>content: <h1>dit is mijn kop</h1>
<p>en hier een paragraaf</p></div>
      <div>footer</div>
   </div>
</body>
</html>


Linken
Je hebt nu een aantal bestanden die je kunt includen. Je hebt je layout in main.php. Het is tijd om de links te maken in het menu.

Als voorbeeld neem ik een aantal pagina's die we willen includen:

  • documenten.php
  • scripts.php
  • downloads.php
  • contact.php
Het menu zal er als volgt uitzien:

HTML
Code: Alles selecteren
<ul>
   <li><a href="main.php?page=documenten">Documenten</a></li>
   <li><a href="main.php?page=scripts">Scripts</a></li>
   <li><a href="main.php?page=downloads">Downloads</a></li>
   <li><a href="main.php?page=contact">Contact</a></li>
</ul>

Wat je dus ziet is: in de href zijn er twee dingen die we doen. Eerst roepen we de pagina aan waarin de include code en de layout in staan (main.php). Vervolgens gebruiken we de query (page) om de pagina aan te roepen (bijvoorbeeld: downloads). De query en de hoofdpagina worden gescheiden door een vraagteken (?).

Linken naar een bestand in map
Het is ook mogelijk om te linken naar een bestand die in een map staat.

HTML
Code: Alles selecteren
<a href="main.php?page=map/bio/mijnbiografie">Mijn biografie<a>

Je ziet dus dat we naar een bestand linken die in een andere map staat dan de 'normale' bestanden.


Let op!
Waar je rekening mee moet houden is dat de bestanden geinclude worden. Hierdoor wordt de code in het bestand main.php geplakt. Als je nu plaatjes invoegt dan moet het pad zijn gezien van main.php.

Voorbeeld:

Code: Alles selecteren
root van je site
   |
   |_pics
   |   |
   |   |_img.jpg
   |
   |_pages
   |   |
   |   |_bestand.php
   |
   |_main.php

Je wilt in bestand.php het plaatje img.jpg. Normaal zou je dat doen aan de hand van deze code: <img src="../pics/img.jpg" />.

Nu moet je het bekijken vanaf main.php. Omdat het plaatje uiteindelijk daarin weergegeven moet worden. Je zult dus een andere link moeten maken, namelijk: <img src="pics/img.jpg" />.

Dit geldt ook voor bijvoorbeeld javascripts, of andere externe bestanden.


Slot
Voordelen van deze methode:

  • Geen 30 pagina's aanpassen voor 1 wijziging in de layout.
  • Makkelijk een nieuw design maken zonder alle inhoud aan te passen.
  • Snelle en makkelijke methode.
  • Overzichtelijker.
Ik hoop hiermee mensen te helpen met het in laden van inhoud in een pagina zonder (i)frames.
Laatst gewijzigd door Theo op 04 Dec 2008 23:12, in totaal 7 keer gewijzigd.
Theo
Oprichter
 
Berichten: 1795
Geregistreerd: 11 Jun 2005 17:43
Woonplaats: in_array()

Re: [PHP] Include script

Berichtdoor Theo » 14 Okt 2008 22:36

Artikel update
Script gemoderniseerd en zo aangepast dat niet bij elke nieuwe pagina het script aangepast hoeft te worden.
I rather feel pain than nothing at all
Theo
Oprichter
 
Berichten: 1795
Geregistreerd: 11 Jun 2005 17:43
Woonplaats: in_array()

Re: [PHP] Include script

Berichtdoor Theo » 20 Okt 2008 09:19

Artikel update

Code: Alles selecteren
if( file_exists( $path . $page . '.php' ) and !in_array( substr( $page, 1, 1 ), $notallowed ) )
{
 

Vervangen door:
Code: Alles selecteren
if( file_exists$path $page '.php' ) and !in_arraysubstr$page1), $notallowed ) and strpos$page'../' ) === false )

Zodat door middel van bijvoorbeeld index.php?page=map/../../index geen bovenliggende mappen aangeroepen kunnen worden.

Bedankt aan Wouter en Maurice voor de oplettendheid.
I rather feel pain than nothing at all
Theo
Oprichter
 
Berichten: 1795
Geregistreerd: 11 Jun 2005 17:43
Woonplaats: in_array()

Re: [PHP] Include script

Berichtdoor Niellles » 03 Nov 2008 22:44

Ja dat werkt altijd prachtig en ik gebruik het ook altijd.

Ik liep nu alleen tegen een probleem aan; ik ging een simpele site maken voor een goede kennis, geen php ondersteuning (ook niet nodig), wat doe je dan? Ik ben wat rond gaan kijken en kwam dit tegen.

Je leerst eerst het aanmaken van een site (mapje met bestanden) en vervolgens hoe je in dreamweaver een template aanmaakt (er zullen ook wel andere tutorials zijn, zoek even op "dreamweaver template.") Je maakt deze template dus en alle onderdelen die op elke pagina anders moet (kunnen) zijn zet je in een editable region, de rest wijzig je dus in je template bestand met één druk (misschien twee) op de knop voer je deze verandering (die op elke pagina hetzelfde moet zijn) door naar al je bestanden.

Ik zou werken met Dreamweaver trouwens niet aanraden, ik gebruik zelf liever Notepad++, maar met dit soort dingen is het zeker wel handig!

Groeten,
Niels
Niellles
 
Berichten: 90
Geregistreerd: 07 Apr 2007 16:30
Woonplaats: Houten

Re: Include script

Berichtdoor Peeters » 06 Feb 2009 00:13

huh??? ik geloof 'em geloof ik niet meer helemaal :?
kan je ajb een zip-bestandje maken met alle voorbeeld files erin (layout enz. niet nodig :P hoor)

alvast bedankt!
Peeters
 
Berichten: 3
Geregistreerd: 06 Feb 2009 00:01

Re: Include script

Berichtdoor eXo » 10 Feb 2009 17:54

Peeters schreef:huh??? ik geloof 'em geloof ik niet meer helemaal :?
kan je ajb een zip-bestandje maken met alle voorbeeld files erin (layout enz. niet nodig :P hoor)

header.php
Code: Alles selecteren
  <html> 
<head><title>title</title> 
</head> 
<body> 
<div id="text"> 


footer.php
Code: Alles selecteren
</div>
</body>
</html>


index.php
Code: Alles selecteren
<?php include("header.php"); ?>
Hier komt de inhoud van de pagina...
<?php include("footer.php"); ?>


en als je dan in de bron code kijkt van index.php zie je dit:
Code: Alles selecteren
<html> 
<head><title>title</title> 
</head> 
<body> 
<div id="text">
  Hier komt de inhoud van de pagina...
</div>
</body>
</html>
eXo
 
Berichten: 75
Geregistreerd: 23 Dec 2008 13:53

Re: Include script

Berichtdoor Sonja » 08 Dec 2009 15:49

Hoi hoi,

Een goede include script dat wel.
Maar ik kom een probleem tegen.
Elke pagina had ik $meta_tag aangepast en ook $titel, <-- werkt nu niet meer en geeft alleen de titel weergave van de startpage aan.
Is dat nog aan te passen?

Verder ben ik blij met deze tuts

BTW verder scheelt het idd heel veel werk!

Bij voorbaat dank

Sonja
Sonja
 
Berichten: 2
Geregistreerd: 08 Dec 2009 14:49

Re: Include script

Berichtdoor Fluring Lifes » 09 Dec 2009 02:16

Zie je een mogelijkheid om alle bestanden online te zetten in een zip/rar? Dan kan ik er even naar kijken.
Gebruikers-avatar
Fluring Lifes
Beheerder
 
Berichten: 1155
Geregistreerd: 28 Sep 2005 19:54
Woonplaats: Alkmaar - Nederland

Re: Include script

Berichtdoor Sonja » 11 Dec 2009 21:59

Header include bestand.

<meta name="keywords" content="<?php echo $meta_keywords; ?>" />
<meta name="description" content="<?php echo $description; ?>" />
<title><?php echo $title; ?></title>

pages/file.php
Boven alle includes pagina

$title ="de title natuurlijk";
$meta_keywords ="word, words, pc, computer";
$description ="en dat werkt niet met deze include script";

Hopelijk is de uitleg boven ook duidelijl?

Maar het werkt niet, hij pakt alleen de index.php waar de incldue code is geplakt. Terwijl ik juist op alle inc bestanden van pages/ ook bovenin heb staan.

Mijn structuur is:
images/
img1.gif
img2.gif
img3.gif

incl/
- header.php
- footer.php
- left.php
- right.php

pages/
- start.php <- alle pages files bovenin $title, $meta_keywords, $description
- file1.php
- file2.php
- file3.php

index.php <- daarin zit de include code

Kunnen hiermee ook uit de voeten met mijn vraag?
Moet er iets aangepast worden en zo ja, wat dan?
Zelf heb ik het idee dat ik iets mis in de index.php om de include code aan te passen.
Kom er zelf helaas niet uit, maar ik blijf natuurlijk zoeken.

Bij voorbaat dank.
En ook bedank voor de reactie Fluring Life Designer

Sonja
Sonja
 
Berichten: 2
Geregistreerd: 08 Dec 2009 14:49

Re: Include script

Berichtdoor Fluring Lifes » 13 Dec 2009 16:36

Ik begrijp je probleem.
De manier van informatie opvragen moet werken, daar zie ik geen fouten in. Zie jij een mogelijkheid om je ftp gegevens naar mij toe te sturen in een prive bericht? Dan kan ik er zelf naar kijken.
Gebruikers-avatar
Fluring Lifes
Beheerder
 
Berichten: 1155
Geregistreerd: 28 Sep 2005 19:54
Woonplaats: Alkmaar - Nederland

Re: Include script

Berichtdoor trie » 24 Jun 2010 13:52

Hoi,

Stel ik heb een index.php en wil een test.php includen. Kan iemand aangeven welke precies aangepast moeten worden, waar en wanneer vul ik index en wanneer test in? path en default weet ik, maar ik zal aangeven (vetgedrukt ) wat ik bedoel.
En is het beter als ik ipv .php - .inc doe?

Code: Alles selecteren
<?php
/******     INSTELLINGEN ******/

if( file_exists( $path . $page . '.php' ) and !in_array( substr( $page, 1, 1 ), $notallowed ) and strpos( $page, '../' ) === false and strpos( $page, '..\\' ) === false ) [b]<<<<.php aanpassen naar bv test.php? en ( $page, '..\\' ) [/b]
{


{
    // De pagina bestaat en is geldig, dus wordt deze geinclude
    include( $path . $page . '.php' ); [b]<<<<.php aanpassen naar bv test.php?[/b]
}
else
{
    // De pagina die is opgegeven is niet goed of bestaat niet, dus wordt de standaard pagina geladen
    include( $path . $default_page . .php ); [b]<<<<.php aanpassen naar bv test.php?[/b]
}
?>


En wat betekent dit: Zorg dat je de bestanden een extensie geeft die wordt geparsed door de PHP interpreter zodat mensen niet de inhoud van die bestanden kunnen lezen.....


BVD.

Mod-edit (Theo): [code=php] tags toegevoegd.
trie
 
Berichten: 4
Geregistreerd: 24 Jun 2010 13:36

Re: Include script

Berichtdoor Theo » 24 Jun 2010 15:58

Als je één pagina wilt includen kan dat door:
Code: Alles selecteren
<?php
include( 'test.php' );
?>

Wat dit script doet is dynamisch pagina's includen, dus de inhoud van je pagina dynamisch laden.

Je kan dan bijvoorbeeld test.php als content laden in index.php door te gaan naar:
index.php?page=test

Lees het artikel nog eens goed door... dan snap je het beter. :)
I rather feel pain than nothing at all
Theo
Oprichter
 
Berichten: 1795
Geregistreerd: 11 Jun 2005 17:43
Woonplaats: in_array()

Re: Include script

Berichtdoor trie » 24 Jun 2010 23:43

Wanneer ik content in een DIV wil, dan kan ik dus includen. Wanneer dit in meerdere pagina's zo is, is dat vooral handig, zodat ik maar 1x hoef te veranderen. Maar moet ik dan niet include once doen?

Wanneer precies moet ik met includen gaan beveiligen en/of laten parsen zodat mensen niet de inhoud zoals wachtwoorden kunnne achterhalen?
En is het beter om .inc te doen of gewoon .php?

BVD
trie
 
Berichten: 4
Geregistreerd: 24 Jun 2010 13:36

Re: Include script

Berichtdoor maus » 06 Jul 2010 08:59

Het include script werkt geweldig, scheelt een hele hoop aanpassingen in de code tegenover het vorige script dat ik gebruikte.
Ik loop wel tegen 1 probleem op, ik kan mijn mailform niet meer gebruiken...
Ik krijg de volgende melding:
Warning: Cannot modify header information - headers already sent by

Nu heb ik weet ik wat al geprobeerd en opgezocht en gegoogled maar ik krijg deze melding er niet uit.
En ik heb dus al gekeken naar spaties en enters e.d.

Heeft iemand een idee of een ander mailscript dat wel werkt in combinatie met dit include-script?

Het werkt als ik het include-script niet gebruik, dan ziet de code als volgt uit:
header("Location: error.php");

Nu heb ik het aangepast naar het includescript en krijg ik de foutmelding:

Code: Alles selecteren
<?php

// Receiving variables
@$request addslashes($_POST['request']);
@
$about addslashes($_POST['about']);
@
$achternaam addslashes($_POST['achternaam']);
@
$voornaam addslashes($_POST['voornaam']);
@
$telefoon addslashes($_POST['telefoon']);
@
$email addslashes($_POST['email']);
@
$adres addslashes($_POST['adres']);
@
$postcode addslashes($_POST['postcode']);
@
$woonplaats addslashes($_POST['woonplaats']);
@
$land addslashes($_POST['land']);
@
$aantal addslashes($_POST['aantal']);
@
$vraag addslashes($_POST['vraag']);

// Validation
if (strlen($request) == )
{
header("Location: index.php?page=error");
exit;
}
if (
strlen($about) == )
{
header("Location: index.php?page=error");
exit;
}
if (
strlen($achternaam) == )
{
header("Location: index.php?page=error");
exit;
}
if (
strlen($voornaam) == )
{
header("Location: index.php?page=error");
exit;
}
if (
strlen($telefoon) == )
{
header("Location: index.php?page=error");
exit;
}
if (! 
ereg('[A-Za-z0-9_-]+\@[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+'$email))
{
header("Location: index.php?page=error");
exit;
}
if (
strlen($adres) == )
{
header("Location: index.php?page=error");
exit;
}
if (
strlen($postcode) == )
{
header("Location: index.php?page=error");
exit;
}
if (
strlen($woonplaats) == )
{
header("Location: index.php?page=error");
exit;
}
if (
strlen($land) == )
{
header("Location: index.php?page=error");
exit;
}


//Sending Email to form owner
$pfw_header "From: $email\n"
  
"Reply-To: $email\n";
$pfw_subject "Information request - Optional booking";
$pfw_email_to "naam@uwdomeinnaam.nl";
$pfw_message "Data mentioned below have been filled upon request:\n"
"\n"
"I would like to: $request\n"
"About: $request\n"
"\n"
"Last name: $achternaam\n"
"First name: $voornaam\n"
"Telephone: $telefoon\n"
"E-mail: $email\n"
"Address: $adres\n"
"Zip code: $postcode\n"
"City: $woonplaats\n"
"Country: $land\n"
"\n"
"Number of participants: $aantal\n"
"\n"
"Additional information or question: $vraag\n";
@
mail($pfw_email_to$pfw_subject ,$pfw_message ,$pfw_header );

//Sending auto respond Email to visitor
$pfw_header "From: naam@uwdomeinnaam.nl\n"
  
"Reply-To: naam@uwdomeinnaam.nl\n";
$pfw_subject "Information request - Optional booking";
$pfw_email_to "$email";
$pfw_message "Dear $voornaam,\n"
"\n"
"Thank you for your request.\n"
"You have passed on the below mentioned data:\n"
"\n"
"I would like to: $request\n"
"About: $request\n"
"\n"
"Last name: $achternaam\n"
"First name: $voornaam\n"
"Telephone: $telefoon\n"
"Address: $adres\n"
"Zip code: $postcode\n"
"City: $woonplaats\n"
"Country: $land\n"
"\n"
"Number of participants: $aantal\n"
"\n"
"Additional information or question: $vraag\n"
"\n"
"We will contact you as soon as possible.\n"
"\n"
"Kind regards,\n"
"\n"
"Naam";
@
mail($pfw_email_to$pfw_subject ,$pfw_message ,$pfw_header );

header("Location: index.php?page=thankyou");
?>


Mod-edit (Theo): [code=php] tags toegevoegd
maus
 
Berichten: 3
Geregistreerd: 06 Jul 2010 08:52

Re: Include script

Berichtdoor Theo » 06 Jul 2010 11:18

Het probleem is dat er al output is voor de header() code, dat zorgt voor de foutmelding.

Wat je zou kunnen doen is in plaats van te gaan naar de error pagina's deze ook te includen, of een tekst echo-en.

Of een vieze manier: http://php.net/manual/en/function.ob-start.php
I rather feel pain than nothing at all
Theo
Oprichter
 
Berichten: 1795
Geregistreerd: 11 Jun 2005 17:43
Woonplaats: in_array()

Volgende

Terug naar PHP



Wie is er online?

Gebruikers in dit forum: Google [Bot] en 1 gast


cron