Ir ao conteúdo
  • Cadastre-se

PHP Finalizar compra carrinho PHP


Posts recomendados

Então galera, quero criar uma tabela pra mostrar de forma organizada o preço, quantidade, etc. abaixo está o meu código.

<

<?php
        session_start();

if (!isset ($_SESSION['itens'])){
    $_SESSION['itens'] = array();

}
if (isset ($_GET['add'])&& $_GET['add'] == "carrinho" ) {
    $idProduto  = $_GET['id'];
    if (!isset ($_SESSION['itens'][$idProduto]))
    {
        $_SESSION['itens'][$idProduto] = 1;
    }
    else {
        $_SESSION['itens'][$idProduto] +=1;
    }
}


if (count ($_SESSION['itens']) == 0) {
    echo 'Carrinho vazio<br><a href="template.html">Adicionar itens</a>';
}
 else {
$conexao = new PDO ('mysql:host=localhost;dbname=meusprodutos',"root", "");
foreach ($_SESSION['itens'] as $idProduto=> $quantidade)
{
$select = $conexao->prepare("SELECT * FROM produtos WHERE id=?");
$select ->bindParam(1, $idProduto);
$select ->execute();
$produtos = $select->fetchAll();
$total = $quantidade * $produtos[0]["preco"];
echo 
   'Nome:' .$produtos[0]["nome"].'<br/>
    Preço:'. number_format ($produtos[0]["preco"],2,",",".").'<br/>
    Quantidade: '.$quantidade.' <br/>
    Total : '.number_format ($total,2,",",".").'<br/>
    <a href="remover.php?remover=carrinho&id='.$idProduto.'">Remover</a>
        
    <hr/>
     
       
        
        

 ';
}
 }
        
?>

>

Link para o comentário
Compartilhar em outros sites

<?php
	session_start();

	if (!isset( $_SESSION['itens'] ) ):
		$_SESSION['itens'] = array();
	endif;
	
	if ( isset( $_GET['add'] ) && $_GET['add'] == "carrinho" ):
		$idProduto  = $_GET['id'];
		if (!isset ($_SESSION['itens'][$idProduto])):
			$_SESSION['itens'][$idProduto] = 1;
		else:
			$_SESSION['itens'][$idProduto] +=1;
		endif;
	endif;
	
	if ( count( $_SESSION['itens'] ) == 0 ):
		echo 'Carrinho vazio<br><a href="template.html">Adicionar itens</a>';
	else:
		$conexao = new PDO ('mysql:host=localhost;dbname=meusprodutos',"root", "");
?>
<table>
	<thead>
		<th>Nome</th>
		<th>Preço</th>
		<th>Quantidade</th>
		<th>Total</th>
		<th>Opções</th>
	</thead>
	<tbody>
<?php 
		foreach ( $_SESSION['itens'] as $idProduto => $quantidade ):			
			$select = $conexao->prepare("SELECT * FROM produtos WHERE id=?");
			$select ->bindParam(1, $idProduto);
			$select ->execute();
			$produtos = $select->fetchAll();
			$total = $quantidade * $produtos[0]["preco"];
?>
	<tr>
		<td><?=$produtos[0]["nome"]?></td>
		<td><?=number_format( $produtos[0]["preco"], 2, ", ", "." )?></td>
		<td><?=$quantidade?></td>
		<td><?=number_format( $total, 2, ",", "." )?></td>
		<td><a href="remover.php?remover=carrinho&id=<?=$idProduto?>">Remover</a></td>
	</tr>
<?php
		endforeach;
?>
	</tbody>
</table>
<?php
	endif;
?>

Lembro que não é o ideal, mas é algo com base no seu código, lembre-se verificar se a conexão com o servidor sql está funcionando antes de realizar a query.

Link para o comentário
Compartilhar em outros sites

Sim, claro, mas ai seria necessário definir tamanho total da tabela, tamanho das colunas, dimensões de bordas, cores de texto, fonte de texto e adicionar as imagens.
Uma dica: utilize as ferramentas de inspeção (Inspecionar no Chrome, Inspecionar Elemento no Firefox/Edge ) do navegador para poder achar valores ideais para borda, dimensões e etc...

Link para o comentário
Compartilhar em outros sites

3 horas atrás, João Vitor Pinheiro disse:

@Hasore Tranquilo, obrigado amigo

adicionado 17 minutos depois

@Hasore  Só um ultimo pedido, tem como fazer pra eu somar o valor total de todos os itens? como eu faria? minha tabela ta assim

Sem título.png

Ficaria assim, com base no código que mandei antes:
 

<?php
	session_start();

	if (!isset( $_SESSION['itens'] ) ):
		$_SESSION['itens'] = array();
	endif;
	
	if ( isset( $_GET['add'] ) && $_GET['add'] == "carrinho" ):
		$idProduto  = $_GET['id'];
		if (!isset ($_SESSION['itens'][$idProduto])):
			$_SESSION['itens'][$idProduto] = 1;
		else:
			$_SESSION['itens'][$idProduto] +=1;
		endif;
	endif;
	
	if ( count( $_SESSION['itens'] ) == 0 ):
		echo 'Carrinho vazio<br><a href="template.html">Adicionar itens</a>';
	else:
		$conexao = new PDO ('mysql:host=localhost;dbname=meusprodutos',"root", "");
?>
<table>
	<thead>
		<th>Nome</th>
		<th>Preço</th>
		<th>Quantidade</th>
		<th>Total</th>
		<th>Opções</th>
	</thead>
	<tbody>
<?php 
		$totalgeral = 0;
		foreach ( $_SESSION['itens'] as $idProduto => $quantidade ):			
			$select = $conexao->prepare("SELECT * FROM produtos WHERE id=?");
			$select ->bindParam(1, $idProduto);
			$select ->execute();
			$produtos = $select->fetchAll();
			$total = $quantidade * $produtos[0]["preco"];
			$totalgeral += $total;
?>
	<tr>
		<td><?=$produtos[0]["nome"]?></td>
		<td><?=number_format( $produtos[0]["preco"], 2, ", ", "." )?></td>
		<td><?=$quantidade?></td>
		<td><?=number_format( $total, 2, ",", "." )?></td>
		<td><a href="remover.php?remover=carrinho&id=<?=$idProduto?>">Remover</a></td>
	</tr>
<?php
		endforeach;
?>
	<tr>
		<td colspan="3">Valor Total:</td>
		<td colspan="2"><?=number_format( $totalgeral, 2, ", ", "." )?></td>
	</tr>
	</tbody>
</table>
<?php
	endif;
?>

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Gostaria de poder editar o valor da quantidade dentro do meu carrinho, pois so consigo aumentar mais um se eu for no index e adicionar novamente o mesmo produto, aqui está o codigo do meu carrinho: < 

<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <style>
        button{
            border: 50;
            padding: 10px 8px;
            font-weight: bold;
            color: #000000;
            border-color: #000000;
            background-color: #696969;
        }
        table, th, td {
  border: 1px solid black;
}
th, td {
  padding: 7px;
}
        
    </style>
   
    <body bgcolor="#FFFFFF">
        <div align="center">
        
    
    <p><a href="Template.html"><button onclick="document.getElementById('devolta').style.display='block'" class="w3-button w3-black">Voltar a página principal</button><a/></p>

    </body>
         <body>
        <?php
    session_start();

    if (!isset( $_SESSION['itens'] ) ) :
        $_SESSION['itens'] = array();
    endif;
    
    if ( isset( $_GET['add'] ) && $_GET['add'] == "carrinho" ) :
        $idProduto  = $_GET['id'];
        if (!isset ($_SESSION['itens'][$idProduto])):
            $_SESSION['itens'][$idProduto] = 1;
        else:
            $_SESSION['itens'][$idProduto] +=1;
        endif;
    endif;
    
    if ( count( $_SESSION['itens'] ) == 0 ) :
        echo 'Carrinho vazio<br><a href="template.html">Adicionar itens</a>';
    else:
        $_SESSION['dados'] =array();
        $conexao = new PDO ('mysql:host=localhost;dbname=meusprodutos',"root", "");
?>

<table >
    <thead>
        <th>Nome</th>
        <th>Preço</th>
        <th>Quantidade</th>
        <th>Subtotal</th>
        <th>Opções</th>

    </thead>
    <tbody>
<?php 
        $totalcarrinho = 0;
        foreach ( $_SESSION['itens'] as $idProduto => $quantidade ) :           
            $select = $conexao->prepare("SELECT * FROM produtos WHERE id=?");
            $select ->bindParam(1, $idProduto);
            $select ->execute();
            $produtos = $select->fetchAll();
            $total = $quantidade * $produtos[0]["preco"];
            if(count( $_SESSION['itens'] ) == 0 ) :
                $totalcarrinho = 0;
            else:
            
                $tempcarrinho = $totalcarrinho;
                $totalcarrinho =  $tempcarrinho + $total;
            
            endif;

?>
    <tr>
        <td><div align="center" style="font-size:20px; font-family: verdana"> <font color="black"><?=$produtos[0]["nome"]?></font> </div></td>
        <td><?=number_format( $produtos[0]["preco"], 2, ", ", "." )?></td>
        <td><div align="center"> <?=$quantidade?> </div></td>
        <td><?=number_format( $total, 2, ",", "." )?></td>
        <td><a href="remover.php?remover=carrinho&id=<?=$idProduto?>">Remover</a></td>
    </tr>

<?php
    array_push($_SESSION['dados'],
        array ('id_produto' => $idProduto,
                'quantidade' => $quantidade,
                'preco' => $produtos[0]["preco"],
                'total' => $total
    )
    );
    
        endforeach;
    

?>
    </tbody>
</table>
<table>
    <td><div align='center' style='font-size:25px;font-family:Verdana'>Total <?=number_format( $totalcarrinho, 2, ",", "." )?></div></td> 
    </table>
<?php
echo '<a href="finalizar.php">Finalizar pedido</a>';
    endif;
    
?>

    </body>
</html>

>

e a imagem 

Sem título.png

Link para o comentário
Compartilhar em outros sites

@João Vitor Pinheiro Existem várias formas de fazer isso.

 

O que eu faria para deixar o mais simples possível é transformar a coluna quantidade em um input. Mais ou menos assim:

<input type="text" class="altera__quantidade__produto" data-product="<?= $idProduto ?>" value="<?= $quantidadeProduto ?>">

 

O código acima geraria um input com um atributo chamado data-produtc com o ID do produto. Daí com JavaScript eu escutaria um evento de change no input para realizar a alteração da quantidade. A implementação seria mais ou menos assim:

document.addEventListener('DOMContentLoaded', () => {
	const inputs = document.querySelectorall('.altera__quantidade__produto') //Seleciona todos os inputs para alterar quantidade
	inputs.forEach(input => { //Loop na lista de inputs
		input.addEventListener('change', () => { //Adicionar listener para o evento de mudança
			const idProduto = input.dataset.product //Pega o ID do produto no elemento (data-product)
			const quantidade = input.value //Pega q quantidade digitada pelo usuário
			window.locations.href = `arquivo_que_altera_quantidade.php?produto=${idProduto}&quantidade=${quantidade}` //redireciona para o script PHP responsável por alterar a quantidade
		})
	})
})

 

Na forma que eu implemente, o sistema redirecionaria o usuário para um arquivo chamado arquivo_que_altera_quantidade.php com os parâmetro GET produto e quantidade. Esse arquivo deve ser capaz de alterar a quantidade do produto no banco e redirecionar o usuário.

Link para o comentário
Compartilhar em outros sites

Então, tenho um carrinho de compras em php que ao finalizar compra ele armazena a compra no banco de dados, porém quando eu finalizo os produtos continuam no carrinho quando eu volto la, gostaria que ao finalizar compra o carrinho resetasse sem nenhum produto, se alguem puder me ajudar eu agradeço muito, abaixo está o meu código:

<

<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <style>
        button{
            border: 50;
            padding: 10px 8px;
            font-weight: bold;
            color: #000000;
            border-color: #000000;
            background-color: #696969;
        }
        table, th, td {
  border: 1px solid black;
}
th, td {
  padding: 7px;
 }
    

        
    </style>
   
    <body bgcolor="#FFFFFF">
        <div align="center">
        
    
    <p><a href="Template.html"><button onclick="document.getElementById('devolta').style.display='block'" class="w3-button w3-black">Voltar a página principal</button><a/></p>

    </body>
         <body>
        <?php
    session_start();

    if (!isset( $_SESSION['itens'] ) ) :
        $_SESSION['itens'] = array();
    endif;
    
    if ( isset( $_GET['add'] ) && $_GET['add'] == "carrinho" ) :
        $idProduto  = $_GET['id'];
        if (!isset ($_SESSION['itens'][$idProduto])):
            $_SESSION['itens'][$idProduto] = 1;
        else:
            $_SESSION['itens'][$idProduto] +=1;
        endif;
    endif;
    
    if ( count( $_SESSION['itens'] ) == 0 ) :
        echo 'Carrinho vazio<br><a href="template.html">Adicionar itens</a>';
    else:
        $_SESSION['dados'] =array();
        $conexao = new PDO ('mysql:host=localhost;dbname=meusprodutos',"root", "");
?>

<table >
    <thead>
        <th>Nome</th>
        <th>Preço</th>
        <th>Quantidade</th>
        <th>Subtotal</th>
        <th>Opções</th>

    </thead>
    <tbody>
<?php 
        $totalcarrinho = 0;
        foreach ( $_SESSION['itens'] as $idProduto => $quantidade ) :            
            $select = $conexao->prepare("SELECT * FROM produtos WHERE id=?");
            $select ->bindParam(1, $idProduto);
            $select ->execute();
            $produtos = $select->fetchAll();
            $total = $quantidade * $produtos[0]["preco"];
            if(count( $_SESSION['itens'] ) == 0 ) :
                $totalcarrinho = 0;
            else:
            
                $tempcarrinho = $totalcarrinho;
                $totalcarrinho =  $tempcarrinho + $total;
            
            endif;

?>
    <tr>
        <td><div align="center" style="font-size:20px; font-family: verdana"> <font color="black"><?=$produtos[0]["nome"]?></font> </div></td>
        <td><?=number_format( $produtos[0]["preco"], 2, ", ", "." )?></td>
        <td><div align="center"> <?=$quantidade?> </div></td>
        <td><?=number_format( $total, 2, ",", "." )?></td>
        <td><a href="remover.php?remover=carrinho&id=<?=$idProduto?>">Remover</a></td>
    </tr>

<?php
    array_push($_SESSION['dados'],
        array ('id_produto' => $idProduto,
                'quantidade' => $quantidade,
                'preco' => $produtos[0]["preco"],
                'total' => $total
    )
    );
    
        endforeach;
    

?>
    </tbody>
</table>
<table>
    <td><div align='center' style='font-size:25px;font-family:Verdana'>Total <?=number_format( $totalcarrinho, 2, ",", "." )?></div></td> 
    </table>
<?php
echo '<a href="finalizar.php">Finalizar pedido</a>';
    
    endif;
    
?>

    </body>
</html>

>

Link para o comentário
Compartilhar em outros sites

Boa noite, tô precisando de ajuda no meu carrinho php, eu gostaria de estabelecer um formulario para preencher o endereço, e esse endereço ir pro banco de dados junto com o pedido, abaixo aqui ta meu arquivo carrinho e meu arquivo finalizar: 

<

<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <style>
        button{
            border: 50;
            padding: 10px 8px;
            font-weight: bold;
            color: #000000;
            border-color: #000000;
            background-color: #696969;
        }
        table, th, td {
  border: 1px solid black;
}
th, td {
  padding: 7px;
 }
    

        
    </style>
   
    <body bgcolor="#FFFFFF">
        <div align="center">
        
    
    <p><a href="Template.html"><button onclick="document.getElementById('devolta').style.display='block'" class="w3-button w3-black">Voltar a página principal</button><a/></p>

    </body>
         <body>
        <?php
    session_start();

    if (!isset( $_SESSION['itens'] ) ) :
        $_SESSION['itens'] = array();
    endif;
    
    if ( isset( $_GET['add'] ) && $_GET['add'] == "carrinho" ) :
        $idProduto  = $_GET['id'];
        if (!isset ($_SESSION['itens'][$idProduto])) :
            $_SESSION['itens'][$idProduto] = 1;
        else:
            $_SESSION['itens'][$idProduto] +=1;
        endif;
    endif;
    
    if ( count( $_SESSION['itens'] ) == 0 ) :
        echo 'Carrinho vazio<br><a href="template.html">Adicionar itens</a>';
    else:
        $_SESSION['dados'] =array();
        $conexao = new PDO ('mysql:host=localhost;dbname=meusprodutos',"root", "");
?>

<table >
    <thead>
        <th>Nome</th>
        <th>Preço</th>
        <th>Quantidade</th>
        <th>Subtotal</th>
        <th>Opções</th>

    </thead>
    <tbody>
<?php 
        $totalcarrinho = 0;
        foreach ( $_SESSION['itens'] as $idProduto => $quantidade ) :          
            $select = $conexao->prepare("SELECT * FROM produtos WHERE id=?");
            $select ->bindParam(1, $idProduto);
            $select ->execute();
            $produtos = $select->fetchAll();
            $total = $quantidade * $produtos[0]["preco"];
            if(count( $_SESSION['itens'] ) == 0 ) :
                $totalcarrinho = 0;
            else:
            
                $tempcarrinho = $totalcarrinho;
                $totalcarrinho =  $tempcarrinho + $total;
            
            endif;

?>
    <tr>
        <td><div align="center" style="font-size:20px; font-family: verdana"> <font color="black"><?=$produtos[0]["nome"]?></font> </div></td>
        <td><?=number_format( $produtos[0]["preco"], 2, ", ", "." )?></td>
        <td><div align="center"> <?=$quantidade?> </div></td>
        <td><?=number_format( $total, 2, ",", "." )?></td>
        <td><a href="remover.php?remover=carrinho&id=<?=$idProduto?>">Remover</a></td>
    </tr>

<?php
    array_push($_SESSION['dados'],
        array ('id_produto' => $idProduto,
                'quantidade' => $quantidade,
                'preco' => $produtos[0]["preco"],
                'total' => $total
    )
    );
    
        endforeach;
    

?>
    </tbody>
</table>
<table>
    <td><div align='center' style='font-size:25px;font-family:Verdana'>Total <?=number_format( $totalcarrinho, 2, ",", "." )?></div></td> 
    </table>
<?php
echo '<a href="finalizar.php">Finalizar pedido</a>';
    
    endif;
    
?>

    </body>
</html>

>

agora o arquivo finalizar <

<!DOCTYPE html>
<html>
<style>
     .container {
         width: 100vw;
         height: 100vh;
        display: flex;
         flex-direction: row;
        justify-content: center;
         align-items: center
    }
    
     body {
        margin: 0px; 
    }
    h1 {
        font-style: oblique;
        font-family: monospace;
        color: white;
    }
    .button1 {
   border-top: 1px solid #344652;
   background: #02304f;
   background: -webkit-gradient(linear, left top, left bottom, from(#d6e0e6), to(#02304f));
   background: -webkit-linear-gradient(top, #d6e0e6, #02304f);
   background: -moz-linear-gradient(top, #d6e0e6, #02304f);
   background: -ms-linear-gradient(top, #d6e0e6, #02304f);
   background: -o-linear-gradient(top, #d6e0e6, #02304f);
   padding: 17.5px 35px;
   -webkit-border-radius: 5px;
   -moz-border-radius: 5px;
   border-radius: 5px;
   -webkit-box-shadow: rgba(0,0,0,1) 0 1px 0;
   -moz-box-shadow: rgba(0,0,0,1) 0 1px 0;
   box-shadow: rgba(0,0,0,1) 0 1px 0;
   text-shadow: rgba(0,0,0,.4) 0 1px 0;
   color: #ffffff;
   font-size: 22px;
   font-family: Helvetica, Arial, Sans-Serif;
   text-decoration: none;
   vertical-align: middle;
   }
.button1:hover {
   border-top-color: #ffffff;
   background: #ffffff;
   color: #080508;
   }
.button1:active {
   border-top-color: #ffffff;
   background: #ffffff;
   }
</style>

<head>

    <title></title>
</head>
<body bgcolor="#000000">
    <div class="container">
        
         <div align="center">    
         <h1>Compra realizada com sucesso<img src="certo.png" width="100" height="80"></h1><br><a href="template.html"><button class="button1" type="onclick">Voltar a comprar</button></a></h1>
        
         </div>

         </div>

     
 
</body>
</html>

>

Sem título.png

Link para o comentário
Compartilhar em outros sites

Boa noite amigo,

 

Para juntar o endereço com o pedido basta usar uma chave estrangeira junto com o insert do produto.

 

Para fazer o procedimento você deve primeiro solicitar o endereço, fazer o insert e pegar o LastID, após isso faça o insert do produto referenciando o ID do endereço em um campo contendo uma chave estrangeira!

 

Grande abraço!

Link para o comentário
Compartilhar em outros sites

Desculpa pedir ajuda dnv, mas preciso muito alterar a quantidade do produto quando eu estiver no carrinho, não consigo implementar algo assim de nenhuma forma, se alguem souber por favor me ajude com a implementação no codigo abaixo:

<

<?php
    session_start();

    if (!isset( $_SESSION['itens'] ) ) :
        $_SESSION['itens'] = array();
    endif;
    
    if ( isset( $_GET['add'] ) && $_GET['add'] == "carrinho" ) :
        $idProduto  = $_GET['id'];
        if (!isset ($_SESSION['itens'][$idProduto])):
            $_SESSION['itens'][$idProduto] = 1;
        else:
            $_SESSION['itens'][$idProduto] +=1;
        endif;
    endif;
    
    if ( count( $_SESSION['itens'] ) == 0 ) :
        echo ' <h1>Carrinho vazio</h1>';
    else:
        $_SESSION['dados'] =array();
        $conexao = new PDO ('mysql:host=localhost;dbname=meusprodutos',"root", "");
?>

<table >
    <thead>
        <th>Nome</th>
        <th>Preço</th>
        <th>Quantidade</th>
        <th>Subtotal</th>
        <th>Opções</th>

    </thead>
    <tbody>
<?php 
        $totalcarrinho = 0;
        foreach ( $_SESSION['itens'] as $idProduto => $quantidade ) :            
            $select = $conexao->prepare("SELECT * FROM produtos WHERE id=?");
            $select ->bindParam(1, $idProduto);
            $select ->execute();
            $produtos = $select->fetchAll();
            $total = $quantidade * $produtos[0]["preco"];
            if(count( $_SESSION['itens'] ) == 0 ) :
                $totalcarrinho = 0;
            else:
            
                $tempcarrinho = $totalcarrinho;
                $totalcarrinho =  $tempcarrinho + $total;
            
            endif;

?>
    <tr>
        <td><div align="center" style="font-size:20px; font-family: verdana"> <font color="black"><?=$produtos[0]["nome"]?></font> </div></td>
        <td><?=number_format( $produtos[0]["preco"], 2, ", ", "." )?></td>
        <td><div align="center"> <?=$quantidade?> </div></td>
        <td><?=number_format( $total, 2, ",", "." )?></td>
        <td><a href="remover.php?remover=carrinho&id=<?=$idProduto?>">Remover</a></td>
    </tr>

<?php
    array_push($_SESSION['dados'],
        array ('id_produto' => $produtos[0]["nome"],
                'quantidade' => $quantidade,
                'preco' => $produtos[0]["preco"],
                'total' => $total

    )
    );
    
        endforeach;
    

?>
    </tbody>
</table>
<table>
    <td><div align='center' style='font-size:25px;font-family:Verdana'>Total <?=number_format( $totalcarrinho, 2, ",", "." )?></div></td> 
    </table>
<?php
echo '<a href="finalizar.php">Finalizar pedido</a>';
    
    endif;
    
?>

>

Link para o comentário
Compartilhar em outros sites

 E so alterar esse trecho,

18 horas atrás, João Vitor Pinheiro disse:

        <td><a href="remover.php?remover=carrinho&id=<?=$idProduto?>">Remover</a></td>

 

deixando assim

<td>
	<a href="remover.php?remover=carrinho&id=<?=$idProduto?>">Remover</a> |
	<a href="?add=carrinho&id=<?=$idProduto?>">Add +1</a>
</td>

quando você clicar em Add+1, ele aumenta a quantidade no carrinho.

tenho um exemplo pronto, que fiz para responder outra pergunta, mas que parece exatamente o mesma q a sua, Segue;

<?php
$total=0;

//////////////////////////////////////////////////////////////
//conexão com banco de dados
// minhas configurações de DB , altere para as suas
//						(host			user	pass )
$conexao = mysql_connect('localhost',	'root',	'usbw');
//				(bancodados	$conexao	)
mysql_select_db('loja', 	$conexao);
///////////////////////////////////////////////////////////////

session_start();

    if (!isset( $_SESSION['itens'] ) ) :
        $_SESSION['itens'] = array();
    endif;
	
	if(isset($_GET['remove'])){
		unset($_SESSION['itens'][$_GET['id']]);
		header('Location: carrinho.php');
		exit;	
	}
    
    if ( isset( $_GET['add'] ) && $_GET['add'] == "carrinho" ) :
        $idProduto  = $_GET['id'];
        if (!isset ($_SESSION['itens'][$idProduto])) :
            $_SESSION['itens'][$idProduto] = 1;
        else:
            $_SESSION['itens'][$idProduto] +=1;
        endif;
		
		//evita add +1 sempre q a pagina for atualizada
		header('Location: carrinho.php');
		exit;
		/////
    endif;
    
    if ( count( $_SESSION['itens'] ) == 0 ) :
        echo ' <h1>Carrinho vazio</h1>';
    else:
		// printa um array com todos os itens do carrinho
       print_r($_SESSION['itens']);

?>

<table border="1" >
    <thead>
        <th>Nome</th>
        <th>Preço</th>
        <th>Quantidade</th>
        <th>Subtotal</th>
        <th>Opções</th>

    </thead>
    <tbody>
<?php 
        // evite varias conexões ao DB, faça apenas uma com id de todos os produtos
 echo 		$select =  "SELECT * FROM produtos WHERE id IN ('" .implode("','", array_keys($_SESSION['itens']))."');";	
		$result = mysql_query($select);
	
			if($result){  
		while($linha = mysql_fetch_array($result)){
			$id		= $linha['id'];
			$nome	= $linha['nome'];
			$valor	= $linha['valor'];
			$quant	= @$_SESSION['itens'][$linha['id']];
			$subt	= $valor*$quant;
			$total	= $total+ $subt;
?>
    <tr>
        <td><?php echo $nome?></td>
        <td><?php echo $valor?></td>
        <td><?php echo $quant?></td>
        <td><?php echo $subt?></td>
        <td><a href="?remove=true&id=<?php echo $id?>">Remover</a>  |  <a href="?add=carrinho&id=<?php echo $id?>">Add +1</a></td>
    </tr>
<?php
}}
endif;
?>
    <tr>
		<td colspan="4">Total</td>
        <td><?php echo $total?></td>
</tr>

usei a estrutura de DB abaixo
 

-- Database: `loja`
-- Table structure for table `produtos`
CREATE TABLE IF NOT EXISTS `produtos` (
  `id` tinyint(4) NOT NULL AUTO_INCREMENT,
  `nome` varchar(25) NOT NULL,
  `valor` decimal(10,0) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

INSERT INTO `produtos` (`id`, `nome`, `valor`) VALUES
(10, 'p1', 1),
(5, 'p5', 1),
(1, 'jkoho', 5),
(3, '56465', 2);

 

Link para o comentário
Compartilhar em outros sites

Estou com problema ao remover uma quantidade do meu produto, quando clico em remover remove tudo, exemplo, tenho 10 quantidas de um produto, se eu removo, remove as 10 de uma vez, gostaria de um jeito de remover apenas uma quantidade, abaixo o codigo do meu carrinho e o codigo do meu arquivo remover;

carrinho:

<CODE>

<?php 
        $totalcarrinho = 0;
        foreach ( $_SESSION['itens'] as $idProduto => $quantidade             
            $select = $conexao->prepare("SELECT * FROM produtos WHERE id=?");
            $select ->bindParam(1, $idProduto);
            $select ->execute();
            $produtos = $select->fetchAll();
            $total = $quantidade * $produtos[0]["preco"];
            if(count( $_SESSION['itens'] ) == 0 
                $totalcarrinho = 0;
            else:
            
                $tempcarrinho = $totalcarrinho;
                $totalcarrinho =  $tempcarrinho + $total;
            
            endif;

?>
    <tr>
        <td><div align="center" style="font-size:20px; font-family: verdana"> <font color="black"><?=$produtos[0]["nome"]?></font> </div></td>
        <td><?=number_format( $produtos[0]["preco"], 2, ", ", "." )?></td>
        <td><div align="center"> <?=$quantidade?><a href="?add=carrinho&id=<?=$idProduto?>">►</a> </div></td>
        <td><?=number_format( $total, 2, ",", "." )?></td>
       <td>
  <a href="remover.php?remover=carrinho&id=<?=$idProduto?>">Remover</a>
  
</td>
    </tr>

<?php
    array_push($_SESSION['dados'],
        array ('id_produto' => $produtos[0]["nome"],
                'quantidade' => $quantidade,
                'preco' => $produtos[0]["preco"],
                'total' => $total

    )
    );
    
        endforeach;
    

?>
    </tbody>
</table>
<table>
    <td><div align='center' style='font-size:25px;font-family:Verdana'>Total <?=number_format( $totalcarrinho, 2, ",", "." )?></div></td> 
    </table>
<?php
echo '<a href="finalizar.php">Finalizar pedido</a>';
    
    endif;
    
?>



agora o arquivo remover;

<CODE>

<?php

session_start();

if(isset ($_GET['remover'])&& $_GET['remover'] == "carrinho")
    {
    $idProduto  = $_GET['id'];
    unset ($_SESSION['itens'][$idProduto]);
    echo '<META HTTP-EQUIV="REFRESH" CONTENT="0; URL=carrinho2.php"/>';
}

?>

 

adicionado 22 minutos depois
21 minutos atrás, João Vitor Pinheiro disse:

Estou com problema ao remover uma quantidade do meu produto, quando clico em remover remove tudo, exemplo, tenho 10 quantidas de um produto, se eu removo, remove as 10 de uma vez, gostaria de um jeito de remover apenas uma quantidade, abaixo o codigo do meu carrinho e o codigo do meu arquivo remover;

carrinho:


<CODE>

<?php 
        $totalcarrinho = 0;
        foreach ( $_SESSION['itens'] as $idProduto => $quantidade             
            $select = $conexao->prepare("SELECT * FROM produtos WHERE id=?");
            $select ->bindParam(1, $idProduto);
            $select ->execute();
            $produtos = $select->fetchAll();
            $total = $quantidade * $produtos[0]["preco"];
            if(count( $_SESSION['itens'] ) == 0 
                $totalcarrinho = 0;
            else:
            
                $tempcarrinho = $totalcarrinho;
                $totalcarrinho =  $tempcarrinho + $total;
            
            endif;

?>
    <tr>
        <td><div align="center" style="font-size:20px; font-family: verdana"> <font color="black"><?=$produtos[0]["nome"]?></font> </div></td>
        <td><?=number_format( $produtos[0]["preco"], 2, ", ", "." )?></td>
        <td><div align="center"> <?=$quantidade?><a href="?add=carrinho&id=<?=$idProduto?>">►</a> </div></td>
        <td><?=number_format( $total, 2, ",", "." )?></td>
       <td>
  <a href="remover.php?remover=carrinho&id=<?=$idProduto?>">Remover</a>
  
</td>
    </tr>

<?php
    array_push($_SESSION['dados'],
        array ('id_produto' => $produtos[0]["nome"],
                'quantidade' => $quantidade,
                'preco' => $produtos[0]["preco"],
                'total' => $total

    )
    );
    
        endforeach;
    

?>
    </tbody>
</table>
<table>
    <td><div align='center' style='font-size:25px;font-family:Verdana'>Total <?=number_format( $totalcarrinho, 2, ",", "." )?></div></td> 
    </table>
<?php
echo '<a href="finalizar.php">Finalizar pedido</a>';
    
    endif;
    
?>



agora o arquivo remover;

<CODE>

<?php

session_start();

if(isset ($_GET['remover'])&& $_GET['remover'] == "carrinho")
    {
    $idProduto  = $_GET['id'];
    unset ($_SESSION['itens'][$idProduto]);
    echo '<META HTTP-EQUIV="REFRESH" CONTENT="0; URL=carrinho2.php"/>';
}

?>

 

@LNPott da uma força aqui irmão, falta só isso pra resolver esse carrinho

Link para o comentário
Compartilhar em outros sites

@makotsunami não deu certo, to com muita dificuldade em implementar isso, não sei nada de javascript, poderia rever e me dar uma ajuda amigo? ta muito difícil de resolver, consigo mudar a quantidade atraves do php mesmo, adicionando e removendo um item por vez, mas cada vez que faço isso ocorre um reload na pagina, e assim fica inviavel, eu gostaria de digitar a quantidade e essa quantidade ja ser adicionada ao produto, atualmente o codigo do meu carrinho ta assim:

<?php 
        $totalcarrinho = 0;
        foreach ( $_SESSION['itens'] as $idProduto => $quantidade ):            
            $select = $conexao->prepare("SELECT * FROM produtos WHERE id=?");
            $select ->bindParam(1, $idProduto);
            $select ->execute();
            $produtos = $select->fetchAll();
            $total = $quantidade * $produtos[0]["preco"];
            if(count( $_SESSION['itens'] ) == 0 ):
                $totalcarrinho = 0;
            else:
            
                $tempcarrinho = $totalcarrinho;
                $totalcarrinho =  $tempcarrinho + $total;
            
            endif;

?>
    <tr>
        <td><div align="center" style="font-size:20px; font-family: verdana"> <font color="black"><?=$produtos[0]["nome"]?></font> </div></td>
        <td><?=number_format( $produtos[0]["preco"], 2, ", ", "." )?></td>
        <td><div align="center"><a href="remover.php?remover=carrinho&id=<?=$idProduto?>">◄</a> <?=$quantidade?><a href="carrinho.php?add=carrinho&id=<?=$idProduto?>">►</a> </div></td>
        <td><?=number_format( $total, 2, ",", "." )?></td>
       <td>
  <a href="remover2.php?remover=carrinho&id=<?=$idProduto?>">Remover</a>
  
</td>
    </tr>

<?php
    array_push($_SESSION['dados'],
        array ('id_produto' => $produtos[0]["nome"],
                'quantidade' => $quantidade,
                'preco' => $produtos[0]["preco"],
                'total' => $total

    )
    );
    
        endforeach;
    

?>
    </tbody>
</table>
<table>
    <td><div align='center' style='font-size:25px;font-family:Verdana'>Total <?=number_format( $totalcarrinho, 2, ",", "." )?></div></td> 
    </table>
<?php
echo '<a href="finalizar.php"><button class="button2" type="submit">Finalizar pedido</button></a>';
    
    endif;
    
?>

    </body>
</html>

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@João Vitor Pinheiro

4 horas atrás, João Vitor Pinheiro disse:

mas cada vez que faço isso ocorre um reload na pagina, e assim fica inviavel

Você vai resolver isso com ajax.

Faça em jQuery que é extremamente mais fácil fazer essas requisições assíncronas, afim de eliminar o reload.

 

Exemplo:

Para cada botão de adicionar e remover, você vai atribuir uma função de click chamando a função ajax.

 

Para adicionar:

$(document).ready(function(){
   var adicionar = $("#btn-adicionar");
   var remover = $("#btn-remover");
  
   adicionar.on("click", function(){
      var dados = $("#form-adicionar").serialize(); 
       $.ajax({
           url: "adicionar.php",
           dataType: "HTML",
           method: "POST",
           data: dados
       }).done(function(retorno){
           $("#msg-callback").html(retorno);
       }).fail(function(retorno){
          $("#msg-callback").html(retorno); 
       });
   });
  
  remover.on("click", function(){
        var dados = $("#form-remover").serialize(); 
        $.ajax({
           url: "remover.php",
           dataType: "HTML",
           method: "POST",
           data: dados
       }).done(function(retorno){
           $("#msg-callback").html(retorno);
       }).fail(function(retorno){
          $("#msg-callback").html(retorno); 
       });
     });
});

Devo lembrar, que este é apenas um exemplo. as variáveis e nomes de id dos elementos são só exemplos.

Basicamente, o que acontece ali no código é o seguinte:

 

Criamos uma variável para cada botão adicionar e remover

var adicionar = $("#btn-adicionar");
var remover = $("#btn-remover");

Em seguida, atribuímos a função on() que permite anexar uma função de manipulação de eventos para um ou mais eventos aos elementos selecionados. Neste caso a função de eventos é o "click".

 

Dentro desta função, colocamos em uma variável o seu formulário e serializando os dados. com a função serialize()

Note que essa função é mais útil quando tem mais de um dado, mas se for com apenas um ou 2 é ideal colocar desta forma no atributo data da função ajax:

var qtd = $("#qtd").val();
{ id: <?php echo $id?>, quantidade: qtd }

PS: pode usar php no jquery. eu coloquei desta forma, pois imagino que o ID do produto esta vindo do php.

Depois da função $.ajax()  é atribuído a função done().

Esta função é responsável pelo callback( retorno) se a requisição for bem sucedida.

Já a função fail(), serve para indicar uma mensagem de erro.

 

Por enquanto é ísso que posso ensinar no momento.

Deixo alguns links de estudo:

http://api.jquery.com/jquery.ajax/

https://www.w3schools.com/jquery/jquery_ref_ajax.asp

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!