Avatar billede lzzz Nybegynder
24. september 2007 - 12:10 Der er 11 kommentarer

Links som: index.php?id=content

Som sagt i et andet spørgsmål så er det en milliard år siden jeg sidst legede med html, css og php... Så igen skal jeg lige stille et lille spørgsmål ;)

Min side er delt op i to. Menu i venstre side og "hoved" vinduet i højre.
I min menu har jeg en knap der linker til index.php?id=content.
Hvis vi bare siger at index.php?id=content linker til content.htm så skal jeg jo have den til at include content.htm i mit "hoved-vindu".
Hvordan er det lige jeg gør det? :)


Oh ja. Og hvordan efår jeg den til at include fx start.htm lige så snart man kommer ind på siden? :)
Avatar billede jakobdo Ekspert
24. september 2007 - 13:15 #1
Du kunne lave:

switch($_GET['id'])
{
case 'content':
require('content.htm');
break;
default:
require('standard.htm');
}
Avatar billede rax Praktikant
24. september 2007 - 15:03 #2
Bemærk dog, at google (og vidst nok også andre søgemaskiner) ignorerer ?id=xxx, så det er ikke hensigtmæssigt at gøre det på den måde, hvis du vil have søgemaskiner til at kunne se dine sider.
Avatar billede johan.o Nybegynder
24. september 2007 - 15:19 #3
Include af start.htm....

<?php

include("start.htm");

....osv med din kode....

Du kan også som jakbdo skriver bruge require(); den eneste forskel på de to er at hvis den fil du prøver at 'hente' ikke findes vil require(); stoppe den videre eksekvering af koden, hvorimod include(); vil blive ignoreret og koden fortsætte.

Hvordan du vælger at bruge informationen fra linket er egentlig mest et spørgsmål om sikkerhed. Den metode som jakobdo viser er rigtig god ud fra et sikkerhedsmæssigt synspunkt, da du ikke bruger indholdet fra linket direkte i din kode, men blot fortolker det. Derved undgår du at brugeren kan få succes med diverse ondsindede forsøg på at 'hacke' dit script. Ulempen ved eksemplet er blot at hvis du har 100 undersider skal din switch indeholde samme antal muligheder og kan derved blive relativ lang.

Så alt afhængig af hvilke filnavne du bruger kan du måske også bruge det her til noget...

<?php

if($_GET['id']==preg_replace("/[^a-z0-9_\/]/", "", $_GET['id'])) {
include($_GET['id'].".php"); }

?>

Idéen, hvis ikke du allerede selv kan se det :), er at checke indholdet af 'id'. Hvis 'id' kun indeholder karakterene a til z og numrene 0 til 9 samt _ og / så er indholdet af 'id' ok og vi kan forsøge at hente filen ind i scriptet.

Da vi har 'forbudt' brugen af punktum må vi selv putte fil endelsen på når vi inkludere den.

Det kan sagtens udbygges yderligere. Jeg har f.eks. tilføjet en funktion som sender mig (webmaster) en mail i tilfælde af at en bruger skriver noget 'ugyldigt' i url'en...det kan være meget interessant at se hvilke forsøg der gøres for i fremtiden at være sikker på at man har dæmmet op for dem. Derudover har jeg tilføjet en funktion som gør at jeg kan 'linke' til forskellige typer (.php/.pdf osv.) af filer.

Men lad høre om du vil have mere info eller om du er tilbage på sporet igen :)

....hmmm en milliard år ??....der er så meget du kunne fortælle videnskaben ;)

Mvh. Johan
Avatar billede olebole Juniormester
25. september 2007 - 00:35 #4
<ole>

rax >> "Bemærk dog, at google ... ignorerer ?id=xxx" >> Det har du vist helt misforstået! Der kan være problemer med query-strenge og søgemaskiner, men det er helt forkert, at Google skulle ignorerer URL'er med query-strenge

/mvh
</bole>
Avatar billede olebole Juniormester
25. september 2007 - 00:39 #5
johan.o >> Med den metode kan brugeren selv inkludere _alle_ filer på sitet ... også dem udenfor webspace. Det er rent selvmord!

"det kan være meget interessant at se hvilke forsøg der gøres for i fremtiden at være sikker på at man har dæmmet op for dem" >> Ja, det er jo ganske indlysende, når man ligefrem inviterer til fri hacking af ens site!  ;o)

Det er muligt, du mener, Jakobs forslag er besværligt - men dit er totalt ubrugeligt!
Avatar billede johan.o Nybegynder
25. september 2007 - 10:58 #6
olebole>>

"Med den metode kan brugeren selv inkludere _alle_ filer på sitet" ... ja det er vi enige om ... men har brugeren ikke i forvejen adgang til alle de filer alligevel ?

"... også dem udenfor webspace." ... kan du forklare mig hvordan ?

Mvh. Johan
Avatar billede johan.o Nybegynder
26. september 2007 - 15:54 #7
...er der ikke en der kan hjælpe mig lidt. olebole tager jo sjældent fejl, men jeg kan altså ikke se hvordan ovenstående tillader filer uden for webspace at blive inkluderede.

Mvh. Johan
Avatar billede jakobdo Ekspert
26. september 2007 - 16:07 #8
Jeg venter også spændt på svar fra The King.
Avatar billede nicolaib Praktikant
26. september 2007 - 22:27 #9
Jeg har lavet den her og troede ikke at der var en sikkerhedsrisiko i den? Kan i svare på om det er tilfældet? Hvis den er god nok kan den måske bruges.
<?php
        if (!isset($_GET['page']))
        {
            $page = "default"; // Default side   
        }
        else
        {
            $page = $_GET['page'];
        }
       
       
        $filename = "files/".$page.".php";
       
        if (file_exists($filename))
        {
            include ('files/'.$page.'.php');
        }
        else
        {
            include ('files/fejl.php');
        }
    }
?>
Avatar billede johan.o Nybegynder
29. september 2007 - 11:40 #10
..tja jeg ville jo gerne forsøge med et svar, men tilliden til mine forslag kan vist ikke være særlig høj efter den afklapsning jeg modtog tidligere i denne tråd :)

Så indtil videre (jeg håber stadig på at olebole vil hjælpe med en forklaring) tror jeg bare at jeg trækker næsen til mig så den ikke blive klapset igen :)

Mvh. Johan
Avatar billede jakobdo Ekspert
29. september 2007 - 13:43 #11
Ole Æble Orm, kom nu ud af hullet og fortæl hvad problemet var med johan.o's kode! :o)
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