Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

"Include" script


Anbefalte innlegg

Hallo

 

Planen var å sette inn et script så jeg kan skrive f eks index.php?side=prosjekter.html. Har tenk ut hvordan det skal settes opp, men å sette det opp klarer jeg ikke :p Noen som vil hjelpe meg? Noe sånn som dette tenkte jeg:

 

side = get(side)

If side = "" Then
   inkluder_hovedsiden
Else

   If page_exist(side) = True Then
       på_en_eller_annen_måte_includere_ "side"
   Else
       includere_en_404_fil
   End If

End If

 

Takker for alle svar :)

 

Jonas

Endret av Jonas
Lenke til kommentar
Videoannonse
Annonse

Et enkelt, sikkert, men ikke særlig "dynamisk":

switch($_GET['side']) {
case main: include("./inc/main.php");
break;
case en_annen_side: include("./inc/enannenside.php");
break;
case enkulside: include("./inc/enkulside.php");
break;
default: include("./inc/main.php"); /* Side som inkluderes hvis side ikke er oppgitt eller hvis den ikke eksisterer */
break;
}

 

 

EDIT: Hvis du vil ha et litt mer dynamisk og avansert kan du ta en titt på siden min. Link i signatur..

Endret av Loomy
Lenke til kommentar
Gjest Slettet-df17e

Her er ett enkelt include script jeg har lagd..

 

 <?php
$_GET['side'] = 'main';

   }

   if (file_exists($_GET['side'].".php")) {

   include($_GET['side'].".php");

   }

            else {

   echo ('404! Finne ikke filen');

   }
?> 

 

da vil linkene dine bli index.php?side=sidendin

 

Er jeg ikke snill :laugh:

Lenke til kommentar

En generell sak når det gjelder include skript og sikkerhet.

 

Du ønsker ikke at brukeren selv skal kunne kjøre et hvilket som helst skript, det er flere måter å unngå dette på.

En bra måte er å legge alle filer som tillates inn i et array og sjekke om siden er tillat før du inkluderer:

 

$allowed_includes = array('index', 'about', 'test');
if (in_array($_GET['page'], $allowed_includes)) {
// inkluder siden
}

 

Det er bare et eksempel for å sende forhåpentligvis noen i rett retning.

Lenke til kommentar

Hva er det Lemen har gjort? Med scripte mitt kan man ikke kjøre hvilken som helst php-filer fordi alle html-filene ligger i en egen mappe! Jeg skriver bare slik for å inkludere:side=main. Da åpnes Files/main.html. Da får man ikke tilgang til annet enn html filene .. tror jeg hvertfall :p

Lenke til kommentar

Man får tilgang til alle php-filene, som kan være litt risikofylt.

 

Bruker denne koden, syns den ser grei ut...

if(isset($_GET['page']))
{
   $page = "./pages/".$_GET['page'].".php";
   if(is_file($page))
   {
       //page is set, and exists
       $page_inc = $page;
   }
   else
   {
       //$page is set, but doesn't exist
       $page_inc = "./error/404.php";
   }
}
else
{
   //$page is not set
   $page_inc = "./pages/home.php";
}

include($page_inc);

Lenke til kommentar

Pangaea: Hvis man bruker koden din kan man få tilgang til alle php-filer... Du kan da bare skrive f.eks. index.php?page=../phpfil for å få tilgang til ei phpfil som ligger i hovedkatalogen din.

 

Jonas kan tydeligvis bare inkludere html-filer, og da kan man ikke kjøre noen andre php-filer med skriptet :)

Lenke til kommentar

Jeg bruker disse to:

 

<?

if (!isset ($_GET['id'])) {

$_GET['id'] = 'vis';

}

if (file_exists($_GET['id'].".php")) {

include($_GET['id'].".php");

}

else {

echo ('<p>404. <br /> No Such file</p>');

}
?>
<?
$url_array = explode ("/", $REQUEST_URI);

$var1 = $url_array [1];
$var2 = $url_array [2];
$var3 = $url_array [3];
$var4 = $url_array [4];
$var5 = $url_array [5];

?>

Lenke til kommentar

Hmm, hvordan fikser jeg skriptet så man bare kan lese fra pages katalogen da?

 

Edit: Fjernet "." så det ble "/pages/" istedenfor "./pages/". Er det nok, eller er det bare jeg som ikke vet hva jeg skal skrive for å "knekke" koden?

Endret av Pangaea
Lenke til kommentar

Hvis det ikke er så mange sider det er snakk om er det mulig å lage en switch-setning, men hvis det er mange sider, eller noe annet som gjør at det blir tungvint å gjøre det manuelt kan du vel få php til å finne alle filer i mappa, og bare velge blant de.

Lenke til kommentar

Med over 100 filer blir det nok uaktuelt manuelt ;)

Fint lite av andre php-filer uansett, bare satte de i en katalog for oversikten sin skyld. Ellers er det vel bare include-filer og index. Ikke bra om include filene blir lesbare da akkurat...

Lenke til kommentar

legg til ein enkel str_replace som fjerner alle "/" i variablen, deretter se om filen eksisterer, eller eventuelt to ".." vist du har filer i foldere som ligger i "page" folderen.

 

if(isset($_GET['page']))
{
  $page = str_replace("/","",$_GET['page']);
  $page = "./pages/".$page.".php";
  if(is_file($page))
  {
      //page is set, and exists
      $page_inc = $page;
  }
  else
  {
      //$page is set, but doesn't exist
      $page_inc = "./error/404.php";
  }
}
else
{
  //$page is not set
  $page_inc = "./pages/home.php";
}

include($page_inc);

Lenke til kommentar

inkludering av .html-filer eller for den saks skyld en hvilken som helst filending, er skummelt det også, ettersom en ondsinnet nisse f.eks. kan legge php-kode i en html-fil og inkludere denne. Ettersom filen inkluderes vil koden kjøres til tross for at filen er en html. Den vil ikke kjøres dersom filen lastes direkte, men ved include skjer altså dette.

Lenke til kommentar
inkludering av .html-filer eller for den saks skyld en hvilken som helst filending, er skummelt det også, ettersom en ondsinnet nisse f.eks. kan legge php-kode i en html-fil og inkludere denne. Ettersom filen inkluderes vil koden kjøres til tross for at filen er en html. Den vil ikke kjøres dersom filen lastes direkte, men ved include skjer altså dette.

Hva er det du prøver å si? At en nisse skal inkludere filer fra en annen side? Det går ikke..

 

Eller mener du at en har tenkt til å "hacke" ftp'en og endre noen av filene mine? Da hjelper jo ingen ting...

Lenke til kommentar

uansett av hva han mener er filnavnet ingen indikasjon på om det kjøres php eller ikke.

 

include kjører fila som om det var gyldig phpkode uavhengig av filendelsen.

 

hvis det er en fyr som har bruker på samme server, så kan han lage hvilke filer han vil og kjøre de gjennom ditt includeskript bare

Lenke til kommentar
uansett av hva han mener er filnavnet ingen indikasjon på om det kjøres php eller ikke.

 

include kjører fila som om det var gyldig phpkode uavhengig av filendelsen.

 

hvis det er en fyr som har bruker på samme server, så kan han lage hvilke filer han vil og kjøre de gjennom ditt includeskript bare

Jeg har konto på start, men faktisk så tror jeg ikke det går ann.

 

Fordi index fila mi ligger i hoved mappa og "inkluder-bare" filer ligger i mappen "sider". For å inkludere skriver man bare navnet på fila. Hvis du skriver main så åpener den Sider/main.html. Så man kan bare inkludere sider i den mappa.

 

Edit: Eller kan man skriver ".." og komme til hovedmappa? Kan jeg bruke Findus sitt eksempel for å forhindre det da?

Endret av Jonas
Lenke til kommentar

Ok, nå har jeg lagt inn Findus sitt eksempel og ".."-trikset fungerer ikke :) Men jeg har et problem. I eksempelet hans er det sånn at hvis jeg skriver noe som ikke er i array'et, inkluderes ingen ting og div'en blir tom. Jeg vil inkludere en side da! Kan noen hjelpe meg? Her er skriptet:

<?php

if (isset($_GET['page']))
{
$page = "Sider/".$_GET['page'].".html";
if(is_file($page))
{

//blabla
$allowed_includes = array('main', 'prosjekter', 'artikler', 'kontakt');
if (in_array($_GET['page'], $allowed_includes)) {

  //page is set, and exists
  include($page);

}
//blabla

  }
  else
  {
    //$page is set, but doesn't exist
    include("Sider/404.html");
   }
}
else
{
//$page is not set
include("Sider/main.html");
}
 
?>

Det som står mellom "blabla" er koden som trenger en "else".

 

Edit: Det viste seg at jeg ike trengte det allikavel. Bare jeg som surre litt her nå :blush:

Endret av Jonas
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...