Seguinte, com base no tutorial do imasters de como criar um carrinho de compras utilizando sessions e array desenvolvi um sistema de carrinho de compras, porém o meu carrinho utiliza o banco de dados para listar os produtos, até aí tudo bem, o problema é:
A empresa tem muitos produtos, e quando estou utilizando o carrinho, nem todos os produtos que eu adiciono vão para o carrinho, o que pode ser?
Abaixo os códigos que estou trabalhando:
index.php
<? //INICIALIZA A SESSÃO session_start(); //Faz requerimento da conexão com o banco require("connect.php"); //Numero de colunas $total = 2; ?> <html> <head> <title><?=$titulo;?></title> <style type="text/css"> body { margin-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; } .css { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; font-style: normal; color: #000000; border: 1px dotted #666666; } .style1 {font-family: Verdana, Arial, Helvetica, sans-serif} body,td,th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; color: #000000; } </style> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head> <body> <table width="770" border="0" cellspacing="0" cellpadding="0"> <tr> <td><table width="95%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td align='center'><font face='Verdana' size='4'><b><?=$titulo;?></b></font></td> </tr> </table> <br> <table width="95%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td><font face='Verdana' size='2'>Confira abaixo, os produtos disponíveis no site:</font> </td> </tr> </table> <br> <form action="carrinho.php" method="post" name="frmcarrinho"> <input type="hidden" name="opc_efetivar" value="1"> <table width="90%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <? $sql="select * from produtos order by COD ASC"; $res= mysql_query($sql); $i=1; while($produto=mysql_fetch_array($res)){ $i++; $produto[$i]['CODIGO'] = $produto['cod']; $produto[$i]['DESC'] = $produto['descricao']; $produto[$i]['LINHA'] = $produto['linha']; $produto[$i]['PRECO'] = $produto['preco']; $indice = $produto[$i]; //VERIFICA if($total == $atual) { echo "</tr><tr>"; $atual = 0; } ?> <td width="14%" height="100"><div align="center"><img src="<? echo $thumb_index.$dir.$produto['foto']; ?>.jpg" border="1"></div></td> <td width="36%"> <table width="94%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td><font face='Verdana' size='2'><? echo $produto['cod']; ?> - </font><font face='Verdana' size='1'><? echo $produto['descricao']; ?></font></td> </tr> <tr> <td><font face='Verdana' size='1'><strong>R$ <? echo $produto['preco']; ?></strong></font></td> </tr> <tr> <td><font face='Verdana' size='1'>Tamanhos: <select name="txtprod[<? echo $indice;?>][TAM]" class="css"> <? $sql_tamanho="select * from tamanhos where tam=".$produto['tam']; $res_tamanho= mysql_query($sql_tamanho); while($tamanhos=mysql_fetch_array($res_tamanho)){ $tam = $tamanhos['numeracoes']; ?> <option value="<?=$tam;?>"><?=$tam;?></option> <? } ?></select></font> </td> </tr> <tr> <td> <input type="hidden" name="txtprod[<? echo $indice;?>][CODIGO]" value="<? echo $produto['cod']; ?>"> <input type="hidden" name="txtprod[<? echo $indice;?>][DESC]" value="<? echo $produto['descricao']; ?>"> <input type="hidden" name="txtprod[<? echo $indice;?>][LINHA]" value="<? echo $produto['linha']; ?>"> <input type="hidden" name="txtprod[<? echo $indice;?>][PRECO]" value="<? echo $produto['preco']; ?>"> <input type="hidden" name="tamanho" value="<? echo $produto['tam']; ?>"> <span class="style1">Quantidade:</span> <input name="txtprod[<? echo $indice;?>][QTDE]" type="text" class="css" size="3" maxlength="3"></td> </tr> <tr> <td><input name="image" type="image" onClick="javascript: document.forms[0].submit();" src="carrinho.gif" width="134" height="16" border="0"></td> </tr> </table></td> <? //SOMA 1 A VARIÁVEL CONTROLADORA $atual++; }//FECHA WHILE ?> </tr> </table> </form></td> </tr> </table> </body> </html>
carrinho.php
<? //INICIALIZA A SESSÃO session_start(); require("connect.php"); //VERIFICA SE TEM PRODUTO NO CARRINHO PARA PUXAR if(count($_SESSION[cesta]) > 0) { //PEGA A CHAVE DO ARRAY $chave = array_keys($_SESSION[cesta]); //PEGA OS DADOS DA SESSÃO for($i=0; $i<sizeof($chave); $i++) { //ÍNDICE $indice = $chave[$i]; //ATRIBUI $cesta[$indice]['DESC'] = $_SESSION[cesta][$indice]['DESC']; $cesta[$indice]['LINHA'] = $_SESSION[cesta][$indice]['LINHA']; $cesta[$indice]['PRECO'] = $_SESSION[cesta][$indice]['PRECO']; $cesta[$indice]['QTDE'] = $_SESSION[cesta][$indice]['QTDE']; $cesta[$indice]['TAM'] = $_SESSION[cesta][$indice]['TAM']; }//FECHA FOR }//FECHA IF //VERIFICA SE A OPÇÃO ATUALIZAR FOI SELECIONADA if($_POST[opc_atualizar]) { //RECEBE OS PRODUTOS CHECADOS PARA ATUALIZAÇÃO $v_atualiza = $_POST[a_prod]; //PEGA A CHAVE DO ARRAY $chave = array_keys($v_atualiza); //EXIBE for($i=0; $i<sizeof($chave); $i++) { //PEGA O INDICE DO PRODUTO $indice = $chave[$i]; //ALTERA A QUANTIDADE DO PRODUTO SELECIONADO $_SESSION[cesta][$indice]['QTDE'] = $v_atualiza[$indice]['QTDE']; }//FECHA FOR }//FECHA IF //VERIFICA SE A OPÇÃO EXCLUIR FOI SELECIONADA elseif($_POST[opc_excluir]) { //RECEBE OS PRODUTOS CHECADOS PARA EXCLUSÃO $excluir = $_POST[check]; //EXIBE for($i=0; $i<sizeof($excluir); $i++) { //PEGA O INDICE DO PRODUTO $indice = $excluir[$i]; //DESTRÓI A VARIÁVEL ESPECIFICADA unset($_SESSION[cesta][$indice]); }//FECHA FOR }//FECHA IF //RECEBE O PEDIDO DO USUÁRIO elseif($_POST[opc_efetivar]) { //RECEBE AS VARIÁVEIS $v_prod = $_POST[txtprod]; //PEGA A CHAVE DO ARRAY $chave = array_keys($v_prod); //EXIBE for($i=0; $i<sizeof($chave); $i++) { $indice = $chave[$i]; //VERIFICA if(!empty($v_prod[$indice][QTDE]) ) { //GRAVA NO ARRAY CESTA $cesta[$indice]['CODIGO'] = $v_prod[$indice]['CODIGO']; $cesta[$indice]['DESC'] = $v_prod[$indice]['DESC']; $cesta[$indice]['LINHA'] = $v_prod[$indice]['LINHA']; $cesta[$indice]['PRECO'] = $v_prod[$indice]['PRECO']; $cesta[$indice]['QTDE'] = $v_prod[$indice]['QTDE']; $cesta[$indice]['TAM'] = $v_prod[$indice]['TAM']; }//FECHA IF }//FECHA FOR //GRAVA NA SESSÃO $_SESSION[cesta] = $cesta; }//FECHA ELSE ?> <html> <head> <title><?=$titulo;?></title> <style type="text/css"> <!-- body { margin-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; background-color: #FFFFFF; } .style2 { color: #000000; font-weight: bold; } .style5 {color: #FFFFFF; font-weight: bold; } body,td,th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; color: #000000; } --> </style> <script language="JavaScript"> <!-- function enviar(opcao) { //OPÇÃO EXCLUIR SELECIONADA if(opcao == 'E') { document.forms[0].opc_excluir.value = 1; document.forms[0].submit(); }//FECHA IF //OPÇÃO ATUALIZAR SELECIONADA if(opcao == 'A') { document.forms[0].opc_atualizar.value = 1; document.forms[0].submit(); }//FECHA IF //OPÇÃO FINALIZAR SELECIONADA if(opcao == 'F') { document.forms[0].opc_finalizar.value = 1; document.forms[0].action = "finalizar.php"; document.forms[0].submit(); }//FECHA IF }//FECHA FUNCTION //--> </script> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head> <body> <table width="773" border="0" cellspacing="0" cellpadding="0"> <tr> <td><table width="95%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td align='center'><font face='Arial' size='4'><b><?=$titulo;?></b></font></td> </tr> </table> <br> <table width="95%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td><font size="2" face="Arial">Carrinho de Compras: </font></td> </tr> </table> <? //EXIBE O CARRINHO SE TIVER PRODUTOS if(count($_SESSION[cesta]) > 0) { ?> <form name="frmCarrinho" method="post"> <input type="hidden" name="opc_excluir"> <input type="hidden" name="opc_atualizar"> <input type="hidden" name="opc_finalizar"> <table width="95%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr bgcolor="#CCCCCC"> <td width="3%"> </td> <td width="4%"><span class="style2">Qtde</span></td> <td width="44%"><span class="style2">Produto</span></td> <td width="20%">Tamanho</td> <td width="12%"><span class="style2">Valor</span></td> <td width="17%"><span class="style2">Subtotal</span></td> </tr> <? //PEGA A CHAVE $chave_cesta = @array_keys($_SESSION[cesta]); //EXIBE OS PRODUTOS DA CESTA for($i=0; $i<sizeof($chave_cesta); $i++) { $indice = $chave_cesta[$i]; //SUBTOTAIS DE CADA PRODUTO $subtotal = $_SESSION[cesta][$indice]['QTDE'] * ereg_replace(",",".",$_SESSION[cesta][$indice]['PRECO']); //TOTAL GERAL $total_compras += $subtotal; ?> <tr> <td height="25"><input name="check[]" type="checkbox" value="<? echo $indice; ?>"></td> <td height="25"><font face='Arial' size='2'> <input type="text" name="a_prod[<? echo $indice; ?>]['QTDE']" value="<? echo $_SESSION[cesta][$indice]['QTDE']; ?>" size="3"></font></td> <td height="25"><font face='Arial' size='2'><? echo $_SESSION[cesta][$indice]['DESC']; ?> - <? echo $_SESSION[cesta][$indice]['LINHA']; ?></font></td> <td><font face='Arial' size='2'><? echo $_SESSION[cesta][$indice]['TAM']; ?> </font></td> <td height="25"><font face='Arial' size='2'>R$ <? echo $_SESSION[cesta][$indice]['PRECO']; ?></font></td> <td width="17%" height="25"><font face='Arial' size='2'> R$ <? echo number_format($subtotal,2,',','.'); ?></font></td> </tr> <? }//FECHA FOR ?> <tr> <td height="25" colspan="4"> <input type="image" name="btnExcluir" src="excluir.gif" onClick="enviar('E');"> <input type="image" name="btnAtualiza" src="atualizar.gif" onClick="enviar('A');"></td> <td height="25" bgcolor="#FF0000"><span class="style5"> Total à pagar: </span></td> <td height="25" bgcolor="#FFF0F0" class="style2"> R$ <b><? echo number_format($total_compras,2,',','.'); ?></b></td> </tr> <tr> <td height="25" colspan="4"> </td> <td height="40" colspan="2"><div align="center"> <input type="image" name="btnFinaliza" src="finaliza.gif" onClick="enviar('F');"></div></td> </tr> </table> </form> <? }//FECHA IF(count) else { ?><br> <table width="90%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td align='center'><font face='Arial' size='2' color="#006666"><b>Desculpe, mas no momento você não possui nenhumm produto.</b></td> </tr> </table><br> <? }//FECHA ELSE (count)?> <table width="70%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td align='center'><font face='Arial' size='2'><a href="index.php"><< Voltar </a></font></td> </tr> </table> </td> </tr> </table> </body> </html>
Desde já agradeço pela atenção de todos que tiveram o trabalho de ler meu post.