[ dusanpetrovicdp @ 13.11.2011. 19:46 ] @
imam potrebu da preko require funkcije pozovem drugi php fajl, ali sa nekim parametrima:

REQUIRE('header-probni.php?kod=13223');

fajl koji pozivam ima pocetnih par redova:
<?php
$kod = $_GET['kod'];
if ($kod !== "13223") {exit();} // Default
?>

ali to ne funkcionise! Da li neko zna kako to da nateram da radi, ili nekim drugim nacinom. Cilj je da se drugi PHP (header-probni.php) ne moze otvarati ako se ne pozove sa kod=13223, tacnije, ako se pokusa otvoriti direktno sa neta (bez znanja koda) ispis njegov je potpuno prazan.

Otvoren sam za sve predloge i sugestije
Hvala unapred
[ Goran Rakić @ 13.11.2011. 20:08 ] @
Funkcija require ne radi tako.

Kada uključiš drugu datoteku, efekat je kao da si odradio kopiraj-ubaci (engl. copy-paste) i kod te datoteke ubacio na mesto require funkcije. Nema novog HTTP zahteva kojim bise postavio $_GET niz prema parametru, čak i prenos parametara ne postoji.

Uključena datoteka može da ima pristup svim lokalno vidljivim promenljivama, pa tako u jednoj datoteci možeš definisati $kod = 13223; i potom u uključenoj proveravati da li je $kod definisana i koju vrednost ima. Ovo koristi oprezno, pošto postaje košmar za održavanje kada na ovaj način "prebacuješ" promenljive bez ikakvog reda. U tvom primeru, zaštita od direktnog pozivanja, ovo jeste uobičajno. Uoči da vrednost "koda" uopšte nije važna niti ima potrebe da kod bude tajan. Uključena datoteka može da bude:

Code (php):

if(!is_set($top_level)) die("Access denied.");
...
 


A uključivanje činiš:
Code (php):

$top_level = true;
require("header-probni.php");
 


Ako je register_globals postavljen na isključeno (a tako i treba), niko ne može da pozove header_probni.php direktno tako da $top_level ima vrednost. Jedino ako se ista postavi u drugoj skripti, baš kako i tebi treba.


Kada međutim želiš neki drugi prenost promenljivih, čistije rešenje je da u uključenoj datoteci definišeš funkciju, poput:
Code (php):

function obradi($kod) {
  if($kod != "13223") exit();
  ...
}
 


Sada u osnovnoj imaš sledeće:

Code (php):

require("header-probni.php");
obradi(13223);
 


Prenos promenljive je sada eksplicitan, pa je razumevanje i održavanje koda nešto lakše. Ponavljam, u tvom primeru češće se koristi prvi primer, i tebi bliže rešenje.
[ dusanpetrovicdp @ 14.11.2011. 08:13 ] @
Hvala na brzom odgovoru, uradio sam preko funkcije, nekako mi je logicnije i jednostavnije, i radi
Pozdrav
[ doktor83 @ 20.11.2011. 19:01 ] @
Obicno se u nekom pocetnom inicijalizacinom fajlu postavi sa DEFINE neka konstanta i posle na svakoj stranici koju ukljucujes u projekat samo proveris da li je ta konstanta prisutna.
Po meni je to bolje resenje nego preko funkcije.
[ PETAR- @ 21.11.2011. 13:27 ] @
$_GET['id'] = $user;
include('userbuy.php');

ja sam ovako odradio. lepo radi
[ plus_minus @ 22.11.2011. 12:30 ] @
A ako odradiš ovako, još lepše i sigurnije ima da bude.... ah, taj $_GET.. ;)

Code (php):


$user = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_STRING);

 
[ VladaSu @ 23.11.2011. 00:59 ] @
<?php
REQUIRE('header-probni.php?kod=13223');
?>

Mozes da resis ovako:

<?php
$_GET['kod'] = 13223;
REQUIRE('header-probni.php');
?>

Trebao bi drugacije da resavas ali ovo moze da ima smisla ako header-probni.php se nekada poziva posebno preko url-a a nekada kao require.
Mada i tada bi trebao drugacijom logikom