codeigniter, php - problem ze zmienna statyczna

0

Witam .Tworze koszyk do ksiegarni, zwazywszy na fakt ze biblioteka cart nie dziala poprawnie stwierdzile ze sprobuje sam go napisac. Na razie chcialbym zeby tylko wyswietlala mi sie calkowita suma i calkowita ilosc. Ale nie wiem czemu zmienna statyczna caly czas mi sie naspisuje.
Oto kod kontrolera z dodawanie do koszyka wartosci:

 
    function Koszyk($id=1)
     {

         static $licznik = 0;
         static $suma = 0;
         
         $query = $this->Kategorie_model->get_books_by_ID($id);

         if($query->num_rows() > 0)
          {
              $item = $query->row();
              $qty = 1;

               $data['cena'] = $item->BOOK_Price;
              $suma += ($data['cena']*$qty);
              $data['suma'] = $suma;
              echo 'suma '. $suma;
               $licznik++;
               $data['ilosc']= $licznik;
               echo 'licz '.$licznik;
                $this->session->set_userdata($data);
                
          }



     }

0
$qty = 1'

Ten apostrof to przy kopiowaniu kodu, czy tak jest? Jeśli tak masz w kodzie i nie zauważyłeś, to "zainwestuj" w edytor z kolorowaniem składni...

0

nie szukaj problemu, tam gdzie go nie ma, zmienna $qty jest nieistotna, maly blad, ktorego zmiana nie zmienia nic. Problem tkwi w nadpisywanoi zmiennych statycznych. Jezeli potrafisz go rozwiazac, to prosze podziel sie ze mna swoja teoria...

0

Hmm, to nie jest C++ (niestety, czy stety) i tutaj trzeba się odwoływać do zmiennych przez this:: lub this-> jak już madmike w komentarzu na górze napisał. Z tego co napisałeś... Deklarujesz statyczną zmienną w funkcji, można tak robić? Nawet jeśli to łyka, deklarowanie zmiennej statycznej w funkcji jest imo bez sensu. Nie pomyliłeś static z const?

0

Poprawilem kod na:

 
   function addCards($id=1)
        {

         static $licznik = 0;
         static $suma = 0;
         
         
         $query = $this->Kategorie_model->get_books_by_ID($id);

         if($query->num_rows() > 0)
          {
              $item = $query->row();

                
              $this->suma += ($item->BOOK_Price*1);
              $data['suma'] = $this->suma;
              
               $this->licznik++;
               $data['ilosc'] = $this->licznik;
              
               
                
          }
           $this->session->set_userdata($data);
                redirect('ksiegarnia/main');



        }

I w dalszym ciagu jest to samo, $this nic nie daje. A co do static, to wydaje mi sie ze nie pomylilem. Bo mam na celu wyswietlanie sumy produktow i ilosci. Tak wiec, jezeli uzytkownik wybierze ksiazke ktora kosztyje 23zl i kliknie dodaj do koszyka to wyswietla mi sie suma = 23 i ilosc = 1, jezeli kliknie w inna ksiazke, np ktora kosztuje 40zl to w miejscu sumy powinno sie wyswietlic 63zl a w miejscu ilosci 2. Wiec wydaje mi sie ze zmienna statyczna bedzie tutaj odpowiednia, chyba ze mozna to zrobic inaczej....

0
Demonical Monk napisał(a)

Hmm, to nie jest C++ (niestety, czy stety) i tutaj trzeba się odwoływać do zmiennych przez this:: lub this-> jak już madmike w komentarzu na górze napisał. Z tego co napisałeś... Deklarujesz statyczną zmienną w funkcji, można tak robić? Nawet jeśli to łyka, deklarowanie zmiennej statycznej w funkcji jest imo bez sensu. Nie pomyliłeś static z const?

Żeby było śmieszniej, const w PHP działa praktycznie identycznie jak w C++. Do zmiennych lokalnych (nawet statycznych) nie trzeba się przez żadne $this odwoływać.

Kod jest poprawny i, działałby zgodnie z tym, co chcesz zrobić, gdyby cały skrypt po kliknięciu w inny produkt nie był wykonywany zupełnie od nowa, włączając w to inicjalizację zmiennych statycznych - na 0. Zamiast korzystać ze zmiennych statycznych (które zachowają się pomiędzy kolejnymi wywołaniami funkcji, ale nie całej aplikacji), trzymaj te wartości w sesji.

0

Mam sobie stworzyc tabele w bazie gdzie mam przechowywac te wartosci? Bo nie do konca rozumiem, wyrazenie $this->session->set_userdata($data); przypisuje wlasnie dane do sesji...

0

No, ale nigdzie ich nie odczytujesz.

0
 
 function addCards($id=1)
        {

            $licznik = 0;
            $suma = 0;
            $zm['licznik'] = $licznik;
            $zm['suma'] = $suma;


         $this->session->set_userdata($zm);
         
         $query = $this->Kategorie_model->get_books_by_ID($id);

         if($query->num_rows() > 0)
          {
              $item = $query->row();

                
              $this->session->userdata('suma') += ($item->BOOK_Price*1);
              $data['suma'] = $this->session->userdata('suma');
              
               $this->session->userdata('licznik')++;
               $data['ilosc'] = $this->session->userdata('licznik');
              
               
                
          }
           $this->session->set_userdata($data);
                redirect('ksiegarnia/main');



        }

w ten sposob?

0

Ten sposob jest poprawny, zmienne dzialaja.

 
 function addCards($id=1)
        {

           $suma = $this->session->userdata('suma') ? $this->session->userdata('suma') : 0;
         $licznik = $this->session->userdata('licznik') ? $this->session->userdata('licznik') : 0;
         
         $query = $this->Kategorie_model->get_books_by_ID($id);

         if($query->num_rows() > 0)
          {
              $item = $query->row();

                
             $suma += ($item->BOOK_Price*1);
              $data['suma'] = $suma;

              $licznik++;
              $data['licznik'] = $licznik;  
              
               
                
          }
           $this->session->set_userdata($data);
                redirect('ksiegarnia/main');



        }

Zamykam temat.

1 użytkowników online, w tym zalogowanych: 0, gości: 1