Jump to content
fteixeira1993

[Resolvido] [PHP] Total e Subtotal do Carrinho de compras

Recommended Posts

fteixeira1993

Olá, malta do p@p :) .

Venho solicitar a vossa ajuda porque neste momento já estou a fritar e já não consigo raciocinar mais para acertar este problema do total e do subtotal -.-, aguardo concelhos/dicas/ajuda.

Então o problema é o seguinte, depois de adicionar um produto ao carrinho ele faz a soma do total e subtotal normalmente tudo às mil maravilhas o mesmo acontece quando reduzo a quantidade do produto mas quando removo o produto e adiciono outro o total aumenta como se ainda tivesse o produto removido do carrinho, abaixo deixo todo o ficheiro do carrinho.php

<?php
session_start();
include('includes/db_config_local.php');

$page = './?show=cesta';

if(isset($_GET['add'])){
 $qty = mysql_query('SELECT Stock FROM stock_tenis WHERE TID='.mysql_real_escape_string((int)$_GET['add'])) or die(mysql_error());

 while($qty_row = mysql_fetch_assoc($qty)){
  if($qty_row['Stock']!=$_SESSION['car_'.(int)$_GET['add']]){
   if($_SESSION['car_'.$_GET['add']] < $qty_row['Stock']){
 $_SESSION['car_'.$_GET['add']]+='1';
   }
  }
 }

 header('Location: '.$page);
}
if(isset($_GET['remove'])){
 $_SESSION['car_'.$_GET['remove']]--;
 header('Location: '.$page);
}

if(isset($_GET['delete'])){
 $_SESSION['car_'.$_GET['delete']]='0';
 header('Location: '.$page);
}
//mostrar todos os tenis
function tenis(){
 if(!isset($begin)){
  $begin = 0;
 }

 $query = "SELECT COUNT(*) FROM stock_tenis GROUP BY TID";
 $busca = mysql_query($query) or die(mysql_error());
 $resultado = mysql_num_rows($busca);

 $pag = $resultado/5;

 $query = "SELECT genero.*, stock_tenis.*, modelo_tenis.* FROM genero, stock_tenis, modelo_tenis WHERE stock_tenis.Modelo=modelo_tenis.Modelo AND stock_tenis.Genero=genero.IDGen";
 $busca = mysql_query($query) or die(mysql_error());
 $resultado = mysql_num_rows($busca);

 echo '<table style="border: 1px solid black; border-radius: 5px 5px 5px 5px;margin: auto; margin-top: 5px; margin-bottom: 5px;">
  <tr>
   <td colspan="2">
 <p style="font-size: 15px">Modelo</p>
   </td>
   <td>
 <p style="font-size: 15px">Genero</p>
   </td>
   <td>
 <p style="font-size: 15px">Tamanho</p>
   </td>
   <td>
 <p style="font-size: 15px">Preço</p>
   </td>
   <td>
 <p style="font-size: 15px">Acção</p>
   </td>
  </tr>';

 while($tenis = mysql_fetch_assoc($busca)){
  echo '<tr>
   <td>
 <img src="'.$tenis['vista_dir'].'" width="150px" />
   </td>
   <td>
 <p style="font-size: 15px">'.$tenis['Descricao'].'</p>
   </td>
   <td>
 <p style="font-size: 15px">'.$tenis['Gen'].'</p>
   </td>
   <td>
 <p style="font-size: 15px">'.$tenis['Tamanho'].'</p>
   </td>
   <td>
 <p style="font-size: 15px">'.$tenis['Preco_Cli'].'</p>
   </td>
   <td>
 <p style="font-size: 15px">
  <a href="car.php?add='.$tenis['TID'].'">Adicionar</a>
 </p>
   </td>
  </tr>';
 }

 echo '</table>';
}
//mostrar tenis por genero
function produtos($genero){
 $query = "SELECT stock_tenis.*, modelo_tenis.*, genero.* FROM stock_tenis, genero, modelo_tenis WHERE stock_tenis.Genero=genero.IDGen AND stock_tenis.Modelo=modelo_tenis.Modelo AND genero.Gen='".$genero."' GROUP BY modelo_tenis.Descricao";
 $busca = mysql_query($query);
 $resultado = mysql_num_rows($busca);

 if($resultado > 0){
  echo '<table style="width: 500px; border: 1px solid black; border-radius: 5px 5px 5px 5px;margin: auto; margin-top: 5px; margin-bottom: 5px;">
   <tr>
 <td colspan="2">
  <p style="font-size: 15px">Modelo</p>
 </td>
 <td>
  <p style="font-size: 15px">Preço</p>
 </td>
   </tr>';

  while($produtos=mysql_fetch_assoc($busca)){
   echo '<tr>
 <td>
  <img src="'.$produtos['vista_dir'].'" width="150px" />
 </td>
 <td>
  <p style="font-size: 15px">'.$produtos['Descricao'].'</p>
 </td>
 <td>
  <p style="font-size: 15px">'.$produtos['Preco_Cli'].'</p>
 </td>';
  }
 }
}
//carrinho de compras
function carro(){
 $total=0;
 $sub=0;

 echo '<table style="width: 75%; border-collapse:collapse; border: 1px solid black; margin: auto; margin-top: 5px; padding: 0px; background-color: #E6E6E6;">
  <tr style="border: 1px solid black;">
   <td style="background-color: #CCCCCC"; border:1px solid black;>
 <p style="font-size: 15px">Modelo</p>
   </td>
   <td style="background-color: #CCCCCC"; border:1px solid black;>
 <p style="font-size: 15px">Tamanho</p>
   </td>
   <td style="background-color: #CCCCCC"; border:1px solid black;>
 <p style="font-size: 15px">Genero</p>
   </td>
   <td style="background-color: #CCCCCC"; border:1px solid black;>
 <p style="font-size: 15px">Quantidade</p>
   </td>
   <td style="background-color: #CCCCCC"; border:1px solid black;>
 <p style="font-size: 15px">Preço/uni</p>
   </td>
   <td style="background-color: #CCCCCC"; border:1px solid black;>
 <p style="font-size: 15px">Sub-total</p>
   </td>
   <td style="background-color: #CCCCCC"; border:1px solid black;>
   </td>
  </tr>';

 foreach($_SESSION as $name => $value){
  if($value>0){
   if(substr($name, 0, 4) == 'car_'){
 $id = substr($name, 4, (strlen($name)-4));

 $query = "SELECT stock_tenis.*, modelo_tenis.*, genero.* FROM stock_tenis, modelo_tenis, genero WHERE stock_tenis.TID = ".mysql_real_escape_string((int)$id)." AND stock_tenis.Genero=genero.IDGen AND stock_tenis.Modelo=modelo_tenis.Modelo";
 $busca = mysql_query($query);
 $resultado = mysql_num_rows($busca);

 while($get_row = mysql_fetch_assoc($busca)){
  $sub = $get_row['Preco_Cli'] * $value;

  echo '<tr style="border: 1px solid black;">
   <td style="border: 1px solid black;">
    <p style="font-size: 15px">'.$get_row['Descricao'].'</p>
   </td>
   <td style="border: 1px solid black;">
    <p style="font-size: 15px">'.$get_row['Tamanho'].'</p>
   </td>
   <td style="border: 1px solid black;">
    <p style="font-size: 15px">'.$get_row['Gen'].'</p>
   </td>
   <td style="border: 1px solid black;">
    <p style="font-size: 15px">'.$value.' <a href="car.php?remove='.$id.'">[ - ]</a> <a href="car.php?add='.$id.'">[ + ]</a></p>
   </td>
   <td style="border: 1px solid black;">
    <p style="font-size: 15px">'.number_format($get_row['Preco_Cli'], 2).'€</p>
   </td>
   <td style="border: 1px solid black;">
    <p style="font-size: 15px">'.number_format($sub, 2).'€</p>
   </td>
   <td style="border: 1px solid black;">
    <p style="font-size: 15px"><a href="car.php?delete='.$id.'">[Remove]</a></p>
   </td>
  </tr>';
 }
   }
  }
  $total+=$sub;
 }
 if($total==0){
  echo '<tr style="border: 1px solid black;">
   <td colspan="7">
 <p style="font-size: 15px">De momento o carro encontra-se vazio!</p>
   </td>
  </tr>';
 }else{
  //submeter para a base de dados
 }

 echo '<tr style="border: 1px solid black;">
  <td colspan="4" style="background-color: #CCCCCC";">
  </td>
  <td style="background-color: #CCCCCC";">
   <p style="font-size: 15px">Total:</p>
  </td>
  <td style="background-color: #CCCCCC";">
   <p style="font-size: 15px">'.number_format($total, 2).' €</p>
  </td>
  <td style="background-color: #CCCCCC";">
   <input type="button" value="Pagar" />
  </td>
 </tr>';
}

echo '</table>';
?>

fica aqui o link de testes para poderem averiguar.

Aguardando resposta,

fteixeira1993

Share this post


Link to post
Share on other sites
taviroquai

Viva,

<?php
foreach($_SESSION as $name => $value){
  if($value>0){
if(substr($name, 0, 4) == 'car_'){
   // bla bla...
}
  }
}

Esse carrinho de compras é manhoso...

Apaga esse código todo :cheesygrin:

Porque simplesmente não guardas os items assim (atenção que isto foi escrito á pressa...):

<?php
// inicializar
if (!isset($_SESSION['cart_items'])) $_SESSION['cart_items'] = array();

// Primeiro as operações do utilizador
// adicionar
$_SESSION['cart_items'][] = $id_produto;

// remover
if (($key = array_search($id_produto, $_SESSION['cart_items'])) !== false) unset($_SESSION['cart_items'][$key]);

Depois de feitas as operações do utilizador, cozinhas o OUTPUT

// Só depois, calcular os totais...
// fazer a query para obter TODOS items
$ids = implode(',', $_SESSION['cart_items']);
$sql = "SELECT bla,bla,bla FROM bla,bla,bla WHERE id IN ($ids)"
// fazer a query e obter a lista de items
$lista = mysql_query($sql) or die(mysql_error());
// Agora sim, um foreach para somar... se bem que com SQL também podias obter os totais...
$total = 0;
while ($produto = mysql_fetch_assoc($lista)) {
$total += $producto['preco']*$quantidade; // pois... falta-te guardares a quantidade...
}

Até aqui não sabes em que formato o utilizador quer os dados... se for HTML, cozinhas o HTML... (se fosse JSON, fazias include de outro ficheiro para cozinhar o JSON)

<!--mostrar o HTML-->
<html><head></head><body>
<h1>Carrinho</h1>
<table>
<?php while ($produto = mysql_fetch_assoc($lista)) { ?>
<tr><td><?=$producto['nome']?></td><td><?=$produto['preco']?></td></tr>
<?php } ?>
</table>
<p>Total: <?=$total?></p>
</body>
</html>

Edited by taviroquai

Share this post


Link to post
Share on other sites
fteixeira1993

Boas,

Obrigado pela resposta/ajuda, ando a bater com a cabeça nas paredes por causa de um carrinho de compras quase à 3 meses e já deveria de ter entregado isto ao meu "cliente" há bastante tempo T.T. Apago todo o código todo, como assim? na função carro?

cumps,

fteixeira1993

(ps. Peço desculpa pela ignorância mas estou estoirado e já não consigo pensar mais -.-' este carrinho de compras anda-me a dar cabo da cabeça...)

Share this post


Link to post
Share on other sites
taviroquai

Calma... Faz as coisas uma de cada vez... as bases em programação são muito importantes e o código que apresentaste indicam que tens que reciclar as bases que tens. Agora menos mas por vezes também tenho que apagar "tudo" e fazer de novo...

Share this post


Link to post
Share on other sites
fteixeira1993

Já se encontra a trabalhar o carrinho mas ainda não está online :) .

obrigado pela ajuda,

fteixeira1993

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.