dziwny problem z cookie i sesja

0

Witam mam funkcje ktora dodaje mi dane do koszyka, w tej funkcji rowniez wykonuje inna funkcje ktora zwieksza mi liczbe zakupow. Oto kod dodajacej dane do cookie

 

    function addCarts($segment=1, $price='')
       {
//
           $value = 0;
           $value1 = 0;
           $value2 = 0;
           if($price == 'promo')
           {

            $value1 = $this->Kategorie_model->get_books_by_ID($segment)->row()->BOOK_PromoValue;
            $value2 = $this->Kategorie_model->get_books_by_ID($segment)->row()->BOOK_Price;
            $value = $value2 - $value1;
            $id= mysql_real_escape_string(HTMLSpecialChars(addslashes($segment)));
            setcookie("cookie[$id]", $value, time()+3600*2, '/', '', '0');
            //echo 'value2 '.$value2.'- value1 '.$value1.'= value '.$value;
             
           }

           else if($price == 'normal')
           {
                $value = $this->Kategorie_model->get_books_by_ID($segment)->row()->BOOK_Price;
                $id= mysql_real_escape_string(HTMLSpecialChars(addslashes($segment)));
                setcookie("cookie[$id]", $value, time()+3600*2, '/', '', '0');
                //echo 'value= '.$value;
           }

           if(isset($_COOKIE['cookie']))
           {
           $this->zakupy();
           }

           
         

       }



a oto kod zwiekszajacy licznik ktory jest w sesji:

 
  function zakupy()
       {
           $licznik = 0;
           $ilosc = '';
           $nr = 0;
           if(isset($_COOKIE['cookie']))
           {
                foreach($_COOKIE['cookie'] as $value)
                {



                    if($licznik==0)
                    {
                        $licznik++;
                        echo 'dupa';
                       



                    }
                    else
                    {
                         $nr++;
                         $ilosc = $this->input->post('input'.$nr);
                         $licznik++;

                         if($ilosc != '')
                         {
                            $licznik += $ilosc - $licznik;
                         }

                         echo 'elsedupa';


                    }


                }
                $this->session->set_userdata('licznik',$licznik);


           }



       }



Problem polega na tym ze licznik zwieksza mi sie dopiero po 2 wywolaniu funkcji zakupy...Prosze o pomoc

0

"po drugim wywołaniu funkcji zakupy" - masz na myśli drugie wywołanie addCarts (a w nim zakupy)? Pewnie za pierwszym razem zmienna $price nie spełnia żadnego z dwóch warunków i tym samym nie ustawiają Ci się ciasteczka.
Zmień

 else if($price == 'normal') 

na else

 i sprawdź.
0

rozwiazalem to troche w inny sposob. Ciasteczka dodaja sie dopiero po przeladowaniu skryptu, wiec zrobilem redirect do funkcji zakupy, a nastepnie do strony glownej i dziala. Ale mam kolejny problem przy pobraniu wartosci z pola tekstowego do licznika, zmienna nic nie przekazuje i co za tym idzie nie dodaje.

0

Tablica $_POST jest wypełniana kiedy klient wywoła zdarzenie submit dla formularza. Jeżeli zrobiłeś redirect (i zakładam, że nie wywołałeś przedtem AJAX'a) to $_POST jest puste (albo w ogóle nie zainicjowane, w sumie nie wiem). Tak czy inaczej danych brak.

0

wiec jak to mozna zrobic? Zeby zapisac cookie trzeba przeladowac, zeby przeslac $POST nie wolno przeladowywac :/ A po zmianie else if na else znowu dopiero za 2 razem licznik mi dodaje...

0

Obawiam się, że takie rzeczy jak $_POST i Cookies to są podstawy, które dobrze jest znać zanim zdecydujesz się wykorzystywać istniejące framework'i PHP. Polecam przestudiowanie jakiegoś kursu online (pełno tego na Googlach). No i przydałoby się też wyrobić sobie nawyk trzymania porządku w kodzie (bo to co wkleiłeś to straszne spaghetti jest), bez tego ani rusz dalej.

0

co masz na na mysli mowiac spagetti? Fakt jestem poczatkujacy, dlatego prosze o wyrozumialosc i ew porady.

0
beliall napisał(a)

(...)
function zakupy()
{
$licznik = 0;
$ilosc = '';
$nr = 0;
if(isset($_COOKIE['cookie']))
{
foreach($_COOKIE['cookie'] as $value)
{
if($licznik==0)
{
$licznik++;
echo 'dupa';
}
else
{
$nr++;
$ilosc = $this->input->post('input'.$nr);
$licznik++;

                     if($ilosc != '')
                     {
                        $licznik += $ilosc - $licznik;
                     }

                     echo 'elsedupa';
                }
            }
            $this->session->set_userdata('licznik',$licznik);
       }
   }
> (...)


Mam na myśli niepotrzebne odstępy (już usunąłem), powtórzenia w kodzie (robisz $licznik++; i dla $licznik==0 i dla $licznik!=0) i na koniec perełka: 
```php
if($ilosc != '') {
  $licznik += $ilosc - $licznik;
 } 

Jeżeli $ilość ma być liczbą to: is_numeric(), to raz.
No i: $licznik +=$ilosc - $licznik to jest to samo co: $licznik=$ilosc; , to dwa.

0

Dzieki za konstruktywne uwagi. A masz moze jakis pomysl jak napisac taki funkcjonalny koszyk w CI??

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