Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: __set
Forum PHP.pl > Forum > PHP
propage
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
zimi
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
wrzasq
tak jak zimi powiedzial, konkretnei poszukaj $session->value. jak widze masz tablice $this->values - pewnie gdzies zrobiles literowke i zjadles 's'.
propage
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
zimi
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...
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.