Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Własna funkcja do require_once, nie 'trzyma' zmiennych.
Giluś
post 8.08.2012, 14:05:37
Post #1





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

Ostrzeżenie: (0%)
-----


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 ?.

Ten post edytował Giluś 8.08.2012, 14:27:32
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
!*!
post 8.08.2012, 14:16:16
Post #2





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


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

Ten post edytował !*! 8.08.2012, 14:17:52


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Giluś
post 8.08.2012, 14:23:09
Post #3





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
!*!
post 8.08.2012, 14:34:13
Post #4





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
d3ut3r
post 8.08.2012, 14:37:52
Post #5





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

Ostrzeżenie: (0%)
-----


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.


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
Giluś
post 8.08.2012, 14:47:13
Post #6





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
!*!
post 8.08.2012, 15:12:01
Post #7





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


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


Ten post edytował !*! 8.08.2012, 15:17:48


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Giluś
post 8.08.2012, 15:13:59
Post #8





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

Ostrzeżenie: (0%)
-----


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).

Ten post edytował Giluś 8.08.2012, 15:15:24
Go to the top of the page
+Quote Post
!*!
post 8.08.2012, 15:16:57
Post #9





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


A niby dlaczego nie potrzebujesz, skoro chcesz wyświetlić?


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Giluś
post 8.08.2012, 15:20:29
Post #10





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

Ostrzeżenie: (0%)
-----


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

Ten post edytował Giluś 8.08.2012, 15:29:09
Go to the top of the page
+Quote Post
!*!
post 8.08.2012, 15:22:56
Post #11





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


A Ty się tam księcia z bajki spodziewałeś? Przecież tak ma być.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Giluś
post 8.08.2012, 15:27:04
Post #12





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Giluś 8.08.2012, 15:33:06
Go to the top of the page
+Quote Post
!*!
post 8.08.2012, 15:50:24
Post #13





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:27