Dynamisk include med php

... samme side med varierende indhold

Se også:

Siden er opdateret 29. 11. 2009

Hvis en side er blevet meget lang, kan der være en ide i at 'klippe' den over i mindre bidder, som så kan hentes ind i den samme side.

Dels vil den side, som brugeren skal hente, blive kortere og downloaddtiden bliver tilsvarende reduceret og dels skal brugeren kun hente den del af siden, som der er brug for at hente.

Gå til:

Sikker metode til større sites

Metoden på side 1 indebærer en risiko for, at der sker en såkaldt SQL-injection, hvor brugeren selv vælger, hvilken fil hvor som helst på din server, han vil have inkluderet. Selv filer, der ellers skulle være password-beskyttede, kan således blive åbenbaret for hvem som helst.

Har du derfor noget på din server, ikke alle må se, skal du bruge denne metode i stedet:

Fremgangsmåde ved opbygning:

Fjern alt sideindhold fra den oprindelige side og læg det midlertidigt i en anden fil. Lav så i toppen (over DTD) på siden dette script:

<?
$sider = array (
//'s1' => 'Side 1',
//'s2' => 'Side 2',
//'s3' => 'Side 3',
);
$code='s1'; $title=$sider[$code];  /* default indhold hvis intet er specifiseret */
$order=$_GET['page'];
if (isset($sider[$order])){
$code=$order;
$title=$sider[$order];
}
$content=$code.'.inc';
?>

Lad os lige stykke det ud i mindre bidder til en forklaring:

$sider = array (
//'s1' => 'Side 1',
//'s2' => 'Side 2',
//'s3' => 'Side 3',
);

Array'et øverst i scriptet definerer de lovlige undersider, der kan indlæses i aktuelle side. Definitionen sker på formen: '[filnavn uden extension]' => '[tekst, der vises i den automatiske menu]',.

$code='s1';

Her defineres den underside, som skal indlæses, hvis ingen underside er defineret i linket til hovedsiden - eller hvis der er defineret en 'ulovlig' underside.

$order=$_GET['page'];

Parameteren for underside hentes.

if (isset($sider[$order])){
$code=$order;
$title=$sider[$order];
}

Der tjekkes, om parameteren ligger i det lovlige array, så der kan fortsættes - eller om den defaulte side skal indlæses.

$content=$code.'.inc';

Den ønskede extension sættes på undersiden - uanset om det er en brugerkaldt lovlig side, eller om det er den defaulte side.


Indsæt så på det sted på din side, hvor du vil have indholdet indsat, denne kode:

<?php
print "<div id=\"menu\">"; // ID kan med css styre menuens placering på siden.
foreach($sider as $key => $entry) {
print "<p>";
if ($code==$key) print $entry;
else print "<a href='?page=$key'>$entry</a>";
print "</p> \n";
};
print "\n </div>\n";
include($content);
?>

Den stykker vi også lige ud til en nærmere forklaring:

print "<div id=\"menu\">";

Starttag til menuens <div> udskrives til html.

foreach($sider as $key => $entry) {
print "<p>";

foreach laver et gennemlæb af det array, der blev defineret øverst i hovedsidens fil. ($sider as $key => $entry) sætter nogle variabler, der skal bruges undervejs. Der indsættes et starttag til et <p>-element.

if ($code==$key) print $entry;

Hvis $key er magen til $code, udskrives sidens navn i almindelig tekst.

else print "<a href='?page=$key'>$entry</a>";

Hvis $key er forskellig fra $code, udskrives sidens navn med et omgivende a-tag, der sætter den nødvendige kode sammen af hovedsiden plus parameteren til pågældende side.

print "</p> \n";
};

Menupunktets afsluttende </p> indsættes

print "\n </div>\n";

Når hele array'et er gennemløbet og alle menupunkter etableret, afsluttes menuen med </div>.

Hele din menu vil hermed se sådan ud:

<div class="menu">
<p><a href='?page=s1'>Side 1</a></p>
<p>Side 2</p>      <!-- Denne side -->
<p><a href='?page=s3'>Side 3</a></p>
</div>

Læg mærke til, at der ikke er defineret den hovedside, som undersiderne skal indlæses i ved klik på et menupunkt. Det arbejde klarer brugerens browser.

Den ønskede underside indlæses med sidste kodelinje:

include($content);

Hvis du vil bruge teksten fra linket som overskrift på den inkluderede sidedel, skal du udvide den sidste kodelinje sådan:

print "<h1>". $title ."</h1>\n";
include($content);

^ Tilbage til sidens top

Valid XHTML og CSS / Copyright © Hjemmesideskolen december 2005
Hjemmesideskolen
Du er her: Forsiden - html - Dynamisk include med php
Brugere lige nu: 1
Home Mail