Jump to content

[Resolvido] Carrinho de compras -


Recommended Posts

Posted (edited)

Olá,

estou com problemas no carrinho de compras do meu site .. ao adicionar um produto ele fica na tabela do carrinho mas se eu adicionar outro apenas aparece o ultima adicionado ao carrinho .. acho que o problema também pode ser do link "comprar" ... o codigo é o seguinte :

servidores_main.php

<html>
<head>
<link href="ram.css" rel="stylesheet" type="text/css" media="screen" />
<style type="text/css">
.titulo {
   font-size: 38px;
   font-style: italic;
   color: #333;
   padding: 10px;
   text-shadow: -1px -1px 0px #101010, 1px 1px 0px #505050;
 }
</style>
</head>
<body>
<?php
include "config.php"; //configurar a ligação á  BD
include "inicial3.php";

$quantidade=4;
$paginas = (isset($_GET['paginas'])) ? (int)$_GET['paginas'] : 1;
$inicio = ($quantidade * $paginas) - $quantidade;

$query = ("select * from produtos where codtipoproduto ='9' LIMIT $inicio ,$quantidade");

if ($_POST['sentido'] == ''){
$sql = ("select * from produtos where codtipoproduto ='9' order by codproduto asc LIMIT $inicio, $quantidade" );

} else if (($_POST['sentido'] == 'asc') && ($_POST['ordem'] == 'preco')){
$sql = ("select * from produtos where codtipoproduto ='9' order by preco asc LIMIT $inicio, $quantidade" );

} else if (($_POST['sentido'] == 'desc') && ($_POST['ordem'] == 'preco')){
$sql = ("select * from produtos where codtipoproduto ='9' order by preco desc LIMIT $inicio, $quantidade" );

} else if (($_POST['sentido'] == 'asc') && ($_POST['ordem'] == 'alfabeto')){
$sql = ("select * from produtos where codtipoproduto ='9' order by nomeproduto asc LIMIT $inicio, $quantidade" );

} else if (($_POST['sentido'] == 'desc') && ($_POST['ordem'] == 'alfabeto')){
$sql = ("select * from produtos where codtipoproduto ='9' order by nomeproduto desc LIMIT $inicio, $quantidade" );

} else if (($_POST['sentido'] == 'desc') && ($_POST['ordem'] == 'recente')){
$sql = ("select * from produtos where codtipoproduto ='9' order by codproduto desc LIMIT $inicio, $quantidade" );

} else if (($_POST['sentido'] == 'asc') && ($_POST['ordem'] == 'recente')){
$sql = ("select * from produtos where codtipoproduto ='9' order by codproduto asc LIMIT $inicio, $quantidade" );
}

$qr = mysql_query($sql) or die (mysql_error());
?>
<div style="position: absolute; left: 350px; top:330px;  ">
<div id="conteudo-master">
<div id="conteudo">
<div class="titulo"> Servidores </div><br>
<form action="index.php?pagina=servidores" method="post">

         <label id="textonormal">Dispor por:</label>

         <select name="ordem">
               <option value="preco">Preco</option>
<option value="alfabeto">Alfabetica</option>
<option value="recente">Disponibilizacao</option>
         </select>

         <select name="sentido">
               <option value="asc">Crescente</option>
               <option value="desc">Decrescente</option>
         </select>

         <input type="submit" name="button"  class="btnLogin" value="Filtrar"/> <br /><br />
</form>


<table cellpadding="20" cellspacing="10"  height="450px" width="800px">
<tr>
<?php
require("config.php");
$qr = mysql_query($sql);
$i = 1;
while ($lista = mysql_fetch_array($qr) or die (mysql_error())){
echo '<font color="black" bgcolor="white">';
?>
<img width="75" height="75" src="images/produtos/<?php echo $lista['imagem']; ?>" alt="<?php echo $lista['imagem']; ?>"> <?php
echo '<h2>'.$lista['nomeproduto'].'</h2> <br>';
echo  $lista['descricao'].'<br />';
echo 'Preço :' .$lista['preco'].'€ <br />';
echo '<a href="carrinho_main.php?pagina=servidores&acao=add&codproduto='.$lista['codproduto'].'">Comprar</a>';
//echo '<a href="carrinho.php?acao=add&id='.$ln['id'].'">Comprar</a>';

}
$i = 0;
$i++;
?>
</table>
<div class="url tabela" width='500px' >
<?php
$sqlTotal = "Select codproduto from produtos where codtipoproduto ='9'";
$qrTotal = mysql_query($sqlTotal) or die (mysql_error());
$numTotal = mysql_num_rows($qrTotal);
$totalPagina = ceil ( $numTotal/$quantidade);

echo "Página ";
for ($i = 1; $i <= $totalPagina; $i++) {
if ($i == $paginas){
echo $i;
}
else
{
echo "<a href=\"index.php?pagina=servidores&paginas=$i\"> $i </a>";
}
echo "</div>";
}
?>
</div>
</font>
</body>
</html>

carrinho_main.php

<?php
      include ("config.php");
 include ("inicial3.php");

     if(!isset($_SESSION['carrinho']) || ($_SESSION['carrinho']=="")){
        $_SESSION['carrinho'] = array();
     }

     //adiciona produto

     if(isset($_GET['acao'])){


        //ADICIONAR CARRINHO
        if($_GET['acao'] == 'add'){
           $codproduto = intval($_GET['codproduto']);
           if(!isset($_SESSION['carrinho'][$codproduto])){
              $_SESSION['carrinho'][$codproduto] = 1;
           }else{
              $_SESSION['carrinho'][$codproduto] += 1;
           }
        }


        //REMOVER CARRINHO
        if($_GET['acao'] == 'del'){
           $codproduto = intval($_GET['codproduto']);
           if(isset($_SESSION['carrinho'][$codproduto])){
              unset($_SESSION['carrinho'][$codproduto]);
           }
        }

        //ALTERAR QUANTIDADE
        if($_GET['acao'] == 'up'){
           if(is_array($_POST['prod'])){
              foreach($_POST['prod'] as $codproduto => $quantidade){
                 $codproduto  = intval($codproduto);
                 $quantidade = intval($quantidade);
                 if(!empty($quantidade) || $quantidade <> 0){
                    $_SESSION['carrinho'][$codproduto] = $quantidade;
                 }else{
                    unset($_SESSION['carrinho'][$codproduto]);
                 }
              }
           }
        }

     }


?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
body {margin:0px; background-color:#CCCCCC;}
#conteudo-master {width: 100% : margin:0px; padding:0px;}
#conteudo [ width:960px; display:block; margin:25px auto; padding:15px; background-color:#ebebeb; position: relative; }
#conteudo hl {font-size:18px; color:#333333; display: block; border-bottom:double 3px #999999; padding-bottom:5px;}
.menu { display:block; margin:0px; padding:5px; }
.tag{
font-size:10px;
color:#FFFFFF;
display:inline;
padding:5px;
margin: 5px;
background-color:#a6bcd7;
}
.titulo {
   font-size: 38px;
   font-style: italic;
   color: #333;
   padding: 10px;
   text-shadow: -1px -1px 0px #101010, 1px 1px 0px #505050;
 }
</style>
<title>Ram@ Informática</title>
</head>
<body>
<div style="position: absolute; left: 350px; top:350px;">
<legend class="titulo"><strong> Carrinho de Compras </strong></legend><br><br>
</div>

<table style="position: absolute; left: 350px; top:520px;  width: 500px; border:0px;" class="tabela">
   <thead>
         <tr>
           <th width="244">Produto</th>
           <th width="79">Quantidade</th>
           <th width="89">Preço</th>
           <th width="100">SubTotal</th>
           <th width="64">Remover</th>
         </tr>
   </thead>
           <form action="?acao=up" method="post">
   <tfoot>
          <tr>
           <td colspan="5"><input type="submit" value="Atualizar Carrinho" /></td>
           <tr>
           <td colspan="5"><a href="index.php">Continuar Comprando</a></td>
   </tfoot>

   <tbody>
              <?php
                    if(count($_SESSION['carrinho']) == 0){
                       echo '<tr><td colspan="5">Não há produto no carrinho</td></tr>';
                    }else{
                       require("config.php");
                       $total = 0;
                       foreach($_SESSION['carrinho'] as $codproduto => $quantidade){
                             $sql   = "SELECT *  FROM produtos WHERE codproduto= '$codproduto'";
                             $qr    = mysql_query($sql) or die(mysql_error());
                             $lista    = mysql_fetch_assoc($qr);

                             $nomeproduto  = $lista['nomeproduto'];
                             $preco = number_format($lista['preco'], 2, ',', '.');
                             $sub   = number_format($lista['preco'] * $quantidade, 2, ',', '.');

                             $total += $lista['preco'] * $quantidade;

                          echo '<tr>      
                                <td>'.$nomeproduto.'</td>
                                <td><input type="text" size="3" name="prod['.$codproduto.']" value="'.$quantidade.'" /></td>
                                <td>€ '.$preco.'</td>
                                <td>€ '.$sub.'</td>
                                <td><a href="?acao=del&codproduto='.$codproduto.'">Remove</a></td>
                             </tr>';
                       }
                          $total = number_format($total, 2, ',', '.');
                          echo '<tr>
                                   <td colspan="3"><b>Total<b></td>
                                   <td>€ '.$total.'</td>
</td>
                             </tr>';
                    }
              ?>

    </tbody>
       </form>

</table>

</body>
</html>

aguardo resposta , obrigada ...

Edited by anolsi
adicionado geshi
Posted (edited)

Para saber se ele o guarda na sessão pelo menos, podias postar o dump da sessão.

depois de adicionares o segundo produto, adiciona isto (pode ser logo no inicio do ficheiro) :

var_dump($_SESSION['carrinho']);

No inicio, em vez de teres tantos IF's, podias substituis por algo do genero :

$sentido = $_POST['sentido'];
if(empty($_POST['sentido'])){$sentido = 'asc';}

$ordem = $_POST['ordem'];
if(empty($_POST['ordem'])){$ordem = 'codproduto';}

$ordenacao = ' order by '.$ordem.' '.$sentido.' ';

$query = ("select * from produtos where codtipoproduto ='9' ".$ordenacao." LIMIT $inicio ,$quantidade");
Edited by yoda
Posted (edited)

o resultado é o mesmo ..

e obrigada pela dica dos if's 🙂

O resultado é o mesmo ? não te aparece nada com letras esquisitas, a mostrar o que cada posição do array da sessão têm ?

era fixe conseguires o dump... porque assim sabias se ele te estava a criar bem a sessao.

Mas no entanto, reparei em algo no teu cod.

//ADICIONAR CARRINHO
	 if($_GET['acao'] == 'add'){
	 $codproduto = intval($_GET['codproduto']);
	 if(!isset($_SESSION['carrinho'][$codproduto])){
		 $_SESSION['carrinho'][$codproduto] = 1;
	 }else{
		 $_SESSION['carrinho'][$codproduto] += 1;
	 }
	 }

$_SESSION['carrinho'][$codproduto] = 1; -> Isto aqui não sera mais ao contrario ? do tipo $_SESSION['carrinho'][1] = $codproduto;

Porque por exemplo, imagina que recebes um cod. de produto 3, nesta linha de codigo estas a dizer o seguinte :

o valor da posição 3 no array sessão é = a 1..

Edited by yoda
Posted (edited)

Tens de alterar aquela parte do código, para que a sessão possa guardar vários ID's, e outras infos, caso pretendas, experimenta algo do genero;

//Aqui deves ararnjar forma de listas os dados do produto para guardares esses dados na sessão, algo como SELECT * FROM produtos WHERE id = $_GET['cod_produto'] ... e gravas o resultado por exemplo na variável $produto


if ( $produto )
{
if ( !$_SESSION['carrinho'] )
{
$_SESSION['carrinho'][0]="";
}

$index = max(array_keys($_SESSION['carrinho']));

for ( $i=0; $i<=$index; $i++)
{
if ( $_SESSION['carrinho'][$i]['pid'] == $produto[0]['id'] )
{
$_SESSION['carrinho'][$i]['pqtt']++;
$novo_produto=1;
}
}

if ( !$novo_produto )
{
$_SESSION['carrinho'][$index+1]['ssid'] = session_id();
$_SESSION['carrinho'][$index+1]['pid'] = $produto[0]['id'];
$_SESSION['carrinho'][$index+1]['ptitulo'] = $produto[0]['titulo'];
$_SESSION['carrinho'][$index+1]['ppvp'] = $produto[0]['preco'];
$_SESSION['carrinho'][$index+1]['pqtt']=1;
}
}

Resumidamente o que o codigo faz é, ele ve se já existe a sessão carrinho criada. se não, ele cria-a. depois, ele ve se o produto já existe na sessão, se existir, ele adiciona mais um a quantidade, se não existir, ele cria-o na sessão.

Depois, para correres a sessão do carrinho tens de fazer qualquer coisa como:

for ($i=0; $i<=max(array_keys($_SESSION['carrinho'])); $i++)
Edited by de3v0

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.