Jump to content
AnaAlves

[Resolvido] Carrinho de compras -

Recommended Posts

AnaAlves

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

Share this post


Link to post
Share on other sites
de3v0

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

Share this post


Link to post
Share on other sites
de3v0

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

Share this post


Link to post
Share on other sites
AnaAlves

nao, nao consigo fazer isso :s

dessa maneira nao dá, por assim mostra sempre que o produto que corresponde ao codproduto 1 ou seja o primeiro da base de dados..

Share this post


Link to post
Share on other sites
HappyHippyHippo

suponho que tens a inicialização/restauro da sessão, certo ? é que em nenhum parte do teu código isso é apresentado


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
de3v0

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

Share this post


Link to post
Share on other sites
AnaAlves

sim HappyHippyHippo, tinha o restaura da sessão e obrigada pessoal mas já consegui resolver :D

Edited by AnaAlves

Share this post


Link to post
Share on other sites

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.