Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Własna funkcja do require_once, nie 'trzyma' zmiennych.
Forum PHP.pl > Forum > Przedszkole
Giluś
Cześć, zrobiłem sobie funkcję o nazwie loadf, która ładuje mi z zabezpieczeniem pliki php.
Problem polega na tym, że gdy jej użyje to wcześniej użyta zmienna nie wyświetla się.

Funkcja:
  1. function loadf($funkcja){
  2. require_once('inc/func/'.$funkcja.'.php');
  3. }


Index.php:

  1. <?php
  2. require_once('inc/funkcja.php');
  3.  
  4. $zmienna = 'cos';
  5.  
  6. loadf('test')
  7. ?>


test.php (inc/func/test.php)
  1. <?php
  2. echo '$zmienna';
  3. echo "<br />2<br />";
  4. ?>


Niby ok, ale wyświetla mi się tylko: Coś tam., a nie: Działa (enter) Coś tam. gdy tylko w index.php zmienię to "loadf('test');" na "require_once('inc/func/test.php');" , wszystko normalnie działa, próbowałem bez tego zabezpieczenia htmlspecialchars(strip_tags(basename( ))), ale jest identycznie.

Ma ktoś jakiś pomysł dlaczego nie działają zmienne użyte wcześniej ?.
!*!
1. funkcja jest bez sensu, nie przemyślałeś jej działania.
2. tekst echo piszemy w apostrofach
3. nie musisz używać () w require
4. skoro odpalasz test.php, to dobrze wyświetla, bo nie masz w nim użytej tej funkcji.
5. nie wyświetlasz zmiennej $xzcv
Giluś
4. skoro odpalasz test.php, to dobrze wyświetla, bo nie masz w nim użytej tej funkcji.
5. nie wyświetlasz zmiennej $xzcv

Odpalam index.php, gdzie na początku ustalam zmienną $xzcv, później używam funkcji do " require ", i w pliku test.php odczytuję tą zmienną..

Chyba niczym raczej nie różni się:

  1. $inc = 'test';
  2. require_once('inc/func/'.$inc.'.php');

od

  1. function loadf($inc){
  2. require_once('inc/func/'.$inc.'.php');
  3. }


A w 1 przypadku działa normalnie.
!*!
Szczerze mówiąc to ni cholery nie mogę się połapać w tym co robisz... może za dużo kawy.

Zacznij od napisania poprawnie tej funkcji i sprawdź co Ci zwraca var_dump, i pokaż cały kod bo może coś źle nie w tej kolejności robisz.
d3ut3r
poczytaj o zasięgu zmiennych to co robisz nie ma prawa zadziałać, bo gdy interpreter wykonuje loadf wczytuje plik i wyświetla zmienną $x w granicach funkcji loadf skoro w tej funkcji takiej zmiennej nie ma, to jej nie wyświetli.
Giluś
Wydawało mi się że zastosowanie takiego czegoś:

  1. <?php
  2. function loadf($funkcja){
  3. require_once(''.$funkcja.'.php');
  4. }
  5. $zmienna = 'cos';
  6.  
  7. loadf('test');
  8. ?>


do wyświetlenia pliku test.php (w tym przypadku), wraz w zmienną zapisaną linijkę wcześniej (w pliku index.php) będzie działało, ponieważ jakoś dla mnie było bez różnicy między tym kodem:

  1. <?php
  2. $zmienna = 'cos';
  3. require_once('test.php');
  4. ?>

Ale raczej to jest różnica wink.gif.
!*!
I działa. Napisałem że nie wyświetlasz przecież tych zmiennych.

  1. function bleble($file)
  2. {
  3. require_once $file.'.php';
  4. }
  5.  
  6. $cos = 'aaa';
  7. echo $cos;
  8. bleble('test');
  9. $cos2 = 'bbb';
  10. echo $cos2;

efekt:
Kod
aaaTEKSTwPLIKUbbb
Giluś
No tak, nie wyświetlam, ale używając samego require, nie potrzebuję używać dodatkowo echo aby wyświetlić wink.gif

Wiec wydawało mi się jednoznaczne, czy użyję tego jako funkcji z require czy też samego require (bez mojej funkcji).
!*!
A niby dlaczego nie potrzebujesz, skoro chcesz wyświetlić?
Giluś
No patrz jak użyję:
index.php :

  1. $cos = "cos1";
  2. require_once 'test.php';


test.php:

  1. echo $cos;

To wtedy mi się samo wyświetli (cos1) na stronie index.php.

Edit:
Wynik: cos1
!*!
A Ty się tam księcia z bajki spodziewałeś? Przecież tak ma być.
Giluś
To co w ostatnim poście napisałem, jest dla mnie zrozumiałe, gorzej z tą funkcją, bo Ciągle jak sobie sprawdziłem nie jest tak jak być powinno..

  1. $cos = "cos1";
  2. function bleble($file)
  3. {
  4. require_once $file.'.php';
  5. }
  6.  
  7. bleble('test');


test.php (to samo co w przykładzie wyżej).
Dla mnie jest to analogicznie to samo, a i tak mi się nie wyświetla : cos1 wink.gif, a raczej powinno.

Edit:

Wynik: (nic, pusto)

Edit2:
Źle napisałem: " tak mi się wyświetla ", a powinno być: " tak mi się nie wyświetla ".

Tak jak by ta zmienna $cos, nie przechodziła do tego pliku test.php przy użyciu mojej funkcji.
!*!
Aha, w ten sposób. I tak ma być, ponieważ wczytujesz plik lokalnie w funkcji, dlatego powinieneś widzieć komunikat
Cytat
Notice: Undefined variable: cos in


Aby to zmienić użyj
  1. global $cos;

w funkcji.
Mało eleganckie, ale pomoże. A w ogóle to przemyśl działanie i wczytywanie plików raz jeszcze, bo dobre to nie jest.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.