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.