Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gremio10

Array Cookies

Recommended Posts

Fala galera, eu estou criando um e-commerce, e estou com um problema de salvar o carrinho em cookie, tipo, eu quero criar um array com o cookie, o que consegui foi:

 

[cartShop] => Array
       (
           [0] => 2
       )

 

beleza, mas quando eu colocou outro, digamos o de id 1 ele fica

 

[cartShop] => Array
       (
           [0] => 1
       )

 

como posso arrumar isso ?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

:ermm: Em cookie ? tem certeza ?

Não seria melhor em um Array normal não ?

 

Enfim, agente não é bola de cristal não, se você não postar como você fez

fica dificil entender onde você quer chegar, é como .. :o

 

Eu faria assim .

<?php
       $Carrinho = Array();
       echo '<pre>';
       $Carrinho[] = "Alguma coisa..";
       $Carrinho[] = "Alguma coisa2..";
       print_r( $Carrinho );
       $Carrinho[] = "Apos um tempo, outra coisa ..";
       $Carrinho[] = "Outra coisa ..";
       print_r( $Carrinho );

 

Saida:

Array
(
   [0] => Alguma coisa..
   [1] => Alguma coisa2..
)
Array
(
   [0] => Alguma coisa..
   [1] => Alguma coisa2..
   [2] => Apos um tempo, outra coisa ..
   [3] => Outra coisa ..
)

 

Ou então, gravaria em uma tabela temporaria todos os itens do cara, pro ID dele, e quando ele sair, dava um reset nessa tabela de itens dele ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo visto você está tentando usar $_COOKIE como array multidimensional. Não é possível. Você deve então serializar os valores. Adicionando com o operador +=

 

$_COOKIE['CARRINHO'] = "1"
$_COOKIE['CARRINHO'] += ",2";

 

Depois é só converter isso para array usando explode().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo visto você está tentando usar $_COOKIE como array multidimensional. Não é possível. Você deve então serializar os valores. Adicionando com o operador +=

 

$_COOKIE['CARRINHO'] = "1"
$_COOKIE['CARRINHO'] += ",2";

 

Depois é só converter isso para array usando explode().

 

Porque não é possivel ? , pra que fazer essa gambiarra toda usando explode e sei la oque mais ¬¬

<?php
       echo '<pre>';
       $_COOKIE['cartShop'][0] = 'Item .. ';
       $_COOKIE['cartShop'][1] = 'Um Item';
       foreach( $_COOKIE as $index => $data ){
                print_r( $data );
       }

 

Saida:

Array
(
   [0] => Item .. 
   [1] => Um Item
)

Pronto, não usei explode nen nada ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andrey Knupp, você saiu de uma gambiarra e entrou em outra. Alias, entrou em outra nada a ver. Isso porque um cookie não se cria simplesmente adicionando novos elementos a $_COOKIE.

O $_COOKIE é uma variável que o PHP cria com base nos cookies enviados pelo navegador na hora que ele faz a requisição ao servidor, portante ele é "read-only" (você pode até modificar, mas não terá efeito nenhum).

 

Uma das soluções que o gremio10 pode utilizar é Session. Nela você pode salvar um array dentro de um único elemento sem problemas, já que os dados ficam salvos no disco do servidor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andrey Knupp, você saiu de uma gambiarra e entrou em outra. Alias, entrou em outra nada a ver. Isso porque um cookie não se cria simplesmente adicionando novos elementos a $_COOKIE.

O $_COOKIE é uma variável que o PHP cria com base nos cookies enviados pelo navegador na hora que ele faz a requisição ao servidor, portante ele é "read-only" (você pode até modificar, mas não terá efeito nenhum).

 

Uma das soluções que o gremio10 pode utilizar é Session. Nela você pode salvar um array dentro de um único elemento sem problemas, já que os dados ficam salvos no disco do servidor.

 

Verdade. Para definir COOKIES usa-se a função setcookie().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certamente, mais eu fiz com base no que o @mangakah falou,

e não com setCookie, poís eu achei que o exemplo que ele deu ou forma de fazer seria aquilo entre o BBCode ..

 

Abraços, e o certo é SESSION mesmo B)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ei Knupp, eu errei, mas não venha me culpar pelo seu erro.

 

Eu concordo que o melhor é usar sessões. Mas a minha gambiarra até que funciona:

 

<?php
function adicionarItem($item) {

   $cartShop = $_COOKIE['cartShop'];
   if (!empty($_COOKIE['cartShop'])) {
      $cartShop .= ",";
   }

   $cartShop .= $item;

   setcookie('cartShop', $cartShop);

}

function pegaItems() {
   if( isset($_COOKIE['cartShop']) ) {
       $items = explode(",", $_COOKIE['cartShop']);
   }

   return $items;
}


if (isset($_GET['adiciona'])) {
   adicionarItem( $_GET['adiciona'] );
}
$items = pegaItems();

var_dump($items);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não estou te culpando ..

so estou falando que é desnecessario usar "COOKIE" para uma coisa desse TIPO

 

E e possivel setar um array multi dimensional em cookie sim ..

da mesma forma que você manda array de campos por POST, você seta cookies ..

<?php
       setCookie( 'cartShop[1]', 'um Item' );
       setCookie( 'cartShop[2]', 'outro Item' );
       echo '<pre>';
       foreach( $_COOKIE as $index => $data ){
                print_r( $data );
       }

 

Saida:

Array
(
   [1] => um Item
   [2] => outro Item
)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim. Mas apenas para o carregador de cookies do PHP, o navegador irá armazenar como strings:

Nome | Valor

cartShop[1] | um Item

cartShop[2] | outro Item

 

E não dá para usar "cartShop[]", tem que contar os cookies e adicionar +1 para descobrir o próximo valor.

 

Mas isso é coisa para outra gambiarra:

 

function adicionarItem($item) {    
   $next = count($_COOKIE['cartShop']) + 1;

   $cookieName = "cartShop[{$next}]";

   setcookie($cookieName, $item);
}

function pegaItems() {   
   return $_COOKIE['cartShop'];
}


if (isset($_GET['adiciona'])) {
   adicionarItem( $_GET['adiciona'] );
}

$items = pegaItems();

var_dump($items);

 

Infelizmente ele não carrega numa mesma página os cookies adicionados nela, é preciso recarregar a página.

Compartilhar este post


Link para o post
Compartilhar em outros sites

exatamente .. agora você acertou na lata

o PHP não vai poder ler os COOKIES

igual ele acha o proximo índice no array[], como por exemplo

<?php
   $Array = Array();
   $Array[] = 1;
   $Array[] = 2;
   $Array[] = 3;
   $Array[] = 4;
   echo '<pre>';
   var_dump( $Array );

 

Em qualquer ponto da applicação, nessa mesma pagina, você pode addicionar, e addicionar e addicionar inumeros índices

nesse array, mais não no COOKIE, oque é exatamente oque você falou. se você sabe que 'cartShop' te devolve um array

so fazer um count, é achar o proximo ..

 

mais mesmo assim, agente tá discutindo coisas ínuteis aqui

as dicas foram DADAS para que o autor do tópico se Oriente nelas .. ou siga oque ele achar melhor =) :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu a ajuda de todos, e utilizei um outro modo, eu apenas salvei no banco, determinei um valor para cada cookie salvo e mando ele procurar por esse valor.

 

mas obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra que cara ?

Um valor pra cada cookie ?

Você não presisa gravar nada mais no Cookie depois do ID de Usuario

Cria a tabela, coloca um campo id_usuario, etc ..

E So procura os registros por esse ID.. Acabou o problema

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, eu fiz assim, para listar quais os produtos que cada usuário poe, mesmo não estando logado, ele possui esse id.

 

ai eu salvo, e se estiver logado, eu só atualizo todos os ids que tem no banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.