Avatar billede andreas13_fam Nybegynder
01. januar 2009 - 16:58 Der er 64 kommentarer og
1 løsning

Importer side afhængig af "spørgsmålstegn"

Hej php eksperter
Jeg søger et php script som kan gøre dette.

1 jeg åbner siden ”index.php”: da der ikke er noget ”?...” importeres siden ”filer/oversigt.html”
2  jeg åbner siden ”index.php?side1”: da der er et ”?...” importeres siden ”filer/side1.html”
- Jeg skal desuden kunne bestemme hvor i html koden siden skal importeres.

Det skal lige siges at jeg ikke har særlig meget forstand på php.
Avatar billede kgp43 Nybegynder
01. januar 2009 - 17:11 #1
Find det punkt i html koden, hvor du vil have teksten indsat - afhængig af ?

<?php
if($side1) {
include "filer/side1.html";
}elseif($side2) {
include "filer/side2.html";
}elseif($side3) {
include "filer/side3.html";
}else{
include "filer/oversigt.html";
}


- Tror jeg, ellers må nogle pros lige hjælpe til ;)
?>
Avatar billede mstorgaard Praktikant
01. januar 2009 - 17:18 #2
Du skal nok erstatte $side1 med $_GET['side1'] - det er lidt mere kompatibelt

Personligt ville jeg også skrive include("filer/side1.html"); i stedet for include "filer/side1.html";
Avatar billede mstorgaard Praktikant
01. januar 2009 - 17:24 #3
En anden metode at gøre det på:

<?php
switch($_GET['side']) {
case 0:
include('filer/oversigt.html');
break;
case 1:
include('filer/side1.html');
break;
case 2:
include('filer/side2.html');
break;
case 3:
include('filer/side3.html');
break;
}
?>

Her skal du så skrive dine links som følgende:
index.php?side=1
index.php?side=2
Avatar billede vifa Novice
01. januar 2009 - 17:40 #4
Hej

Jeg er ikke sikker på jeg forstår spørgsmålet, men jeg formoder du har en forside som hedder index.php, og på denne side vil du gerne inkludere dine undersider?

Du skal kalde din forside for index.php. Du laver en mappe der hedder 'indhold', hvori du gemmer dine undersider. Når du så angiver et link til dine undersider fra index.php skal de have linket 'index.php?side=side1' - (bemærk at 'side1' er et navn jeg har fundet på, du erstatter selvfølgelig bare dette med det dine sider nu engang hedder).

Du indsætter nu dette stykke kode i din index.php der hvor du vil have at dine undersider skal inkluderes:

<?php

side = $_GET['side'];
           
if(isset($side))
{
  if(is_file('indhold/' . $side . '.php'))
  {
      require_once('indhold/' . $side . '.php');
  }
  else
  {
      echo "<h3><center><p>Siden findes ikke</p></center></h3>";
  }   
}
else
{
  require_once('indhold/forside.php');
}

?>
Avatar billede Slettet bruger
01. januar 2009 - 17:46 #5
vifa->
Hvad så hvis man skriver index.php?side=../http://www.ondside.com/ondscript.php
Det er ikke den mest sikre løsning, men man kan eventuelt have de tilladte sider i et array:

<?php

$side = $_GET['side'];
$tilladteSider = array("forside", "nyheder", "kontakt");

if(isset($side))
{
  if(in_array($side, $tilladteSider))
  {
      require_once('indhold/' . $side . '.php');
  }
  else
  {
      echo "<h3><center><p>Siden findes ikke</p></center></h3>";
  } 
}
else
{
  require_once('indhold/forside.php');
}

?>
Avatar billede Slettet bruger
01. januar 2009 - 17:50 #6
*vifa's løsning er ikke den mest sikre. Den jeg viste er sikker nok.
Avatar billede vifa Novice
01. januar 2009 - 17:57 #7
kaloer, jeg er bange for at du ikke forstår min kode i såfald. Kig på min kode igen, der er taget højde for den slags. I min kode går den ind og tjekker om siden eksistere i mappen 'indhold', hvis ikke udskriver den en fejlmeddelse "Siden findes ikke".

Derfor vil det eneste resultat være hvis man taster index.php?side=../http://www.ondside.com/ondscript.php at den echoer en fejl ud eftersom denne side slet ikke findes i mappen 'indhold'.
Avatar billede mstorgaard Praktikant
01. januar 2009 - 18:12 #8
Vifa; generelt set er det en god idé at begrænse, hvilke sider en bruger kan få adgang til, når man inkluderer filer på denne måde.
Avatar billede olebole Juniormester
01. januar 2009 - 18:13 #9
<ole>

vifa >> Jeg er ikke bange for, men helt sikker på, du ikke forstår din egen kode  ;o)

Hvilken sikkerhed ligger der i at konstatere, filen eksisterer? Med din 'metode' er det muligt at inkludere en hvilken somhelst fil, der ikke må inkluderes - og det er endda muligt at inkludere filer udenfor webspace (= selvmord!)

/mvh
</bole>
Avatar billede olebole Juniormester
01. januar 2009 - 18:16 #10
- og kaloer's indevending er fuldstændig korrekt! Hvor mon stien 'indhold/../../forbudte_filer/draeberfil.php' peger hen?  ;o)
Avatar billede olebole Juniormester
01. januar 2009 - 18:20 #11
- og lad mig dobbelt-understrege mstorgaards kommentar: Det er ikke bare "generelt set en god idé" - "it's a freakin' must!"
Avatar billede vifa Novice
01. januar 2009 - 18:23 #12
olebole, jeg tvivler på at det vil være muligt at inkludere andre sider i henhold til min metode. Prøv eksempelvis at teste dette. Hvis du eksempelvis i adressefeltet skriver index.php?side=http://www.tv2.dk så har du ikke videre held med at inkludere TV2 side idet den ikke findes i mappen indhold.
Avatar billede olebole Juniormester
01. januar 2009 - 18:24 #13
vifa >> Som bekendt er 'tvivl' ikke en option for en programmør. Som hvergang emnet kommer op her på Eksperten (ca. én gang om ugen), er svaret:
    http://dk2.php.net/manual/en/function.basename.php
Avatar billede vifa Novice
01. januar 2009 - 18:25 #14
...men ja, jeg er fuldstædnig enig med mstorgaard, generelt set en god ide at begrænse adgangen til andre sider.
Avatar billede olebole Juniormester
01. januar 2009 - 18:26 #15
- og det bekymrer mig faktisk, at du ikke umiddelbart kan se det ekstremt farlige i din løsning. Kan du virkelig ikke se, det er muligt at inkludere hvilken somhelst side på serveren med din 'metode'?  =)
Avatar billede vifa Novice
01. januar 2009 - 18:27 #16
nej?
Avatar billede olebole Juniormester
01. januar 2009 - 18:28 #17
Så bør du helt afgjort lave et forsøg, så du lærer, hvordan den slags absolut ikke må gøres  ;o)
Avatar billede olebole Juniormester
01. januar 2009 - 18:29 #18
Hvad er det, du ikke forstår ved eksemplet i (01/01-2009 18:16:52)?
Avatar billede olebole Juniormester
01. januar 2009 - 18:31 #19
Denne URI:
    index.php?side=http://www.tv2.dk

- vil forsøge at hente filen 'indhold/http://www.tv2.dk', hvilket aldig vil kunne lade sig gøre. Men andre URI'er kan være katastrofale!
Avatar billede vifa Novice
01. januar 2009 - 18:31 #20
Hvis du med denne metode vælger at skrive, som jeg skrev i min ovenstående post, index.php?side=http://www.tv2.dk så vil der ikke blive inkluderet noget idet at denne side ikke findes i mappen indhold. Så du bliver nød til at uddybe hvad du mener før jeg forstår det.
Avatar billede olebole Juniormester
01. januar 2009 - 18:32 #21
Det har jeg gjort - og jeg har enddas bukket det i neon! Hvad er det, du ikke forstår?
Avatar billede vifa Novice
01. januar 2009 - 18:34 #22
Kan godt se hvad du hentyder til nu i din post (01/01-2009 18:31:12)
Avatar billede olebole Juniormester
01. januar 2009 - 18:34 #23
;o)
Avatar billede olebole Juniormester
01. januar 2009 - 18:38 #24
For at sære eksemplet i (01/01-2009 18:16:52) helt ud i pap:

'index.php?side=../../forbudte_filer/draeberfil.php' går to niveauer op fra din rodmappe på serveren - og ned i mappen 'forbudte_file' og henter filen 'draeberfil.php' ... that ain't good!  :)
Avatar billede olebole Juniormester
01. januar 2009 - 18:39 #25
- og jeg forsøgte naturligvis ikke at 'sære' det ud i pap, men at 'skære' det ud i pap  ;D
Avatar billede vifa Novice
01. januar 2009 - 18:41 #26
:)
Avatar billede olebole Juniormester
01. januar 2009 - 18:44 #27
En løsning kunne være:

$side = "indhold/".basename($_GET['side'].".php");
           
if(isset($side)) {
  if(is_file($side)) {
      require_once($side);
  } else {
      echo "<h3><center><p>Siden findes ikke</p></center></h3>";
  }   
}
else require_once('indhold/forside.php');
Avatar billede olebole Juniormester
01. januar 2009 - 18:47 #28
Njaahhh ... det giver vel egentlig ikke megen mening. Det gør det her til gengæld:
           
if(isset($_GET['side'])) {
  $side = "indhold/".basename($_GET['side'].".php");
  if(is_file($side)) {
      require_once($side);
  } else {
      echo "<h3><center><p>Siden findes ikke</p></center></h3>";
  }   
}
else require_once('indhold/forside.php');
Avatar billede andreas13_fam Nybegynder
01. januar 2009 - 19:14 #29
Jeg må sige at php gruppen er arktiv. Men lige først står jeg over for det problem at php ikke kan lide XHTML, da den skiver dette...
Parse error: syntax error, unexpected T_STRING in fil.php on line 1
og linje 1 er <?xml version="1.0" encoding="iso-8859-1"?>
Se her: http://www.a-mweb.dk/ny/WWW_Den-lille-kogebog.php
Hent her: http://www.a-mweb.dk/ny/WWW_Den-lille-kogebog.zip

Men hvis det problem ellers bliver løst så…
I første omgang har jeg benyttet kgp43’s-script med mstorgaard’s kommentar.
Men da jeg ikke mener at det er praktisk at lave en if/ellesif for hver side kan jeg bedre lide vifa’s-script.
Men jeg kan godt se at det ikke er særligt sikkert.
Da jeg ikke er særlig god til php og næsten kun kender navnet må jeg lige stille nogle spørgsmål til olebole’s- script (den som giver mening :D )
<?php
// 1. hvordan er dette anderledes fra vifa’s-script, det er ingen fornærmelse jeg forstår mig bare ikke så godt på php
if(isset($_GET['side'])) {
  $side = "indhold/".basename($_GET['side'].".php");
  if(is_file($side)) {
      require_once($side);
  } else {
// 2. er dette det som bliver vist hvis der er et ”?” men siden kan ikke findes
      echo "<h3><center><p>Siden findes ikke</p></center></h3>";
  }   
}
// 3. er dette det som blive vist hvis der intet ”?” er.
else require_once('indhold/forside.php');
?>
Og så har jeg lige et spørgsmål hvis det elles er som jeg tror.
Er det muligt at importere 'indhold/forside.php' efter <p>Siden findes ikke</p>.
PS: jeg menes ikke at man kombinere ”<h3> og <p>, eller også er det bare mig ;)

Men tak for de mange input :)
Avatar billede mstorgaard Praktikant
01. januar 2009 - 19:21 #30
Du kan udskifte første linje med følgende:
<?php echo '<?xml version="1.0" encoding="iso-8859-1"?>'; ?>
Avatar billede mstorgaard Praktikant
01. januar 2009 - 19:23 #31
Nummer 1; basename() er den primære ændring.
Nummer 2; Det er bare en tekst, der skrives, hvis det ikke findes nogen filer. Der kan du sætte det ind, du vil.
Nummer 3; Ja (:

"Er det muligt at importere 'indhold/forside.php' efter <p>Siden findes ikke</p>.":
echo "<h3><center><p>Siden findes ikke</p></center></h3>";
require_once('indhold/forside.php');
Avatar billede olebole Juniormester
01. januar 2009 - 19:31 #32
Du har intet at bruge den linje til. XHTML er elendig understøttet på WWW - og IE 7 understøtter slet ikke XHTML brugt, som det skal. Derfor kan du roligt fyre den pågældende linje (den disabler iøvrigt de vigtigste dele af CSS i IE6, så den _skal_ fyres!)  ;o)
    http://www.eksperten.dk/artikler/537
    http://www.eksperten.dk/artikler/538

Hvis brugeren skriver:
    'index.php?side=../../forbudte_filer/draeberfil.php'

- i vifa's oprindelige eksempel, vil serveren gå to niveauer op fra din rodmappe på serveren - og ned i mappen 'forbudte_file' og henter filen 'draeberfil.php' ... det er rent selvmord!

basename henter selve filnavnet fra en URL/URI:
    http://dk2.php.net/manual/en/function.basename.php

Det betyder, at hvis brugeren skriver:
    'index.php?side=../../forbudte_filer/draeberfil.php'

- vil følgende ske:

if(isset($_GET['side'])) {  // Tjek, om variablen overhovedet er sat i URL'en
  $side = "indhold/".basename($_GET['side'].".php");  // Se nedenfor
  if(is_file($side)) {  // Eksisterer filen?
      require_once($side);  // Inkluder filen
  } else {
      echo "<h3><center><p>Siden findes ikke</p></center></h3>";
  }   
}
else require_once('indhold/forside.php');  // Inkluder en standardfil

Linjen:
    $side = "indhold/".basename($_GET['side'].".php");

- giver med det viste brugerinput en sti, der ser sådan ud:
    $side = "indhold/draeberfil.php";

Da den fil ikke eksisterer, vil den ikke blive inkluderet  =)
Avatar billede olebole Juniormester
01. januar 2009 - 19:33 #33
- og du kunne f.eks. gøre sådan:

if(isset($_GET['side'])) {  // Tjek, om variablen overhovedet er sat i URL'en
  $side = "indhold/".basename($_GET['side'].".php");  // Se nedenfor
  if(is_file($side)) {  // Eksisterer filen?
      require_once($side);  // Inkluder filen
  } else {
      require_once('indhold/forside.php');  // Inkluder en standardfil
  }   
}
else require_once('indhold/forside.php');  // Inkluder en standardfil
Avatar billede olebole Juniormester
01. januar 2009 - 19:34 #34
- så inkluderes standardfilen altid, hvis der ikke er sat en include-sti i URL'en - eller hvis dén, som er sat, ikke kan/må inkluderes  =)
Avatar billede AnyFellow Mester
01. januar 2009 - 19:44 #35
Jeg plejer at gøre således:

// Angiver de sider der er defineret.
$tilladte_sider[] = "side1";
$tilladte_sider[] = "side2";
$tilladte_sider[] = "side3";

// Checker at brugeren ikke forsøger at tilgå en side der ikke er defineret.
if (in_array($_GET['side'], $tilladte_sider)) {
    $side = $_GET['side'];
} else {
    $side = "side1";
}

if ($show == "side1") {
    echo "Du er på SIDE1";
}

if ($show == "side2") {
    echo "Du er på SIDE2";
}

if ($show == "side3") {
    echo "Du er på SIDE3";
}
Avatar billede AnyFellow Mester
01. januar 2009 - 19:45 #36
Hov, fik ikke rettet hele scriptet

$show skal være $side.
Avatar billede andreas13_fam Nybegynder
01. januar 2009 - 21:04 #37
hmmm det virker ikke rigtig...
php kode
<?php
if(isset($_GET['side'])) {
  $side = "WWW_den-lille-kogebog/Opskrifter".basename($_GET['side'].".html");
  if(is_file($side)) {
      require_once($side);
  } else {
            echo ('Siden findes ikke');
            require_once('WWW_den-lille-kogebog/Opskrifter/Oversigt.html');
  }   
}
else require_once('WWW_den-lille-kogebog/Opskrifter/Oversigt.html');
?>

Resultat: http://www.a-mweb.dk/ny/WWW_Den-lille-kogebog.php
Avatar billede olebole Juniormester
01. januar 2009 - 21:38 #38
Du skriver ikke, det jeg skrev  =)
    $side = "WWW_den-lille-kogebog/Opskrifter/".basename($_GET['side'].".html");
Avatar billede olebole Juniormester
01. januar 2009 - 21:40 #39
- og med URL'en:
    index.php?side=blabla

- vil siden:
    WWW_den-lille-kogebog/Opskrifter/blabla.html

- blive inkluderet
Avatar billede mstorgaard Praktikant
01. januar 2009 - 21:40 #40
andreas13_fam;
Din Oversigt.html ligger ikke http://www.a-mweb.dk/ny/WWW_den-lille-kogebog/Opskrifter/
Den ligger derimod i http://www.a-mweb.dk/ny/

Derfor skal du ændre din kode til:
<?php
if(isset($_GET['side'])) {
  $side = basename($_GET['side'].".html");
  if(is_file($side)) {
      require_once($side);
  } else {
            echo ('Siden findes ikke');
            require_once('Oversigt.html');
  }   
}
else require_once('Oversigt.html');
?>

- eller du kan rykke rundt på dine filer (:
Avatar billede andreas13_fam Nybegynder
01. januar 2009 - 23:48 #41
@ mstorgaard
Tak det havde jeg overset, en klassisk fejl på mit niveau
Nu viser den det rigtige næsten!
@Alle
Tak for den store hjælp, det virker dog ikke helt.
Når jeg trykker på et link fx ”forside.php?side1 viser den bare Oversigten (Oversigt.html). Skriver jeg noget som ikke findes fx forside.php?test viser den igen bare Oversigten (Oversigt.html), og ikke Siden findes ikke + Oversigten.

Php koden ser sådan ud nu…
<?php
if(isset($_GET['side'])) {
  $side = "WWW_den-lille-kogebog/Opskrifter".basename($_GET['side'].".html");
  if(is_file($side)) {
      require_once($side);
  } else {
      echo ('Siden findes ikke');
      require_once('WWW_den-lille-kogebog/Opskrifter/Oversigt.html');
  }   
}
else require_once('WWW_den-lille-kogebog/Opskrifter/Oversigt.html');
?>
Avatar billede olebole Juniormester
02. januar 2009 - 01:16 #42
Du gør ikke, hvad der bliver foreslået. Læs kommentaren: 01/01-2009 21:38:16
Avatar billede andreas13_fam Nybegynder
02. januar 2009 - 10:03 #43
Det var næsten pinligt, den ”/” var da til at overse :D
Men det virker desværre stadig ikke:(
Problemet er det samme.

<?php
if(isset($_GET['side'])) {
  $side = "WWW_den-lille-kogebog/Opskrifter/".basename($_GET['side'].".html");
  if(is_file($side)) {
      require_once($side);
  } else {
      echo ('Siden findes ikke');
      require_once('WWW_den-lille-kogebog/Opskrifter/Oversigt.html');
  }   
}
else require_once('WWW_den-lille-kogebog/Opskrifter/Oversigt.html');
?>
Avatar billede Slettet bruger
02. januar 2009 - 11:01 #44
Jeg tror det skyldes at du forsøger at tilgå siden på den forkerte måde.
$_GET['side'] indeholder en variabel på det, der står efter ?side=. Dvs. at hvis du skriver forside.php?side1 vil $_GET['side'] ikke blive sat, da den checker forside.php?side=DEN_TEKST_HER. Du skal tilgå siden sådan:
forside.php?side=side1.
Hvis du skal gøre det på den anden måde bliver det en del sværer.
http://dk2.php.net/manual/en/reserved.variables.get.php
Avatar billede andreas13_fam Nybegynder
02. januar 2009 - 12:12 #45
Nej det gør ikke noget så kan jeg linke sådan her forside.php?Opskrift=navn på opskrift.
:D

Hvordan skal pointfordelingen være.
Avatar billede Slettet bruger
02. januar 2009 - 12:27 #46
Jeg hopper over..
Avatar billede olebole Juniormester
03. januar 2009 - 19:03 #47
Det er faktisk årsagen til, man benytter 'isset'. Man kan f.eks. prøve koden:

<?php
if (isset($_GET['side'])) print "<p>Variablen 'side' er sat.</p>";
print "<p>Variablen 'side' indeholder: '".$_GET["side"]."'</p>";
?>

ved '?side=' vil du få at vide, at 'side' er sat, men at den indeholder en tom streng  =)

    http://dk2.php.net/manual/en/function.isset.php
Avatar billede andreas13_fam Nybegynder
03. januar 2009 - 23:07 #48
Ja ok.
Og tak fordi du gjorde mig opmærksom på MIME type.
Jeg beholder nu mine filer i XHTML men bruger så denne php kode, som du har kommenteret: http://www.eksperten.dk/spm/858357
Avatar billede kkrasmussen Nybegynder
05. januar 2009 - 14:56 #49
Jeg har løst det selv ved at gøre således:

$id=$_GET['id'];
if($id!="")
{
    if(file_exists("./modules/".$id.".php")==true)
    {
        include_once("./modules/".$id.".php");
        $module = new module();
        $text = $module->gen_style();
    }
    else
    {
        header("location: index.php");
        break;
    }
}
else
{
    include_once("./modules/frontpage.php");
    $module = new module();
    $text = $module->gen_style();

}
return $text;
Avatar billede olebole Juniormester
05. januar 2009 - 15:15 #50
kkrasmussen >> Ja, hvis man er helt syg for at begå offentligt selvmord, kan man jo godt vælge dén fremgangsmåde - men den indbyder enhver potentiel hacker/cracker til en autonom svingom på serveren!

Hvis du på den anden side ønskede at vise skoleeksemplet på, hvordan man absolut _aldrig_(!) må gøre, er det et fint eksempel  =)

Forestil dig dette:
    http://www.domain.dk/fil.php?id=../../../hemmelig_mappe_somewhere_udenfor_webspace/killer_file.php

Brugeren kan inkludere en hvilken somhelst PHP-fil på serveren - også i niveauer over HTTP-mappen. Worst practise!  =8-O
Avatar billede vifa Novice
05. januar 2009 - 15:50 #51
:O skal love for at der er kommet nogle kommentar i denne tråd.

Uden at have læst det hele igennem, og uden at have testet det - er Kaloer's (01/01-2009 17:46:28) metode så 100 % sikker? Altså den hvor de tilladte sider bliver listet i et array.
Avatar billede kkrasmussen Nybegynder
05. januar 2009 - 15:58 #52
Well, han skal du være velkommen. Det eneste han kan kan få "fat" i er php filerne i modules folderen.

Han kan kun få lov at manipulere med ?id=

En forklaring på hvordan du kan få fat i en fil over modules, ville være rart. :-)
Avatar billede kkrasmussen Nybegynder
05. januar 2009 - 16:10 #53
Dit eksempel forudsætter at man selv definere ovenliggende mappe.

Det eneste man kan få lov til er at få fat i en fil med .php i modules folderen. Og det er netop hele pointen.

For det første kan man ikke blot skrive : http://domain.tld/killerfile.php?id=../../../hemmeligt-folder/killerfile.php

eller http://domain.tld/?id=../../../hemmeligt-folder/killerfile.php

Eller jo det kan du godt, men du vil blive smidt tilbage til modules folderen da der i min egen kode er defineret en trim kommando for at fjerne alle andre tegn end bogstaver. $id=$_GET['id']; er skrevet ind og ikke kopieret ind. Gad ikke kopiere hele lortet ind.
Avatar billede mstorgaard Praktikant
05. januar 2009 - 16:17 #54
kkrasmussen; det ville nok være en god idé at inkludere den sikkerhed, da du ellers giver et direkte usikkert script til en anden bruger, hvilket kan sætte denne brugers hjemmeside/server/computer i fare.
Avatar billede kkrasmussen Nybegynder
05. januar 2009 - 16:18 #55
Ja ok.

Rettelse til mit eget script:
$id = ereg_replace("[^A-Za-z0-9]", "", trim($_GET['side']));
Avatar billede kkrasmussen Nybegynder
05. januar 2009 - 16:19 #56
trim eller ereg_replace...What ever...Tror det er på tide at tage hjem nu...kan ikke engang finde ud af min egen kode. :-(
Avatar billede olebole Juniormester
05. januar 2009 - 16:25 #57
"Gad ikke kopiere hele lortet ind." >> Yeah, right!  ;D
Avatar billede mstorgaard Praktikant
05. januar 2009 - 16:30 #58
olebole; det tænker jeg også lidt, han vil godt kopiere 22 linjer ind, men den sidste halve linje - næh nej. (:
Avatar billede kkrasmussen Nybegynder
06. januar 2009 - 07:56 #59
Tja...De 22 linjer er jo en lille del af en klassefil med over 300 linjer. Det var reelt set kun de 22 linjer som var relevant for debatten. Hvorfor forvirre mere ved at kopiere alle små 300 linjer ind i debatten?
Kan godt se det måske ikke er hensigtmæssigt hvis man bruger mit eksempel out of the box, men nu var det jo en kommentar og ikke et svar. Hvor er vi henne hvis man ikke kan tage noget ud af en hel kontekst som blot understreger ens pointe?
Avatar billede vifa Novice
09. januar 2009 - 23:03 #60
Sad lige og rodede lidt med Kaloers løsning (01/01-2009 17:46:28), men kan ikke få denne til at virke - har jeg overset noget her?:

--------------------------------------------------------------------------------------

$side = $_GET['side'];
               
$TilladteSider = array("forside", "side1", "side2");
                   
                   
if(isset($side))
    {

        if(in_array($side, $TilladteSider))
        {
            if(is_file('indhold/' . $side . '.php'))
            {
                require_once('indhold/' . $side . '.php');
            }
            else
            {
                echo "<h3><center><p>Siden findes ikke</p></center></h3>";
            }   
        }
        else
        {
            echo "<h3><center><p>Der er ikke adgang til den ønskede side</p></center></h3>";
        }
else
{
    require_once('indhold/forside.php');
}
                   
?>

--------------------------------------------------------------------------------------
Avatar billede Slettet bruger
10. januar 2009 - 00:06 #61
Du får ikke afsluttet if(isset($side)) inden du skriver else.. Desuden vil jeg anbefale oleboles løsning med basename, da den gør at du ikke behøver at rette i php-filen hvis du tilføjer nye sider.

Her er den ovenstående rettede kode:

if(isset($side))
{
   
    if(in_array($side, $TilladteSider))
    {
        if(is_file('indhold/' . $side . '.php'))
        {
            require_once ('indhold/' . $side . '.php');
        }
        else
        {
            echo "<h3><center><p>Siden findes ikke</p></center></h3>";
        }
    }
    else
    {
        echo "<h3><center><p>Der er ikke adgang til den ønskede side</p></center></h3>";
    }
}
else
{
    require_once('indhold/forside.php');
}
Avatar billede vifa Novice
10. januar 2009 - 13:00 #62
Hm..hvorfor overså jeg det. Men tak for det kaloer.

Ja, det har du ret i, men den side jeg koder på lige nu kan jeg bedst bruge denne løsning.
Avatar billede olebole Juniormester
11. januar 2009 - 16:50 #63
Det er meget svært at finde forestille sig et scenarium, hvor man bedst kan bruge den løsning ... men det er selvfølgelig dit valg  =)
Avatar billede vifa Novice
11. januar 2009 - 19:12 #64
Rent sikkerhedsmæssigt kommer det vel næsten ud på et. Men jeg finder det meget brugbart at have en liste over alle siderne i et array, herved kan jeg fjerne adgangen til en bestemt side midlertidigt, eksempelvis.
Avatar billede olebole Juniormester
22. januar 2009 - 18:33 #65
Kom tilbage hertil via et link i en anden tråd. Hvis du insisterer på denne løsning, er det selvfølgelig dit valg, men lad mig lige foreslå en væsentlig bedre løsning end in_array, som ikke er beregnet til den slags opslag:

$TilladteSider = array("forside" => 1, "side1" => 1, "side2" => 1);

if ( $TilladteSider[$side] ) {
  // Siden er tilladt
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester