Array
(
)

Perdendo variável de sessão

PHP
André Maretti
   - 25 jul 2013

Boa noite pessoal.
Estou desenvolvendo um site de comercio eletrônico.
Na verdade não é o primeiro. E esse projeto é relativamente simples.
O endereço é: http://www.plebit.net/plebitStore/
Acontece que para fazer o carrinho de compras eu utilizo uma variável de sessão para armazenar os produtos que estão sendo comprados e no final jogar essas informações para um banco de dados.
Acontece que durante a navegação das páginas, estou perdendo os valores da minha variável de sessão.
Alguém já passou por problema semelhante? Pode me ajudar?
Segue o fonte do carrinho:
#Código
<script language="javascript">
<!--
function atualiza() {
document.forms[0].action = "index.php?pg=atualiza_carrinho";
document.forms[0].enctype="multipart/form-data";
document.forms[0].submit();
}
</script>

<?php include_once("leftSidebar.php");
session_start();
if(isset($_GET["codigo"]) == true){
$codigo = $_GET["codigo"];
$sql_produto = mysql_query("SELECT * FROM produtos WHERE codigo=".$codigo);
$dados_produto = mysql_fetch_array($sql_produto);
if(isset($_SESSION["carrinho"])== true){
$chaves = array_keys($_SESSION["carrinho"]);
$tamanho = count($chaves);
$_SESSION["loja"] = count($chaves);
}else{
$tamanho = 0;
}
$_SESSION["carrinho"][$tamanho]["codigo"] = $codigo;
$_SESSION["carrinho"][$tamanho]["qtd"] = 1;
$_SESSION["carrinho"][$tamanho]["codigo_cat"] = $dados_produto["codigo_cat"];
$_SESSION["carrinho"][$tamanho]["codigo_subcat"] = $dados_produto["codigo_subcat"];
$_SESSION["carrinho"][$tamanho]["produto"] = $dados_produto["produto"];
$_SESSION["carrinho"][$tamanho]["modelo"] = $dados_produto["modelo"];
$_SESSION["carrinho"][$tamanho]["desconto"] = $dados_produto["desconto"];
$_SESSION["carrinho"][$tamanho]["valor"] = $dados_produto["preco"];
$_SESSION["carrinho"][$tamanho]["peso"] = $dados_produto["peso"];
$_SESSION["carrinho"][$tamanho]["comprimento"] = $dados_produto["comprimento"];
$_SESSION["carrinho"][$tamanho]["altura"] = $dados_produto["altura"];
$_SESSION["carrinho"][$tamanho]["largura"] = $dados_produto["largura"];
$_SESSION["carrinho"][$tamanho]["adicionais"] = $dados_produto["adicionais"];
}
?>
<!-- Begin Content -->
<div id="content">
<!-- Begin Products -->
<div id="produtos">
<h2>Carrinho<span class="title-bottom"> </span></h2>
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" style="color:#FFF">
<tr>
<td colspan="7"> </td>
</tr>
<tr>
<td width="6%"> </td>
<td width="6%">Ação</td>
<td width="3%"> Qtd.</td>
<td width="53%"> Produto</td>
<td width="15%" align="center" valign="top"> Valor Unitário</td>
<td width="23%" colspan="2" align="right" valign="top"> Valor Subtotal </td>
</tr>
<form action="index.php?pg=excluir_produto_carrinho" method="post" enctype="multipart/form-data">
<?PHP
$total_geral = 0;
$chaves = array_keys($_SESSION["carrinho"]);
for($i=0 ; $i < sizeof($chaves); $i++){
$indice = $chaves[$i];
$valor_total = $_SESSION["carrinho"][$indice]["qtd"] * $_SESSION["carrinho"][$indice]["valor"];
$valor_Igor = $_SESSION["carrinho"][$indice]["qtd"];
$total_geral = $total_geral + $valor_total;
$totalSedex = $total_geral + $_SESSION["frete_sedex"];
$totalPac = $total_geral + $_SESSION["frete_pac"];
?>

<tr class="title-bottom">
<td> <input name="excluir[]" id="excluir[]" type="checkbox" value="<?PHP echo $indice; ?>" /> </td>
<td class="qtd"><input type="text" value="<? echo($_SESSION["carrinho"][$indice]["qtd"]); ?>" size="4" maxlength="4" name="a_prod[<?PHP echo($indice); ?>][qtd]" /></td>
<td class="produto"> <? echo($_SESSION["carrinho"][$indice]["produto"]); ?> </td>
<td align="right" valign="top" class="valor"><? echo 'R$ '.(number_format($_SESSION["carrinho"][$indice]["valor"],2,",",".")); ?> </td>
<td colspan="2" align="right" valign="top" class="valor"><? echo 'R$ '.(number_format($valor_total,2,",",".")); ?> </td>
</tr>
<?PHP
}
?>

<tr>
<td><input type="submit" name="button" id="button" value="Excluir"></td>
<td> </td>
<td colspan="5"><label>
<input type="button" name="atualizar" id="atualizar" value="Atualizar carrinho" onClick="atualiza();"/>
</label></td>
</tr>
</form>
<tr>
<td> </td>
<td> </td>
<td colspan="5" align="right" valign="top">
Valor Total: <?PHP echo 'R$ '.number_format($total_geral,2,",","."); ?> 
</td>
</tr>
<tr>
<td colspan="7"><p></p></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td colspan="2">
<form id="frete" name="frete" method="post" action="index.php?pg=calcula_frete">
<label>
<span> Confirme o CEP: </span>
<input type="text" name="confirmar_cep" id="confirmar-cep" value="<?PHP echo $dados_cep['cep']; ?>" />
</label>
<label>
<input type="submit" name="calcular_frete" id="calcular_frete" value="Calcular Frete" />
</label>
</form></td>
<td colspan="3" align="right" valign="top"> </td>
</tr>
<tr>
<td>
<tr>
<tr>
<td>
<td colspan="6" align="right" valign="top">
<form id="formFrete" name="formFrete" method="post" action="">
<?PHP if(isset($_SESSION["frete_sedex"]) == true && $totalSedex != "" && $totalPac != ""){
echo '<input name="valorFrete" type="radio" value="sedex"> <span>Frete Sedex: </span> R$ '.number_format($_SESSION["frete_sedex"],2,",",".").' ';
}
?>
<tr>
<td>
</td>
<tr>
<td>
</tr>
<tr>
<td colspan="7" align="right" valign="top">
<?php
if(isset($_SESSION["frete_pac"]) == true && $totalSedex != "" && $totalPac != ""){
echo '<input name="valorFrete" type="radio" value="pac"> <span>Frete PAC: </span> R$ '.number_format($_SESSION["frete_pac"],2,",",".").'
 </td>
</tr>
<tr>
<td colspan="6"><p></p></td>
</tr>';
}
?>
</form>
<tr>
<td colspan="7" align="right" valign="top">
<?php
if(isset($_SESSION["frete_sedex"]) == true && $totalSedex != ""){
echo 'Total + Sedex: R$ '.number_format($totalSedex,2,",",".").' ';
}
?>
</td>
</tr>
<tr>
<td colspan="7" align="right" valign="top">
<?php
if(isset($_SESSION["frete_pac"]) == true && $totalPac != ""){
echo 'Total + PAC: R$ '.number_format($totalPac,2,",",".").' ';
}
?>
</td>
</tr>
<tr>
<td colspan="7"><h2></h2></td>
</tr>
<tr>
<td colspan="4" align="left" valign="top"> <a href="index.php?pg=home"><img src="css/images/botao_continuar_comprando.png" width="184" height="32"/></a></td>
<td colspan="3" align="right" valign="top">
<?php if($total_geral != 0){ ?>
 <img src="css/images/botao_proximo.png" width="142" height="43" onClick="javascript:if(document.getElementById('formFrete')[0].checked == true){window.location.href='index.php?pg=login_compra&tipoFrete=Sedex&valorFrete=<?php echo $totalSedex; ?>';}else{window.location.href='index.php?pg=login_compra&tipoFrete=PAC&valorFrete=<?php echo $totalPac; ?>';}"/>
<?php } ?>
</td>
</tr>
</table>
</div>
<!-- End Products -->
</div>
<!-- End Content -->

William (devwilliam)
   - 26 jul 2013

Colega naveguei no site e até encontrei uns erros, mas fiquei na dúvida se eram por ainda estar em construção ou por problemas com as SESSION.

Em que ponto ocorre a perda de valores?

André Maretti
   - 26 jul 2013

Na verdade em todo lugar que se usa variável de sessão os dados são perdidos durante a navegação entre as páginas.

Se você comprar um produtos, e depois comprar o segundo, ou o terceiro... em um determinado momento ele perde os dados q estavam no carrinho.

(O script do código do carrinho está acima neste post)

Mas agora surgiu um detalhe importante, e estranho.. rs.. Acabei de fazer uns testes em outro computador com Internet Explorer 10 e não apresentou problemas.

Vou fazer mais testes aqui.. e se o problema persistir ou eu encontrar alguma lógica nisso eu volto a escrever.

Obrigado.

William (devwilliam)
   - 26 jul 2013

Qualquer novidade poste por gentileza, realmente é uma situação diferente!!

Enquanto isso vou estudando esse caso por aqui...

William (devwilliam)
   - 26 jul 2013

Colega neste site, tem umas dicas bem interessantes sobre erros comuns que ocorrem com a SESSION, um dos tópicos fala sobre perda de dados!!
http://henriquebarcelos.in/blog/2011/11/20/sessoes-em-php-erros-comuns/

André Maretti
   - 26 jul 2013

Opa.. obrigado.

Vou ler e ver se há algo relacionado.

André Maretti
   - 26 jul 2013

Opa.. obrigado.

Vou ler e ver se há algo relacionado.