![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 0 Dołączył: 5.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Stawiajac swoje pierwsze kroki w php OOP nie obylo sie dlugo zanim natknalem sie na pierwszy powazniejszy problem.
Otoz robie klase ktora jest wywolywana na kazdej stronie/podstronie - jest to klasa do Logowania i sprawdzania sesji. Jednak gdy ustawiam po zalogoaniu nowa sesjie - $_SESSION['user'] = $user_id; przy jakiejkolwiek probie wyechowania tej sesji dostaje blad "Object of class User could not be converted to string." Jest jeden wyjatek, moge ja wyechowac w funkcji w ktorej ja ustawiam. Tylko tyle. Probowalem troche z serializacja, ale nie wiem czy sie dobrze za to zabieralem. Oto kod: $user = new User; $user_id = $user -> login(@$_POST['user_name'] , @$_POST['user_password']); $status = $user -> checkCurrentSession(); class User { function __construct() { session_start(); } function checkCurrentSession() { if ( isset($_SESSION['user'])) { echo $_SESSION['user']; // NO I TU DUPA :/ }else{ return false; } } function login($user, $password) { if ( isset ($user) && isset ($password) ) { $user_id = $this -> checkLoginData($user, $password); if( $user_id != false) { $_SESSION['user'] = $user_id; }else{ echo "wrong user"; } } } function checkLoginData($user,$password) { // conecting to the database. // check for user id and return it. // hardCoded validation -> if ($user == "dupa" && $password == "dupa") { return $user; }elseif ($user == "admin" && $password =="admin" ) { return $user; }else { return false; } } function logout () { if ( isset ($_SESSION['user']) ) { $_SESSION['user']; unset($_SESSION['user']); session_destroy(); echo "sucesfully loged out"; }else{ echo "Sesion does not exist. Error."; } } } Dodatkowo dodam, przechodzac na strone admina - sprawdzanie typu if ( $_SESSION['user'] == "admin") tez nie dziala :/ Wtf ?! Help ?! Ten post edytował rahul 7.03.2011, 08:45:37 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
zamiast
echo $_SESSION['user']; daj: var_dump($_SESSION['user']); To może doznasz olśnienia. Pomijam już fakt, że komunikat błędu podaje ci wszystko jak na tacy -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 9.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Mam podobny problem z tym, że na serwerze nazwa.pl działa poprawnie i dump zwraca mi string(2)->pl
natomiast na innym serwerze zagranicznym dostaję takie coś....
W miejsce XXX znajdują się dane, których nie mogę podać.W zasadzie nie wiem nawet czemu je dumpuje!Znajdują się one w innej klasie. Czy to możliwe, że to wina serwera albo jego konfiguracji.Jeśli tak to jak mogę to zfixować np. w php.ini, htaccessie? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 19 Dołączył: 25.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zrób tak:
Będzie czytelniej. Prawdopodobnie obiekt języka zawiera odwołanie do obiektu db, który zarządza bazą danych. -------------------- Znalazłeś sam rozwiązanie swojego problemu? Nie pisz "już wiem, do zamknięcia". Podziel się rozwiązaniem - inni będą mieli łatwiej.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 9.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
No dokładnie, ale czemu na nazwa.pl zachowuje się to inaczej niż na zagranicznym serwerze.
To mam na początku klasy language. Ten post edytował gizmo1989 9.09.2011, 13:59:21 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 19 Dołączył: 25.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Reszta klasy Language byłaby chyba ciekawsza.
Bo z tego co widzę, to żeby otrzymać "pl" musiałbyś się odwołać do
Nie przesądzam bo nie znam kodu tej klasy ani nie wiem do czego służy. Ten post edytował qrzysztof 9.09.2011, 14:03:33 -------------------- Znalazłeś sam rozwiązanie swojego problemu? Nie pisz "już wiem, do zamknięcia". Podziel się rozwiązaniem - inni będą mieli łatwiej.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 9.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
często w plikach tpl i php używana jest zmienna $_SESSION['language'] jako element url'a (panel admina jest w kilku językach a przepisywanie urli jest w htaccessie). Z tym, że na nazwa.pl ta zmienna zwraca string w postaci "pl" i w podstawieniach działa to poprawnie.Na zagranicznym serwie podstawia to co wypluł var_dump. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 19 Dołączył: 25.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Teraz pytanie czy do sesji ($_SESSION['language']) jest na pewno zapisywany obiekt klasy Language? Czy po prostu nazwa języka typu "pl", "fr"?
Bo z obiektu klasy Language po var_dump() raczej nie będzie "pl" - no chyba, że użyjemy magicznej metody __toString() Ten post edytował qrzysztof 9.09.2011, 14:26:55 -------------------- Znalazłeś sam rozwiązanie swojego problemu? Nie pisz "już wiem, do zamknięcia". Podziel się rozwiązaniem - inni będą mieli łatwiej.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 9.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Teraz pytanie czy do sesji ($_SESSION['language']) jest na pewno zapisywany obiekt klasy Language? Czy po prostu nazwa języka typu "pl", "fr"? Bo z obiektu klasy Language po var_dump() raczej nie będzie "pl" - no chyba, że użyjemy magicznej metody __toString() No właśnie na serwerze nazwa.pl zwraca "pl". Nie jestem autorem tego kodu tylko staram się to wdrożyć na inny serwer więc zaraz odszukam, w którym miejscu zapisuje to do $_SESSION |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 19 Dołączył: 25.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
A jeśli użyjemy metody __toString() a na serwerach są różne wersje PHP to mogą się tu pojawić pewne różnice. Nie wiem nawet czy potrzebne jest użycie __toString() do tego. Być może sam fakt próby konwersji obiektu na tekstowe wyjście powoduje zjawisko, o którym piszesz.
-------------------- Znalazłeś sam rozwiązanie swojego problemu? Nie pisz "już wiem, do zamknięcia". Podziel się rozwiązaniem - inni będą mieli łatwiej.
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 9.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Hmm.No to mam jeszcze jedna dziwna wskazówkę.
Wyczyściłem cookies i var_dump na tym zagranicznym serwie dla $_SESSION['language'] zwrócił string(2) "pl" a jak odświeżyłem stronę to wywala to co wcześniej wklejałem. Dziwne... Również patrząc przez firebug'a na cookie widzę za 1 razem PHPSESSID=jakies id; path=/ a po odświeżeniu znika path=/ Czy to może mieć jakieś znaczenie? Ten post edytował gizmo1989 9.09.2011, 15:50:58 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 715 Pomógł: 47 Dołączył: 5.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Wydaje mi się ,że nie zostało sprawdzone czy formularz został wysłany i po odświeżeniu pobiera puste zmienne przez co wywala błędy>proszę spróbować dodać if($_POST) Ten post edytował Rid 9.09.2011, 22:10:16 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 9.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Ok.
Problem rozwiązałem.Raz zwracało string->"pl" a raz resztę klasy np. po odświeżeniu. Zmieniłem w notepad++ funkcją zamień w plikach zmienną $_SESSION['language'] na $_SESSION['jezykw'] i panel zadziałał. Z tego taki wniosek, że pewne metody na zagranicznym serwerze były niedozwolone z powodu kolizji nazw. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 18:01 |