Avatar billede zpike Nybegynder
12. januar 2007 - 15:00 Der er 13 kommentarer

Problemer med php navigation

Hejsa

Jeg er ved at sætte en mac os x server op, men jeg har problemer med at køre følgende navigationsscript på de sider jeg smider på serveren:

php
   

    if(!isset($id)) { $id = "frontpage"; }

    if(file_exists("$id.html")){
    include ("$id.html");
    } elseif (file_exists("$id.php")){
    include ("$id.php");
    } elseif (file_exists("$id.txt")){
    include ("$id.txt");
    } elseif (file_exists("$id")){
    include ("$id");
    } else{
    include ("error404.php");
    }




PHP4 synes ellers at køre. Nogle der har en idé? (den kan fx. godt vise phpinfo)
Avatar billede coderdk Praktikant
12. januar 2007 - 15:07 #1
prøv at erstatte $id med $_GET['id']
Avatar billede zpike Nybegynder
12. januar 2007 - 15:28 #2
Samtlige steder?
Avatar billede dmdisco Nybegynder
12. januar 2007 - 15:30 #3
hvis du får det som en get fra querystrengen så ja alle steder eller du kan også skrive:
$id = $_GET['id'];

øverst
Avatar billede zpike Nybegynder
12. januar 2007 - 16:04 #4
Det virkede. :)

I må gerne få point begge to hvis man kan det :)
Avatar billede dmdisco Nybegynder
12. januar 2007 - 16:39 #5
nej det var coderdk der kom med svaret jo
Avatar billede coderdk Praktikant
12. januar 2007 - 17:36 #6
Tag nogle af dem selv, 200 er for mange ;)
Avatar billede showsource Seniormester
12. januar 2007 - 18:47 #7
Lige en detalje,
file_exists() returner sand hvis der er et dir af samme navn, så
is_file()
vil være bedre.
Avatar billede coderdk Praktikant
12. januar 2007 - 19:08 #8
Den er også sårbar over for f.eks. ?id=/etc/passwd
Avatar billede showsource Seniormester
12. januar 2007 - 19:35 #9
Jow, men afhænger jo så af hvordan man tjekker om filen findes.

Og den sidste her,

} elseif (file_exists("$id")){
    include ("$id");

er jo "kriminel" !
Avatar billede zpike Nybegynder
12. januar 2007 - 19:39 #10
Hehe jamen så forklar lige hvordan det skal være :D
Avatar billede showsource Seniormester
12. januar 2007 - 19:51 #11
ville selv bruge et array, evt lavet ved at læse et dir igennem for filer som kan includes.

Men "manuelt"

<?php

$files = array("frontpage.php", "kontakt.txt", "guestbook.php");

$inc_file = (isset($_GET["id"]) ? $_GET["id"] : $files[0]);

if(in_array($inc_file, $files)) {
include($inc_file);
}else{
include($files[0]);
}

?>
Avatar billede showsource Seniormester
12. januar 2007 - 19:57 #12
evt. uden filendelser:

<?php

$files = array("php" => "frontpage", "txt" => "kontakt", "php" => "guestbook");

$inc_file = (isset($_GET["id"]) ? $_GET["id"] : $files[0]);

if(in_array($inc_file, $files)) {
include($inc_file .".". array_search($inc_file, $files));
}else{
include($files[0] .".php");
}

?>

( stadig utestet! )
Avatar billede showsource Seniormester
13. januar 2007 - 05:15 #13
Prøver lige igen.
Sørg ALTID for at sikre dig hvilken fil som evt. includes, enten ved at lave et array eller definere fra hvilket dir du includer.

Mit sidste ex. uden filnavn skal være:

<?php

$files = array("txt" => "kontakt", "php" => "guestbook");

$inc_file = "frontpage.php";

if(isset($_GET["id"]) && in_array($_GET["id"], $files)) {

$inc_file = $_GET["id"] .".". array_search($_GET["id"], $files);

}

include($inc_file);

?>
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