Avatar billede superwulff Nybegynder
09. maj 2007 - 14:50 Der er 16 kommentarer og
2 løsninger

PHP Get funktionen.

Hej.

Jeg er ved at lave en side hvor jeg bruger følgende "script"

<?php
$m = $_GET['m'];
if ($m == ""){
$m = "m.htm";
}
if(!@file_exists($m)) { $m = "m.htm"; };
?>

og der hvor jeg vil have $m til at optræde bruger jeg

<?php
    include($m);
?>

Og linkene i min menu ser således ud
<a href="?m=sidensnavn.htm">Link</a>

Mit spørgsmål lyder:

Kan jeg undgå at skrive ".htm" i linket så det ikke optræder i url-bjælken på browseren? Og hvordan gør man det?

/Swulff
Avatar billede simplus Nybegynder
09. maj 2007 - 15:07 #1
Sagtens.. Du fjerner det bare og tilføjer det senere?

<?php
$url = "m";

//senere hen

$url .= ".htm";
?>

punktumet før = betyder at den skal tilføje istedet for at overskrive
Avatar billede simplus Nybegynder
09. maj 2007 - 15:07 #2
Der udover er det en meget usikker måde at inkludere sider via GET.. Jeg synes du bør gøre brug af htmlentities..


http://dk2.php.net/htmlentities
Avatar billede superwulff Nybegynder
09. maj 2007 - 15:35 #3
Tak, og jeg vil overveje det med htmlentities
Avatar billede superwulff Nybegynder
09. maj 2007 - 15:36 #4
gider du skrive et svar så du kan få point?
Avatar billede simplus Nybegynder
09. maj 2007 - 15:38 #5
Jeg mener nu at det er en nødvendighed.. Jeg vil ud fra den kode du bruger kunne indtaste adressen på en ond fil via mit eget website og derfra kører den på din side.. Så vil jeg med andre ord kunne gøre stort set hvad jeg vil på dit site..

Husk lige at lukke spørgsmål, da jeg ikke samler på point; lægger du bare selv et svar og accepterer det selv.
Avatar billede hmortensen Nybegynder
09. maj 2007 - 15:41 #6
Overvej en switch:

switch ($_GET['m'])
{
  case 'forside':
    include "forside.htm";
    break;
  case 'side1':
    include "side1.htm";
    break;
  default:
    include "404.htm";
    break;
}
Avatar billede superwulff Nybegynder
09. maj 2007 - 15:45 #7
Kan du forklare en switch. Altså hvad dens funktion er?
Avatar billede nyhuus Nybegynder
09. maj 2007 - 15:46 #8
Hvis du vil have lidt mere sikkerhed kunne du evt gemme de filer der bruges i include i et array, så du tjekker ok $m er i det array, hvis det ikke er så udskriver du en fejl

fx

$pages = array("m", "i", "g");

også lave du en

if(in_array($m, $pages) { include $m .".htm"; }
else { echo "FEJL: siden $m findes ikke"; }
Avatar billede hmortensen Nybegynder
09. maj 2007 - 15:48 #9
Som du kan se i ovenstående eksempel, vil der blive switch'et på $_GET['m']. Det vil sige at den undersøge en "case" af gangen, faktisk som en bunke if sætninger.
Avatar billede simplus Nybegynder
09. maj 2007 - 15:52 #10
superwulff -> en switch er stort set det samme som if og else statements.. de vises dog på en helt anden måde..

du kan som nyhuusdk og hmortensen foreslår undgå at bruge htmlentities hvis du istedet laver en form for liste over hvilke filer det er tilladt at inkludere og derpå tjekke om indholdet af $_GET['m'] findes i listen. Gør det det, jamen så er alt fint, ellers prøver nogen at snyde systemet.

det anbefales kraftigt at du bare gør et eller andet, for lige nu har du et stort sikkerhedshul!
Avatar billede superwulff Nybegynder
09. maj 2007 - 16:16 #11
Jeg har tænkt på det med sikkerhedsk´hullet, og i har jo sådan set ret. det ville være komplet tåbeligt at bruge $_GET.. En switch lyder som en god ide. Nogen der ved hvor jeg kan læse mere om det? jeg er relativt ny i PHP..

/Swulff
Avatar billede superwulff Nybegynder
09. maj 2007 - 16:49 #13
så istedet for at skrive include($m); skal jeg lave en switch med de forskellige sider i eller?
Avatar billede nyhuus Nybegynder
09. maj 2007 - 17:39 #14
Ja lige som hmortensen viste i sit eksempel
Avatar billede superwulff Nybegynder
09. maj 2007 - 20:03 #15
Switchen virker.. tak.. hvis nogen vil have pointene kan i jo skrive et svar..

//swulff
Avatar billede nyhuus Nybegynder
09. maj 2007 - 20:26 #16
Selv tak, min methode virker også, men det kræver dog det sættes lidt op først :)
Avatar billede hmortensen Nybegynder
09. maj 2007 - 23:15 #17
Det var så lidt.

nyhuusdk, hvis man bruger et array, og ønsker at get værdien ikke skal afspejle filnavnet 100%, skal det så udbygges lidt.
Avatar billede nyhuus Nybegynder
10. maj 2007 - 08:40 #18
okay
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