Błąd przy zapisie cookies

0

Witam serdecznie,
Mam taki kod:

array_unshift($_COOKIE['last_seen'], $product);
$_COOKIE['last_seen'] = array_slice($_COOKIE['last_seen'], 0, 10);

I wyświetla mi błąd:

Warning: array_unshift() expects parameter 1 to be array, null given in index.php on line 7
Warning: array_slice() expects parameter 1 to be array, null given in index.php on line 8

Ten skrypt miałby działać w następujący sposób:

  • użytkownik wchodzi na kartę produktu,
  • dodajemy nowy ostatnio oglądany produkt do COOKIE,
  • sprawdzamy czy user oglądał już ten produkt (czy znajduje sie w cookie - i jeśli tak, to usuwa poprzedni),
  • usuwamy produkty z pamięci powyżej 10
    Mógłbym prosić o pomoc?

dodanie znacznika <code class="none"> - @furious programming

0

troszkę dziwny wynik to zwraca: array(6) {
["ostatnio_ogladane_produkty"]=>
NULL
["last_seen"]=>
string(105) "a:12:{i:0;i:1;i:1;i:1;i:2;i:1;i:3;i:1;i:4;i:1;i:5;i:1;i:6;i:1;i:7;i:1;i:8;i:1;i:9;i:1;i:10;i:1;i:11;i:1;}"

}

0
$products = array();
$product = 'wiertarka';

if(isset($_COOKIE['last_seen'])){
	$products = unserialize($_COOKIE['last_seen']);
}

foreach ($products as $key => $value) {
	if($products[$key] == $product){
		unset($products[$key]);
	}
}

array_unshift($products, $product);

if(count($products) > 10){
	$products = array_slice($products, 0, 10); 
}

setcookie('last_seen', serialize($products), time()+3600);

echo "<pre>";
var_dump(unserialize($_COOKIE['last_seen']));
echo "</pre>";

Spróbuj z tym. Ja u siebie najpierw dodałem tablice jakiś narzędzi, zeby sprawdzić czy działa, więc pod $product podstaw co tam chcesz. Przy pierwszym odświeżeniu var_dump() wypluje Ci boolean false, bo nie zaciagnie od razu ciacha (tak mi się wydaje przynajmniej).

0

teraz chyba działa, ale nie dodaje kolejnych produktów... zawsze mam 1
array(1) {
[0]=>
string(1) "2"
}

Pomimo tego że oglądam różne - to numerki się zmieniają, ale zawsze jest jeden

0

Może to kwestia wersji php? Na localhoście dodaje mi tylko 1 produkt do cookiesa - a na home.pl wcale :(
Za każdym razem wyświetla mi to bool(false)

Mogę napisać do Ciebie na prv?

0

przy każdym teście zmieniam nazwę cookiesa :)

0
  1. Spróbuj w innej przeglądarce.
  2. Zmień setcookie na setcookie('last_seen', serialize($products), time()+3600, "/", NULL); Ja testuje również na jednej stronie, więc konieczne jest dodanie "/".
  3. Ciasteczka stanowią część nagłówka HTTP, więc funkcja setcookie() musi być wywoływana zanim jakiekolwiek dane zostaną wysłane do przeglądarki. Ja u siebie testowałem na czystej stronie, więc może dlatego u mnie działa.
0

Czyli ten kod musi być na samym początku strony/kodu?

Jak to przeniosłem na top to mam takie błędy na home:
Warning: Invalid argument supplied for foreach() in /index.php on line 16 (foreach ($products as $key => $value) {)

Warning: array_unshift() expects parameter 1 to be array, boolean given in /index.php on line 22 (array_unshift($products, $productcx);)

Na localhoście zatrybiło :)

0

Czyli na lh już działa jak powinno?:D Spróbuj wszystkie kroki w różnych wariantach ;) Całkiem prawdopodobne, że krok 2 załatwia sprawę, bo ciacho mogło być ustawiane tylko na danej ścieżce, jak dasz / to jest dostępne wszędzie, jak dasz /foo to tylko jak domenta tak wygląda itd. Defaultowa wartość to aktualna strona na której jesteś, więc możliwe, że przypisywaliśmy ciacho tylko do tamtej podstrony :D

Wróć z tymi setcookie tam gdzie było (jak już przenosisz to cały blok kodu, żeby tego nie rozdzielać) i wypróbuj rozwiązanie nr 2.

Sam od niedawna programuję w php, więc tym bardziej trudno mi zgadnąć o co chodzi

0

OK, dziękuję za pomoc :) Będę zaraz testował :)

A jak najszybciej i najłatwiej wyświetlić te ID z cookiesa?
chciałbym dostać taki wynik:

  • id1
  • id2
  • id3

    itp
0

Musisz "odkodować" tego cookiesa po czym dostaniesz tablicę, więc:

$cookie_values = unserialize($_COOKIE['last_seen']);

foreach ($cookie_values as $key => $value) {
	echo "- id".($key+1)." ".$value."<br>";
}
0

Kurcze, dziwne ale na home.pl nie chce mi to działać :)

Dziękuje za ten kod - na localu wszystko śmiga :-)

1

Nie mam pojęcia czemu :P Teraz musisz już sam pokombinować.

Btw. gdybyś chciał np. wrzucać pary klucz => wartość, co wydaje się przydatne np. $id => $nazwa to pokombinuj z

$products = array('produkt_test' => $product) + $products;

:)

0

dziękuje bardzo :)

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