Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]PHP nie widzi zmiennych, Dziwny błąd, który pojawia się przy stosowaniu PHP > 5.4.
Syaoran i Sakura
post 11.11.2013, 12:50:09
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 11.11.2013

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


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.
Go to the top of the page
+Quote Post
kamil_lk
post 11.11.2013, 12:59:19
Post #2





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


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

Ten post edytował kamil_lk 11.11.2013, 13:01:21
Go to the top of the page
+Quote Post
sajegib
post 11.11.2013, 12:59:32
Post #3





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


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

Ten post edytował sajegib 11.11.2013, 13:02:38
Go to the top of the page
+Quote Post
Syaoran i Sakura
post 11.11.2013, 13:56:12
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 11.11.2013

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


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.

Ten post edytował Syaoran i Sakura 11.11.2013, 13:57:52
Go to the top of the page
+Quote Post
com
post 11.11.2013, 21:01:29
Post #5





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


Po pierwsze definiuj STAŁE wiekimi literami...
Go to the top of the page
+Quote Post
Syaoran i Sakura
post 11.11.2013, 23:55:09
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 11.11.2013

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


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

Ten post edytował Syaoran i Sakura 12.11.2013, 00:22:59
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: 18.07.2025 - 02:33