Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]PHP nie widzi zmiennych
Forum PHP.pl > Forum > Przedszkole
Syaoran i Sakura
Ohayo!

Od jakiegoś czasu piszę programy w PHP. Skrypt, który przedstawiam poniżej działał prawidłowo w XAMPP-ie 1.73 (zapewne tam było PHP w wersji niższej niż 5.4). Gdy przeszedłem na XAMPP-a 1.82 (gdzie króluje PHP 5.4) przeglądarka wyrzuca mnóstwo błędów przy wczytywaniu pliku file02.php, których wcześniej nie było. Nie chodzi mi o to aby się pozbyć komunikatów lecz o to by skrypt działał prawidłowo.

Plik cat01/config.php:
  1. <?php
  2. $serwer="localhost";
  3. $user="root";
  4. $pass="";
  5. $baza="baza01";
  6. ?>


Plik cat01/function.php:
  1. <?php
  2. require("config.php");
  3. define("serwer",$serwer);
  4. define("user",$user);
  5. define("pass",$pass);
  6. define("baza",$baza);
  7. function polacz()
  8. {
  9. global $mysqli;
  10. $mysqli=new mysqli(serwer,user,pass,baza);
  11. $mysqli2=$mysqli->errno;
  12. if ($mysqli2 === NULL){return "zero";}
  13. if ($mysqli2 === 0){return "gut";}
  14. if ($mysqli2 !=0){return "pudlo";}
  15. }
  16. ?>

W pliku function.php docelowo mają się też znaleźć inne funkcje zależne od funkcji połącz. Funkcję tę stworzyłem po to by za każdym razem nei sprawdzać czy udało się połączenie z bazą danych i nie pisać komunikatów błędów na Ekranie.

Plik file02.php
  1. <?php
  2. require("cat01/function.php");
  3. $test01=polacz();
  4. //Zapytania
  5. if ($test01 != "gut")
  6. {echo "Nie udało się połączyć z bazą danych...";}
  7. if ($test01 == "gut")
  8. {
  9. $query="SELECT * FROM drzewo limit 2";
  10. $result=$mysqli->query($query,MYSQLI_STORE_RESULT);
  11. $result2=$result->num_rows;
  12. if ($result2 == 0)
  13. {echo "Nie udało się...";
  14. $mysqli->close();}
  15. if ($result2 >=1)
  16. {echo "Zwrócono rekordy...";}
  17. //Tutaj później pojawią się instrukcje do obróbki rekordów
  18. }
  19. ?>

CODE

Notice: Undefined variable: serwer in C:\xampp\htdocs\puppe\cat01\function.php on line 3

Notice: Undefined variable: user in C:\xampp\htdocs\puppe\cat01\function.php on line 4

Notice: Undefined variable: pass in C:\xampp\htdocs\puppe\cat01\function.php on line 5

Notice: Undefined variable: baza in C:\xampp\htdocs\puppe\cat01\function.php on line 6

Notice: Trying to get property of non-object in C:\xampp\htdocs\puppe\file02.php on line 9
Nie udało się..
.

Tak wygląda wynik wykonania skryptu file02.php. Wcześniej było wszystko jak trzeba. W wersji 5.3 PHP miałem wyłączone register_globals i działało. Teraz jak gdyby serwer dostał grzyba i nie łączy się z bazą danych (dane do bazy są podane prawidłowo. w tabeli drzewo znajdują się przykładowe wartości). Nie wiem gdzie jest błąd. Poza tym zależy mi na tym aby wyrzucało błędy w przypadku niepowodzenia połączenia się z bazą danych, zwłaszcza że serwery MySQL są zawodne i czasami nie udaje się nawiązać z nimi połączenia gdy np. są przeciążone.
kamil_lk
W pliku cat01/function.php powinno być
  1. require("cat01/config.php");

ponieważ najpierw wywołujesz plik function.php w pliku file02.php, który jest katalog wyżej od pliku config.php
sajegib
Sprawdź uprawnienia plików/folderu, problem jest przy require('config.php'); ten plik nie jest dołączany

Cytat("kamil_lk")
W pliku cat01/function.php powinno być...


Przecież oba pliki są w tym katalogu...
Syaoran i Sakura
Cytat(sajegib @ 11.11.2013, 12:59:32 ) *
Sprawdź uprawnienia plików/folderu, problem jest przy require('config.php'); ten plik nie jest dołączany


To nic nie daje. To trochę wygląda tak jakby global nie działało...

Jakby ktoś się uparł to by napisał nawet najbardziej skomplikowany program bez użycia własnych funkcji i procedur, jednak skoro one ułatwiają pracę programisty, chcę z nich korzystać.

Gdyby to był problem uprawnień to by funkcja require się wysypała i nie pozwoliła kontynuować pracy skryptu.
com
Po pierwsze definiuj STAŁE wiekimi literami...
Syaoran i Sakura
Cytat(com @ 11.11.2013, 21:01:29 ) *
Po pierwsze definiuj STAŁE wiekimi literami...

To nic nie zmieniło...
Zauważyłem również, że gdy w pliku function.php, zaraz po wypisaniu require("config.php") dodam następujące frazy

  1. global $serwer;
  2. global $user;
  3. global $pass;
  4. global $baza;


To znikają pierwsze cztery komunikaty notice. Nie rozumiem jednak, dlaczego muszę dodawać global, skoro używam zmiennych z pliku i to w głównym skrypcie. Gdyby to była funkcja, to co innego. Podejrzewam, że parser PHP coś źle działa. Na wcześniejszej wersji Xamppa 1.73 z PHP 5.3 wszystko chodziło jak trzeba.

Początkowo przypuszczałem, że pisane w PHP aplikacje będą kompatybilne z różnymi wersjami PHP, chyba że znajdą się w nich przestarzałe funkcję (takowych chyba u mnie nie ma). Teraz jednak widzę, że napisanie działającej aplikacji jest grą w ciemno, co mnie znacznie zniechęca do dalszego poznawania PHP.

Jeszcze jedna uwaga: Skrypt działa prawidłowo na hostingu cba.pl, ugu.pl bez względu na to czy ustawię PHP w wersji 5.4 czy 5.3 czy 5.2. U mnie obecna jest wersja PHP 5.4.19, zaś środowisko Apache mam w wersji 2.4.4 i są kłopoty. Serwery internetowe zapewne coś w sobie mają skoro łykają moje skrypty bez żadnych ale. Przyznam również, że nie zostały postawione przez Czarodziejkę Tecne z klubu Winx. Chcę mieć na localhoście taką samą sytuację. Włączałem i wyłączałem różne dyrektywy w pliku PHP Ini lecz problem nie ustąpił.
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.