Avatar billede nyhuus Nybegynder
31. august 2004 - 20:46 Der er 28 kommentarer og
1 løsning

bruge if i stedet for iframe

jeg har et lille problem med at lave sider med if,elseif,else

problemet er at den laver et 1tal efter min include jeg har lavet? i kan lige se dette script.

<?
if ($_GET['page'] == test1){
echo include("test2.php");
}
elseif ($_GET['page'] == test2){
echo include("test2.php");
}
elseif ($_GET['page'] == test3){
echo include("test3.php");
}
elseif ($_GET['page'] == test4){
echo include("test4.php");
}
elseif ($_GET['page'] == test5){
echo include("test5.php");
}
else {
echo include("min_forside.php");
}
?>

og jeg linker jo til det via: index.php?page=test1

er der nogen der kan fortælle hvad der går galt.
jeg har jo self kigget efter om der står et 1 tal når jeg laver det men det er problemet det gør der ikke?

kig på www.webdesignz.dk/test/index.php
Avatar billede dennismp Nybegynder
31. august 2004 - 20:49 #1
fjern echo foran include

så det bare er

include("test2.php");
Avatar billede dennismp Nybegynder
31. august 2004 - 20:50 #2
include() returnere dit tilfælde 1 (true), fordi det gik godt - den fik inkluderet filen.
Avatar billede nyhuus Nybegynder
31. august 2004 - 20:50 #3
okay tak jeg prøver lige :D
Avatar billede dennismp Nybegynder
31. august 2004 - 20:53 #4
Hvis det skal være helt rigtig, så bør du skrive:

if ($_GET['page'] == 'test1'){

forresten, er det meningen at test2.php skal inkluderes når page=test1 ?
Avatar billede nyhuus Nybegynder
31. august 2004 - 20:53 #5
Mange tak for hjælpem så blev jeg da lige det klogre vil du have dine poing dennismp ? så lav lige et svar, ellers kan du jo også vælge og lave vær, og lave mig beholde dem :P

Og endnu tak for det :D det virket :D
Avatar billede nyhuus Nybegynder
31. august 2004 - 20:54 #6
??
Avatar billede nyhuus Nybegynder
31. august 2004 - 20:54 #7
jeg fatter ik helt hav du mener?

Hvis det skal være helt rigtig, så bør du skrive:

if ($_GET['page'] == 'test1'){

forresten, er det meningen at test2.php skal inkluderes når page=test1 ?
Avatar billede morteeart Nybegynder
31. august 2004 - 20:54 #8
gør dog noget nemmere :)

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

og drop alle de if sætninger.
Avatar billede nyhuus Nybegynder
31. august 2004 - 20:55 #9
det er jo til en menu hvor jeg bruger det istedet for en iframe?
Avatar billede morteeart Nybegynder
31. august 2004 - 20:56 #10
og den helt smarte:

<?php
$side = $_GET['page']; // Henter side information fra adresselinjen
if ($page == ""){ // Hvis der ikke er angivet nogen side, så må det jo være forsiden.
$page = "forsiden.php"; // og her angives den fil som er forsiden
}
if(!@file_exists($page)) { $page = "404.php"; };
// Hvis $side ikke findes så inkludere vi en fejl side i stedet.
?>

<? include($page); ?>
Avatar billede morteeart Nybegynder
31. august 2004 - 20:57 #11
og ja, det er så du slipper for frames / iframes.
Avatar billede dennismp Nybegynder
31. august 2004 - 21:05 #12
Lav i det mindste et tjek, så du ved om det er en af de filer du ønsker at man inkluderer. Brug aldrig brugerens input direkte.

det jeg mente er bare at du ved

index.php?page=test1
inkluderer filen test2.php

det virker lidt underligt :)
Avatar billede morteeart Nybegynder
31. august 2004 - 21:07 #13
Det jeg postede 1/08-2004 20:56:49 er rigtigt smart, fordi så kan man lave sin egen Fejl side (404) , pga. den checker om filen eksistrer.
Avatar billede dennismp Nybegynder
31. august 2004 - 21:07 #14
$menu = array('test1'=>'test2.php','test2'=>'test2.php', 'test3'=>'test3.php', 'test4'=>'test4.php', 'test5'=>'test5.php' );

$page = $_GET['page'];
if(! isset($menu[$_GET['page']) ) {
  $page = 'test1'; // defaultsiden
}

include($page[$page]);
Avatar billede dennismp Nybegynder
31. august 2004 - 21:09 #15
Nej, den er ikke smart.

1) Du kan ikke lave en rigtig 404 side..  hvis jeg skriver et filnavnet der ikke findes, så får du alligevel default siden. Brug .htaccess til at lave en rigtig 404.

2) Jeg kan dermed inkluderer samtlige filer på dit filsystem og dermed få indsigt i ting jeg ikke bør kunne få. Det er et sikkerhedshul.
Avatar billede nyhuus Nybegynder
31. august 2004 - 21:09 #16
nej den gør den ikke jeg includere kun 1 side adgangen på den måde jeg gør det på :D

svar til:
Lav i det mindste et tjek, så du ved om det er en af de filer du ønsker at man inkluderer. Brug aldrig brugerens input direkte.

det jeg mente er bare at du ved

index.php?page=test1
inkluderer filen test2.php

det virker lidt underligt :)
Avatar billede nyhuus Nybegynder
31. august 2004 - 21:10 #17
kan du skære det ud i pap for mig jeg er helt ny i php

svar til:
Nej, den er ikke smart.

1) Du kan ikke lave en rigtig 404 side..  hvis jeg skriver et filnavnet der ikke findes, så får du alligevel default siden. Brug .htaccess til at lave en rigtig 404.

2) Jeg kan dermed inkluderer samtlige filer på dit filsystem og dermed få indsigt i ting jeg ikke bør kunne få. Det er et sikkerhedshul.
Avatar billede morteeart Nybegynder
31. august 2004 - 21:11 #18
dennismp: ja, det er ikke en helt rigtigt 404, iknow

sikkerhedshul ?
Alt som er beskyttet af password, bliver skam promptet, det kan man sku ikke slippe uden om.
Avatar billede dennismp Nybegynder
31. august 2004 - 21:18 #19
1) ikke 404:
ditside.dk/index.php?page=abdef

det vil den "404" fange, fordi du ikke har en fil der hedder asdef.

Men hvis du prøver:
ditside.dk/images/engiffil.gif

så vil du jo ikke bruge index.php - og dermed vil du ikke få din egen 404. Derfor er det ikke en rigtig 404 :) (Det er meget begrænset hvad den vil fange)

2) sikkerhedshul.

Jeg kan inkluderer alle filer.. Fx
index.php?page=/etc/passwd
index.php?page=database.inc

så kan jeg se hvilke brugerer der er på systemet.. Og jeg kan se mange andre ting. Hvis jeg er på samme webhotel eksempelvis, så kan jeg få dit script til at bruge min egen phpkode, og så kan jeg ødelægge alt det jeg har lyst til... Og der findes mange andre tricks - det er bare et spørgsmål om fantasi.

Derfor skal man aldrig bruge brugerinput direkte.
Avatar billede morteeart Nybegynder
31. august 2004 - 21:23 #20
okay, hvordan vil du så foreslå at det undgåes ?
Avatar billede dennismp Nybegynder
31. august 2004 - 21:24 #21
morteeart; Jeg går ud fra at du tænker på .htaccess? .htaccess er ikke understøttet af php (direkte). Så php kan læse alle filer, ligemeget om der er "password" (.htaccess) eller ej.
Avatar billede dennismp Nybegynder
31. august 2004 - 21:28 #22
Sådan her, eksempelvis (har rettet eksemplet):

// $menu indeholder alle lovlige filer der må kaldes. Hvis page=test1, så inkluderes filen test2.php .. osv. Tilføj selv flere.
$menu = array('test1'=>'test2.php','test2'=>'test2.php', 'test3'=>'test3.php', 'test4'=>'test4.php', 'test5'=>'test5.php' );

$page = $_GET['page'];
if(! isset($menu[$_GET['page']) ) {
  // Default side hvis intet er angivet eller noget ugyldigt er valgt.
  $page = 'test1';
}

include($menu[$page]);

...

Man kan også lave en tjekt på filen og se om den ligger inden i et ønsket directory. Men det er nemmere at gøre dette (som basalt set er det samme som nyhuusdk gør - bare med arrays)
Avatar billede morteeart Nybegynder
31. august 2004 - 21:30 #23
ja, include virker ikke ved htaccess, det har vi jo snakked om før, men session og php_auth_user beskytter nu filerne fint..

jeg synes dog det ville være for besværligt at skulle lægge alle siderne i et array på forhånd.

nyhuusdk - sorry fordi jeg bruger din tråd
Avatar billede morteeart Nybegynder
31. august 2004 - 21:38 #24
en sidste kommentar: hvis man nu bruger en regular expression i htaccess, kan man så enig ikke skjule det ?
Avatar billede dennismp Nybegynder
31. august 2004 - 22:04 #25
Nej. PHP bruger ikke .htaccess. Den tilgår filsystemet - og den kender ikke til .htaccess eller hvad den betyder.

Det er besværligt at lave tjeks på sine ting - og det er også besværligt at tjekke retur-koder. Men derfor bør man alligevel. Og det tager fornemtlig længere tid at kode test27.php end det gør at indsætte den i et array alligevel - så problemet er ikke så stort.

Du kan let undgå at dine php filer ikke bliver vist, som du selv er inde på. Men hvad med alle de andre filer på systemet? Klassikeren er jo /etc/passwd. Den kan alle se, og det er man normalt ikke interesseret i.

Og nu hvor nyhuusdk bruger if() sætninger, syntes jeg han skal forsætte med det - det er han jo fortroligt med :).
Avatar billede nyhuus Nybegynder
31. august 2004 - 22:08 #26
Den måde jeg bruger er vel sikker nok ik? for jeg bruger htaccess til password?
Avatar billede dennismp Nybegynder
31. august 2004 - 22:20 #27
Din måde er fin, fordi brugeren ikke kan få inkluderet andre filer via $_GET['page'] end dem du har i din if()-sætninger - så han kan ikke gøre noget uventet (hvis han fx skriver index.php?page=futtog - så vil du jo bare vise min_forside.php - ingen alarm).. Så forsæt du bare :)
Avatar billede nyhuus Nybegynder
31. august 2004 - 23:10 #28
kan du fortælle hvordan jeg laver mig egen 404 fejl side "så den blever en rigtig en" ???????

alså hvis en nu prøver og åbne www.webdesignz.dk/mfdhngsfdm
Avatar billede dennismp Nybegynder
31. august 2004 - 23:25 #29
Du laver en .htaccess i din rod-bibliotek og i den skriv:

ErrorDocument 404 /error404.php

Så kan du bare lave filen error404.php og vise en fejlbesked

Der er vist noget med, at hvis siden fylder under 512 (eller var det 1024?) bytes, så viser IE ikke selve siden, men dens egen 404 side. Det skal du være opmærksom på når du laver den. (Ellers test med en anden browser)
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