O problema :
estou tentando reproduzir um carrinho de compras em php, me deparei com esse problema…
na página do carrinho tenho esse código:
<?php
session_start();
require 'conn.php';
$id_produto = addslashes($_GET['id']);
if (!isset($_SESSION['carrinho'])) {
$_SESSION['carrinho'] = array();
}
$read_produto = mysqli_query($conn,"SELECT * FROM produtos WHERE produto_id = $id_produto ORDER BY produto_nome ASC" );
if (mysqli_num_rows($read_produto)) {
foreach ($read_produto as $read_produto_view) ;
if ($_SESSION['carrinho'][$id_produto]){ <<<< linha do erro;
$_SESSION['carrinho'][$id_produto]+=1;
}else{
$_SESSION['carrinho'][$id_produto]=1;
}
}
print_r($_SESSION['carrinho']);
?>
retorna esse erro :
Notice: Undefined offset: 3 in C:\xampp\htdocs\shop\carrinho.php on line 13
Observação: o número ‘3’ do erro é o valor que passei via get para a página;
além do erro, ele não mantém o array ativo quando navego para outras páginas e tento adicionar outros produtos, ele “cria” outra array e adiciona!
Essa linha…
if ($_SESSION['carrinho'][$id_produto]){
Veja se resolve assim…
if (isset($_SESSION['carrinho'][$id_produto])){
Obs: esse foreach é desnecessário já que você apenas declarou e terminou com ; no final, seria melhor comentá-lo afinal você não precisa percorrer uma lista de produtos vindos do banco, pois você já comparou um único produto no sql e pela lógica é apenas um produto que ela retorna…
Ja tentei, o erro some mas continua sem “salvar” a session…
Você está usando esse trecho em outras páginas?
if (!isset($_SESSION['carrinho'])) {
$_SESSION['carrinho'] = array();
}
Se sim, tome cuidado para não estar assim em algum ponto do código…
if (isset($_SESSION['carrinho'])) {
$_SESSION['carrinho'] = array();
}
É uma diferença sutil mas importante… pelo que você relata em algum ponto você está “limpando” o carrinho…
Também interessante ver se essa linha retorna maior que zero…
if (mysqli_num_rows($read_produto)) {
Caso o contrário nunca irá entrar na sessão e adicionar o item no carrinho…
so uso o :
if (!isset($_SESSION['carrinho'])) {
$_SESSION['carrinho'] = array();
}
nessa página, e o if retorna true se não nem leria esta linha… eu acho…
Para os que acompanharem, o problema em meu código era que meus COOKIES estavam bloqueados, não permitindo salvar a session!!