![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 6 Dołączył: 10.01.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
tworzę niewielki projekt z baz danych, który opiera się na bazie PostgreSQL i interfejsie webowym napisanym w języku PHP, który w założeniu ma być wirtualnym dziennikiem ocen (wiem, że nie jest to zbyt oryginalne ale wydawało mi się ciekawe na zapoznanie się z PostgreSQL'em). Natknąłem się na dziwny problem i ani w manualu ani nigdzie w googlach nie udało mi się znaleźć rozwiązania (sam problem jest trudny do sformułowania, bo nie wiem gdzie leży błąd). Otóż, mam takie pliki (niektóre opisane bardziej w pseudokodzie, bo są dosyć długie) : index.php :
plik header.php załączany na początku pliku index.php:
plik polaczenie.php załączany w pliku header.php :
plik footer.php załączany pod koniec to sama stopka i zamykanie tagów : oraz plik funkcje, w którym znajdują się różne funkcje wywoływane przez index.php :
oraz plik menu_uczen.inc.php (menu_rodzic wyglada identycznie)
Jak można zauważyć, w pliku funkcje w każdej funkcji na początku używam : co chyba nie jest zbyt dobrym rozwiązaniem (nie podoba mi się to ciągłe otwieranie połączenia z bazą danych). Próbowałem w pliku header zamieścić require 'polaczenie.php'; jednak okazywało się, że podczas wywoływania funkcji wypisz_oceny_dziecka "zrywało się" połączenie z bazą danych. Używając funkcji pg_connection_status mogłem zauważyć, że połączenie z bazą danych nie istnieje, chociaż nigdzie go nie zamykałem. Co więcej, gdy w funkcjach używam require_once zamiast require, to też mam taki sam błąd. Używanie pg_pconnect albo ustawianie connect_timeout też nie pomaga. Nie mam pojęcia w którym momencie jest wyłączane połączenie z bazą danych (myślałem, że podczas ciągłego odświeżania strony index.php z różnymi parametrami, ale przecież require umieszczone na początku tej strony powinno rozwiązać problem ? ). Jeżeli ktoś ma jakiś pomysł, skąd bierze się ten problem to byłbym bardzo wdzięczny za pomoc (chodzi mi o to, żebym w jednym miejscu nawiązał połączenie z bazą i żeby ono już zostało, zamiast łączyć się w każdej funkcji). |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Możesz użyć global (IMG:style_emoticons/default/smile.gif)
index.php
funkcje.php
lub przesłanie handlera jako argument funkcji:
ps. na końcu index.php dodaj pg_close |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 6 Dołączył: 10.01.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za pomoc, zastosowanie global pomogło (IMG:style_emoticons/default/smile.gif)
Jeszcze jakbym mógł prosić o wyjaśnienie, dlaczego mimo, że tworzę tą zmienną przy każdorazowym wczytaniu strony (bo plik polaczenie.php jest dołączany na początku strony index.php) to jednak w funkcji program jej nie widzi ? Wydawało mi się, że wszystkie zmienne są globalne, a tu się okazuje, że muszę dodatkowo używać atrybutu global ? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
A kto ci powiedział, że zmienne są globalne? od tego jest właśnie jak by to nazwać.. hermetyzacja funkcji aby żadne badziewie przez naszą omyłkę się do nie nie dostało np.
Ten post edytował CuteOne 10.01.2011, 17:56:07 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 2 Dołączył: 6.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Możesz użyć global (IMG:style_emoticons/default/smile.gif) index.php [php] [php] function wypisz_oceny($id, $uprawnienia, $przedmiot="all") { global $polaczenie; if($przedmiot=="all") { nie powinieneś mu pisać o globals, to zły nawyk A Globals jest złem najlepiej przesyłać jako parametr funkcji, bo niezły burdel potem może powstać |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.09.2025 - 09:41 |