Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> __set
propage
post
Post #1





Grupa: Zarejestrowani
Postów: 330
Pomógł: 0
Dołączył: 25.01.2008

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


mam problem z działaniem tej metody

mam klase a w niej taką metode
  1. <?php
  2. function __set($pram, $value) 
  3. {
  4. global $db;
  5. $db->query("SELECT * FROM sessions WHERE session_id = '".$this->id."'");
  6.  $row = $db->fetch_row(); 
  7. $values = unserialize($row['session_value']); 
  8. if(empty($values))$values=array(); 
  9. $values[$pram] = $value; 
  10. $this->values = $values;
  11. $values=serialize($values);
  12. echo $values;
  13. $sql = $db->query("UPDATE `sessions` SET session_value = '" . $values. "' WHERE session_id = '" . $this->id . "'");
  14. if ($result) {
  15. return true;
  16. } else {
  17. return false;
  18.  } 
  19.  
  20. }
  21. ?>

następnie uzywam kodu do zapisania jakies nowej wartosci
[php]
$session->czy = 'tak';

wartosc jaka zapisuje sie do bazy danych (echo, ktore jest w kodzie) wyglada tak

"a:1:{s:5:"value";s:0:"";}a:2:{s:5:"value";s:0:"";s:3:"czy";s:3:"tak";}"

jeśli
zmienie zmienię __set na setValue i bede odwolywać się tak
$session->setValue('czy', 'tak');

wartośc jaka zapisze się do bazy danych jest prawidłowa i wygląda tak
"a:1:{s:3:"czy";s:3:"tak";}"

dodatkowo widze
że kod w metodzie __set jest wykonywany zakażdym razem nawet jesli nie wywoluje tej metody, moze ktos mi to wytlumaczyc

Ten post edytował propage 28.07.2008, 13:40:25
Go to the top of the page
+Quote Post
zimi
post
Post #2





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


raczej nieświadomie wykorzystujesz tą metodę...
spróbuj na początku metody __set wrzucić:
  1. <?php
  2. echo 'Kolejne wywołanie dla danych: '.$pram.' '.$value.'<br>';// w celu rozróżnienia gdzie już kolejne wywołanie
  3. debug_print_backtrace();
  4. ?>


i odpal skrypt jeszcze raz...
i prześledź w których linijkach i fragmentach skryptu uruchamia się ta metoda
metoda __set nie uruchamia się sama
Go to the top of the page
+Quote Post
wrzasq
post
Post #3





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

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


tak jak zimi powiedzial, konkretnei poszukaj $session->value. jak widze masz tablice $this->values - pewnie gdzies zrobiles literowke i zjadles 's'.


--------------------
Go to the top of the page
+Quote Post
propage
post
Post #4





Grupa: Zarejestrowani
Postów: 330
Pomógł: 0
Dołączył: 25.01.2008

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


uzylem debug_print_backtrace()
"#0 session->__set(value, ) called at [C:\Program Files\WebServ\httpd-users\proCMS\class\session.php:156] #1 session->restore() called at [C:\Program Files\WebServ\httpd-users\proCMS\class\session.php:110] #2 session->__construct() called at [C:\Program Files\WebServ\httpd-users\proCMS\index.php:10] "
i zauważyłem ze chciałem w pewnej klasie przypisać wartość nie zadeklarowanej zmiennej
Go to the top of the page
+Quote Post
zimi
post
Post #5





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


rozumiem że problem rozwiązany....
jeszcze moja uwaga odnośnie kodu
sugeruję aby zapisywanie danych sesji było w destruktorze
a odczytywanie w konstruktorze
a zmiany z __set powinny być IMO tylko zmieniane w obiekcie sesji...
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 Aktualny czas: 19.08.2025 - 07:20