gremio10 14 Denunciar post Postado Maio 12, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Maio 13, 2011 :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
mangakah 217 Denunciar post Postado Maio 13, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Maio 13, 2011 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
André D. Molin 15 Denunciar post Postado Maio 13, 2011 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
mangakah 217 Denunciar post Postado Maio 13, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Maio 13, 2011 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
mangakah 217 Denunciar post Postado Maio 13, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Maio 13, 2011 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
mangakah 217 Denunciar post Postado Maio 13, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Maio 13, 2011 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
gremio10 14 Denunciar post Postado Maio 13, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Maio 13, 2011 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
gremio10 14 Denunciar post Postado Maio 13, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Maio 13, 2011 Então se ele não tiver logado, você vai simular como se ele estivese logado .. Faz um id rand pra session, e guarda =) Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Maio 13, 2011 Mas session acaba quando ele sair do site, com cookie, eu salvo para quando ele voltar. Compartilhar este post Link para o post Compartilhar em outros sites