ugrás a tartalomhoz

GET paraméter alapján készített include

kontraszt · 2007. Ápr. 6. (P), 19.11
Sziasztok!
Van egy problémám mely abból gyökerezik hogy nem ismerem a PHP-t, de próbálkozom dinamikus webhelykialakítással. A célom az hogy egy index.php-vel szeretnék meghívni tartalmakat. Ezt jelen pillanatban úgy oldom meg hogy:
<?php

     include ("hirek/".$_GET['id'].".php");

	 include ("hirek2/".$_GET['id'].".php");
	
?>
És itt máris egy hiba. Amíg egyetlen include parancsot használok addig minden nagyon szép, roppant egyszerűen megy a tartalmak meghívása a hirek könyvtárból (index.php?id=akarmi). Ezzel csak az a gondom hogy a tartalmakat nem tudom szelektálni különböző könyvtárakba hisz az utasításnak csak egy könyvtár elérési útvonalát tudom megadni, én legalábbis. Ha viszont két vagy több parancssort írok be akkor amelyik könyvtárban nem talál semmit küld egy hibaüzenetet és ez elég rosszúl mutat. Végül is azt szeretném hogyezzel a nagyon egyszerűnek tűnő utasítással több könyvtárat is megtudjak határozni forrásként.
Bocs hogy ilyen hosszúra sikerültem. Előre is köszönöm!
 
1

kiegészítés a GET problémához

kontraszt · 2007. Ápr. 6. (P), 19.16
Még egy kis kiegészítés, lehet hogy nem fogalmaztam elég pontosan.
Tehát ha több include utasítással akarok több számításba jöhető könyvtárat meghatározni akkor azok a sorok hibát írnak ki amelyek a hozzájuk rendelt könyvtárakban nem találják a hivatkozott file-t.
2

mimimi

lacy · 2007. Ápr. 6. (P), 20.06
esküszöm nem kapizsgálom mit szeretnél, mégis megpróbálok segíteni :)
<?php
if ($_GET['id'] == 'zsiraf' || $_GET['id'] == 'cica')
{
include("allatok/ ". $_GET['id'] );
}
else{
include("mindenmas/ ". $_GET['id'] );
}
valami ilyen feltételes megoldás nem segít neked?
3

GET

kontraszt · 2007. Ápr. 6. (P), 20.31
Köszi mimimi!
Tulajdonképpen én is feltételre gondoltam de nem tudom a módját hogy hogyan kell megadni azt a feltételt hogy a felsorolt utasítások valamelyikében keresse az adott file-t.
4

GET

kontraszt · 2007. Ápr. 6. (P), 20.37
http://www.torzsasztal.com/hirek.php?id=budapesti_palinkafesztival_2007
van ez a hívatkozás.
ez pedig a meghívó kód:
<?php
     include ("inc/hirek/".$_GET['id'].".php");
?>
Ebben az esetben minden betöltendő file-nak a inc/hirek könyvtárban kell lenni, de én csoportosítani szeretném különféle könyvtárakba a tartalmakat. Jó lenne tehát elérni hogy több könyvtárat is nézzen végig, de ne kiabáljon azoknál a könyvtáraknál ahol nem található az adott file.
5

file_exists

Nagy Gusztáv · 2007. Ápr. 6. (P), 20.59
ne kiabáljon azoknál a könyvtáraknál ahol nem található az adott file.

Nem ez kellene neked?
http://hu2.php.net/file_exists
7

GET

kontraszt · 2007. Ápr. 6. (P), 21.19
Valami ilyesmi, de ezt nem tudom hogyan tudnám a saját célomra fordítani.
Arra keresem én a magyarázatot igazából hogy hogyan lehet a legpraktikusabban megoldani hogy minden változó tartalmat ugyanabba az egyetlen index.php-ba bírjak betöltögetni, de úgy hogy a tartalmat különféle könyvtárakba tudjam csoportosítani. Olyan módszert keresek ahol nem kell minden egyes betöltendő file-t a PHP kódban megadni. Ez a $_GET megoldás azért jó mert az adott könyvtáron belül bármi lehet a betöltendő file neve, csak a hívatkozásban kell megadni, a PHP kód csak ebből az egy sorból áll. Ez viszont csak egy könyvtárat tud kezelni ebben az állapotában.

Köszi!
6

jaj

Hojtsy Gábor · 2007. Ápr. 6. (P), 21.10
Jaj. A probléma az, hogy a GET paraméterek ilyetén közvetlen használata tekintélyes biztonsági rést hagy a szervereden... Elég például egy szép végtelen include ciklust indítani mondjuk: http://www.torzsasztal.com/hirek.php?id=../../hirek de a lehetőségek száma határtalan. Nem szabad egy-az-egyben felhasználni GET paramétert include-ban (és máshol sem). Ellenőrizni kellene, hogy csak a megengedett karakterek vannak benne (célszerű a perjelet nem megengedni), ellenőrizni kellene, hogy a fájl, amit betöltenél az ott van-e, stb.
8

GET

kontraszt · 2007. Ápr. 6. (P), 21.22
Köszi!
Milyen károm származhat ebből?
Milyen biztonságos megoldás létezik még erre a feladatra. Gondolom van mert a dinamikus weboldalaknál ez rutin feladat, csak sajnos én nem tudom ennek a módját. Kérelek hogy olvasd el amit fentebb írtam.
9

például

Hojtsy Gábor · 2007. Ápr. 6. (P), 21.33
<?php
// Elmentés saját változóba, hogy egyértelmű legyen, hogy 
// nem közvetlenül a GET értékkel dolgozunk
$id = $_GET['id']

// Biztosítsuk, hogy csak karakterek, számok és aláhúzás vannak benne
// (részletesen kiírtam, hogy látható legyen). Ha nem így van, akkor
// egy alapértelmezésre térjünk vissza.
if (!preg_match("!^[a-zA-Z0-9_]+$!", $id)) {
  $id = 'index';
}

// Lássuk, hogy van-e ilyen fájl, és tudjuk olvasni
if (!is_readable('hirek/'. $id .'.php')) {
  echo 'Nincs ilyen hír.';
}

// Van ilyen fájl, és csak az engedélyezett nevekből lehet valamelyik
else {
  include ('hirek/' . $id . '.php');
}
?>
Eléggé sok károd származhat belőle, ha nyitva hagyod így a szervert. Fel tudnak olvasni szöveges fájlokat rossz szándékú látogatók (akár jelszó fájlokat is, ha rájönnek, hogy pontosan mit kell beírni, az viszont próbálkozással megtehető).

Alkönyvtárakat további paraméterek bevezetésével, vagy változtatott preg_match() ellenőrzéssel lehet megtenni, de mivel te a preg illesztésekhez valószínű nem konyítasz, ezért további változókat javasolnék.
10

GET

kontraszt · 2007. Ápr. 6. (P), 21.38
A további változókat hogyan tudom megadni?
11

jaj

Hojtsy Gábor · 2007. Ápr. 6. (P), 21.58
hirek.php?elsovaltozo=abc&masodikvaltozo=34ds&tovabbivaltozo=wert
12

GET

kontraszt · 2007. Ápr. 6. (P), 22.13
Köszi a fáradozást, sajna ez nekem magas.
Pénzért elvállalnád ennek a sistémának az elkészítését?
13

szia!

DsA · 2007. Ápr. 6. (P), 22.21
írj nekem mailt ha érdekel a dolog megírom neked ingyen is de én nem tudok neke írni mert letiltottad!
14

GET

kontraszt · 2007. Ápr. 6. (P), 22.32
Írnék én, de mi a címed? Mit tiltottam le?
15

:D

DsA · 2007. Ápr. 6. (P), 22.39
az adatlapom ha megnézed ott van olyan h kapcsolat :D a te adatlapodon tiltottál le valami olyat, hogy nem akarsz emaileket fogadni vagy valami ilyesmit :)
http://weblabor.hu/tagok/6575/kapcsolat
amugy ide írj :)