Gå til innhold

[løst]kordan lage "index.php?page=3" ?


Gjest Slettet+142

Anbefalte innlegg

Videoannonse
Annonse

Bruk heller dene så slipper du a bruke den stygge url her:

http://eksempel.no/index.php?side=side1&handling=les&hva=epost

men kan istende bruke dene "pene" uri:

http://eksempel.no/index.php/side1/les/epost

 

<?php
// Folder der alle sidene dine ligger
$includeDirectory = '../lib';

// Siden som blir valgt hvis den øsnkede siden ikke er gyldig
$defaultPage = 'frontPage.php';

// Fil endelse til sidene dine
$postFix = '.php';

// Formater URIen slik at man fjerner alt forand index.php/
$rawUri = getUri($_SERVER['REQUEST_URI']);
function getUri($url) {
   $tmp = explode('.php/',$url);
   if (isSet($tmp[1])) {
       return $tmp[1];
   }
   return null;
}

// Splitt opp /side1/les/epost til $uri = array('side1','les','epost') 
$uri = array();
if (($pos = strpos($rawUri, '?')) !== false) {
   $uri = processUri(substr($rawUri, 0, $pos));
} else { 
   $uri = processUri($rawUri);
}
function processUri($uri) {
   return explode('/', trim($uri, '/'));
}

// sjekk om den ønskede siden eksistere.
// Hvis ikke så bruker vi den forvalgte
$requestedPage = '';
if (empty($uri[0])) {
   $requestedPage = $includeDirectory . DIRECTORY_SEPARATOR .$defaultPage . $postFix;
} else {
   if (file_exists($includeDirectory . DIRECTORY_SEPARATOR . $uru[0] . $postFix)) {
       $requestedPage = $includeDirectory . DIRECTORY_SEPARATOR . $uru[0] . $postFix;
   } else {
       $requestedPage = $includeDirectory . DIRECTORY_SEPARATOR .$defaultPage . $postFix;
   }
}

require_once($requestedPage);

 

Enda penere kan den bli om du benytter modRewrte:

http://eksempel.no/side1/les/epost

<?php
// Folder der alle sidene dine ligger
$includeDirectory = '../lib';

// Siden som blir valgt hvis den øsnkede siden ikke er gyldig
$defaultPage = 'frontPage.php';

// Splitt opp /side1/les/epost til $uri = array('side1','les','epost') 
$uri = array();
$rawUri = $_SERVER['REQUEST_URI'];
if (($pos = strpos($rawUri, '?')) !== false) {
$uri = processUri(substr($rawUri, 0, $pos));
} else { 
$uri = processUri($rawUri);
}
function processUri($uri) {
return explode('/', trim($uri, '/'));
}

// sjekk om den ønskede siden eksistere.
// Hvis ikke så bruker vi den forvalgte
$requestedPage = '';
if (empty($uri[0])) {
$requestedPage = $includeDirectory . DIRECTORY_SEPARATOR .$defaultPage;
} else {
if (file_exists($includeDirectory . DIRECTORY_SEPARATOR . $uru[0])) {
 $requestedPage = $includeDirectory . DIRECTORY_SEPARATOR . $uru[0];
} else {
 $requestedPage = $includeDirectory . DIRECTORY_SEPARATOR .$defaultPage;
}
}

require_once($requestedPage);

Endret av Fjoggs
Lenke til kommentar
Gjest Slettet+142
Ligger også et eksempel her :)

6153153[/snapback]

dette e jo det eg bruker... tror eg...

bare at eg lagde mitt sjøl då... :tease::thumbup:

Endret av Slettet+142
Lenke til kommentar
  • 1 år senere...
php.net er verdens største online php dokumentasjon, så jeg ville nok lært meg til å like den. Den er forresten veldig brukervennlig, enkel og oversiktlig. Ingenting galt med den.

 

php.net/in_array forteller deg hva funksjonen gjør, hva slags parametere den tar osv. Under følger det noen praktiske eksempler. Du er helt avhengig av å bruke den til litt større prosjekter, du kan ikke huske all verdens funksjoner i hodet.

 

Og her er scriptet mitt med forklaring:

<?php
$dir = 'include/'; // mappen filene ligger i
$file_suffix = '.inc.php'; // Filendelsen filene har
$side = $_GET['side']; // siden du skrev inn i URL'en blir lagt i variabelen $side
$default = 'forside.inc.php'; // Siden som inkluderes hvis ikke $side finnes, eller er tom

$legal_sites = scandir($dir); // lager et array over tillatte fil
$illegal_sites= array('Thumbs.db','.ftpquota','hemmelig_fil.txt'); // det samme med ulovlige filer

if(in_array($legal_sites, $side . $file_suffix) && !in_array($illegal_sites, $side . $file_suffix))
  @include($dir . $side); // inkluderer filen i URL'en hvis den finnes og ikke er i ulovlig-arrayet
else
  @include($dir . $default); // Hvis den ikke finnes, eller $_GET['side'] er tom
?>

 

den koden legger du i index.php der du vil ha den. Så oppretter du en mappe som heter 'include' og legger en haug med filer som har filendelsen .inc.php der. Så er det bare å skrive "index.php?side=navn_på_fil_i_mappen". Du MÅ ha filen forside.inc.php der, den er standardfilen og forsiden.

 

Den her funker ikke da.. det er fakka rekkefølge.. String, så array..

Lenke til kommentar

Jada, jeg har sett at nest siste innlegg ble skrevet i 2006 og at mariyo sikkert har fått til dette for lenge siden, men bare for å få klarhet i det og hvis andre her vil gjøre det samme så må vel dette være den enkleste veien?

 

bare legg page1.php, page2.php o.s.v. i en mappe som du kaller "inc"

og i index.php skriver du dette der du skal ha frem innholdet i page1, page2 o.s.v.

<?php
$page = $_GET['page'];
if(!isset($page)) { 
$page = "1";
}
$incfil = "./inc/page" . $page . ".php";
if(file_exists($incfil)) { 
include($incfil);
} else {
print("Siden finnes ikke!");
}
?>

 

og linkene blir da sånn som skrevet i topic!

Endret av YaNkEs
Lenke til kommentar
Gjest Slettet+142

Det er det nok, ja. Og ja, jeg har funnet dette ut for lenge siden, hvor jeg aller første gangen hadde noe likt til det du akkurat skrev, YaNkEs.

 

Ellers kan man sikre skriptet ditt litt mer, inkludere bruk av database eller flatfiler osv...

uansett burde skriptet ditt beskytte mot "../" :p

<?php
$page = $_GET['page'];
if(!isset($page) || strpos($page, "../")!==FALSE) {
$page = "1";
}
$incfil = "./inc/page" . $page . ".php";
if(file_exists($incfil)) {
include($incfil);
} else {
print("Siden finnes ikke!");
}
?>

 

Edit: men er vel idé å ikke poste mer i denne tråden...

Endret av Slettet+142
Lenke til kommentar
Gjest
Dette emnet er stengt for flere svar.
×
×
  • Opprett ny...