Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou com um problema, eu tenho um carrinho de compras tudo funcionando, mas não estaou conseguindo enviar todos os dados do carrinho para o pagseguro, pois vai apenas sempre os ultimos dados do carrinho para a pagina do pagseguro, se alguem pudesse me ajudar ficaria muito grato..
<?php
$area = isset($_GET['area']) ? $_GET['area'] : NULL;
$acao = isset($_GET['acao']) ? $_GET['acao'] : NULL;
$objCar = new Carrinho;
if ($area == "carrinho")
{
if ($acao == "adicionar")
{
$id = isset ($_GET['id']) ? (int)$_GET['id'] : NULL;
$objCar->AdicionarProduto ($id);
}
if ($acao == "remover") $id = isset ($_GET['id']) ? (int)$_GET['id'] : NULL;
$objCar->RemoverProduto ($id);
}
if ($acao == "alt_qtde") $id = isset ($_GET['id']) ? (int)$_GET['id'] : NULL;
$n_qtde = isset ($_POST['qtde_'.$id]) ? (int)$_POST['qtde_'.$id] : 1;
$objCar->AlterarQuantidade($id, $n_qtde);
}
echo "
<h2>Carrinho de Compras</h2>
<table width=\"700\" cellpadding=\"2\" cellspacing=\"0\">
<tr>
<td width=\"300\" style=\"text-align:center\">Nome</td>
<td width=\"120\" style=\"text-align:center\">Preço<br />Unitário</td>
<td width=\"100\" style=\"text-align:center\">Qunatidade</td>
<td width=\"120\" style=\"text-align:center\">Subtotal deste<br />Produto</td>
<td width=\"60\" style=\"text-align:center;\">Excluir<br />Produto</td>
</tr>
";
$carrinho = isset ($_SESSION['carrinho']) ? $_SESSION['carrinho'] : array();
if (count ($carrinho) == 0)
{
echo "
<tr>
<td colspan=\"5\" style=\"text-align:center\"><strong><em>
Não há produtos em seu carrinho de compas.</em></strong>
</td>
</tr>
</table>
<p><a href=\"?area=produtos\">Ver lista de produtos</a></p>
";
}for ($a = 0; $a < count($carrinho); $a++)
{
?>
<?php
$id = $carrinho[$a]['id'];
$nome = htmlentities ($carrinho[$a]['nome']);
$preco = number_format ($carrinho[$a]['preco'], 2, ",", "");
$desc = htmlentities ($carrinho[$a]['descricao']);
$qtde = $carrinho[$a]['qtde'];
$subtotal = number_format(($carrinho[$a]['preco'] * $qtde), 2, ',', '');
echo "
<tr>
<td style=\"border-left: dashed 1px black;\" class=\"celulas\">".$nome."</td>
<td class=\"celulas\">R$ ".$preco."</td>
<td class=\"celulas\">
<form action=\"?area=carrinho&acao=alt_qtde&id=".$carrinho[$a]['id']."\"method=\"post\">
<input type=\"text\" name=\"qtde_".$id."\" value=\"".$qtde."\" style=\"width: 30px;height: 15px;font-size:13px;text-align:center;border:inset 1px black;\" maxlength=\"2\" /><br />
<input type=\"submit\" value=\"Alterar\" style=\"width: 80px;height: 20px;font-size:13px;margin:0;padding:0;cursor:pointer;background:#ccc;border: inset 1px black\" />
</form>
</td>
<td class=\"celulas\">R$ ". $subtotal . "</td>
<td class=\"celulas\"><a href=\"?area=carrinho&acao=remover&id=" .$id. "\" onclick=\"return ConfirmarExclusaoProduto()\">Excluir</a></td>
</tr>
";
?>
<?php
}// fecha for
echo "
<tr>
<td style=\"text-align:right\"><strong style=\"font-size:18px\">Total:</strong><br />Sem o valor do frete</td>
<td style=\"text-align:center\"><strong style=\"font-size:18px\">".$_SESSION['total']."</strong></td>
<td colspan=\"2\"> </td>
</tr>
</table>
<p><a href=\"?area=produtos\">Continuar Comprando</a> | <a href=\"?area=finalizar\">Finalizar Pedido</a></p>
";
}// fecha else
}
?>
<form target="pagseguro" action="https://pagseguro.uol.com.br/security/webpagamentos/webpagto.aspx" method="post">
<input type="hidden" name="email_cobranca" value="scott_publicidade@hotmail.com" />
<input type="hidden" name="tipo" value="CP" />
<input type="hidden" name="moeda" value="BRL" />
<input type="hidden" name="item_id_1" value="<?php echo $id; ?>" />
<input type="hidden" name="item_descr_1" value="<?php echo $nome; ?>" />
<input type="hidden" name="item_quant_1" value="<?php echo $qtde; ?>" />
<input type="hidden" name="item_valor_1" value="<?php echo $preco; ?>" />
<input type="hidden" name="item_frete_1" value="EN" />
<input type="hidden" name="item_peso_1" value="0" />
<input type="image" src="https://pagseguro.uol.com.br/Security/Imagens/btnPagar.jpg" name="submit" alt="Pague com PagSeguro - é rápido, grátis e seguro!" />
</form>
sim foi, editado por Matheus Tavares, nao consegui fazer a interação do carrinho com o pagseguro, tentei de tudo mas vai apenas o ultimo produto do carrinho e o resto nao....
A class do carrinho é essa Thiago, valeu por estar tentando me ajudar cara isso é importante pra mim cara falouuuu......
class Carrinho
{
/*
Função AdicionarProduto($id)
Adiciona ao carrinho o produto cujo id na tabela produtos seja $id, passado como parâmetro da função.
Se o id for inválido (NULL ou ''), axibe um alerta e retorna FALSE.
Se o produto já estiver no carrinho, exibe um alerta e retorna FALSE.
*/
public function AdicionarProduto($id)
{
if ($id == NULL || $id == '' || $id == 0)
{
echo "
<script type=\"text/javascript\">
alert ('O id do produto deve ser inteiro e maior que zero');
</script>";
return false;
}
/*
A função ArrayCarrinho() retorna um array com os id's dos produtos e suas respectivas chaves no array $_SESSION['carrinho'].
*/
$aCar = ArrayCarrinho();
if (in_array ($id, $aCar))
{
echo "
<script type=\"text/javascript\">
alert ('O produto que você selecionou já está em seu carrinho de compras.\\n Para adicionar outra unidade, altere a quantidade do produro.');
</script>
";
return false;
}
$my = new MySQLiConnection();
$sql = $my->query ("Select * From produtos Where id = ".$id);
if ($sql->num_rows == 0)
{
echo "
<script type=\"text/javascript\">
alert ('Não foi encontrado um produto com esse id.');
</script>";
return false;
}
$f = $sql->fetch_object();
$cod = $f->id;
$nome = $f->nome;
$preco = $f->preco;
$desc = $f->descricao;
//próxima chave de $_SESSION['carrinho']:
$k = isset ($_SESSION['carrinho']) ? count ($_SESSION['carrinho']) : 0;
$_SESSION['carrinho'][$k]['id'] = $cod;
$_SESSION['carrinho'][$k]['nome'] = $nome;
$_SESSION['carrinho'][$k]['preco'] = $preco;
$_SESSION['carrinho'][$k]['qtde'] = 1;
$_SESSION['total'] = $this->Total();
$_SESSION['carrinho'][$k]['descricao'] = $desc;
//ordena $_SESSION['carrinho'] por nome de produto:
sort ($_SESSION['carrinho'], SORT_STRING);
}
/*
Função RemoverProduto($id)
Remove de $_SESSION['carrinho'] o produto cujo id na tabela produtos é $id, passado como parâmetro da função.
Se o id for inválido (NULL ou ''), exibe um alerta e retorna FALSE.
*/
public function RemoverProduto($id) if ($id == NULL || $id == '' || $id == 0)
{
echo "
<script type=\"text/javascript\">
alert ('O id do produto deve ser inteiro e maior que zero');
</script>";
return false;
}
// encontra a chave cujo id é o passado na função e o coloca na variável $k
$aCar = ArrayCarrinho();
$k = array_search ($id, $aCar);
unset ($_SESSION['carrinho'][$k]);
if (count ($_SESSION['carrinho']))//se ainda houver produtos no carrinho
{
//organiza as chaves do array desde zero até (count ($_SESSION['carrinho']) - 1)
$car_keys = range (0, (count ($_SESSION['carrinho']) - 1));
$_SESSION['carrinho'] = array_combine ($car_keys, $_SESSION['carrinho']);
}
$_SESSION['total'] = $this->Total();
}
/*
Função AlterarQuantidade($id, $n_qtde)
Altera a quantidade de unidades do produto cujo id é $id para $n_qtde.
Se o id for inválido (NULL ou ''), exibe um alerta e retorna FALSE.
Se $n_qtde for maior que zero, altera a quantidade do produto; se for igual ou menor que zero, remove-o do carrinho.
*/
public function AlterarQuantidade($id, $n_qtde)
{
if ($id == NULL || $id == '' || $id == 0)
{
echo "
<script type=\"text/javascript\">
alert ('O id do produto deve ser inteiro e maior que zero');
</script>";
return false;
}
if ($n_qtde > 0)
{
// encontra a chave cujo id é o passado na função e o coloca na variável $k
$aCar = ArrayCarrinho();
$k = array_search ($id, $aCar);
$_SESSION['carrinho'][$k]['qtde'] = $n_qtde;
$_SESSION['total'] = $this->Total();
}
else
$this->RemoverProduto($id);
}
public function Total() $carro = isset($_SESSION['carrinho']) ? $_SESSION['carrinho'] : array();
// inicia a variável $total:
$total = 0;
for ($t = 0; $t < count ($carro); $t++)
{
// multiplica o preço do produto por sua respectiva quantidade
$total += $carro[$t]['preco'] * $carro[$t]['qtde'];
}
// retorna o total já formatado na forma brasileira
return number_format ($total, 2, ",", "");
}
}Ver se isso lhe ajuda...
<form target="pagseguro" action="https://pagseguro.uol.com.br/security/webpagamentos/webpagto.aspx" method="post">
<input type="hidden" name="email_cobranca" value="scott_publicidade@hotmail.com" />
<input type="hidden" name="tipo" value="CP" />
<input type="hidden" name="moeda" value="BRL" />
<?php
foreach($_SESSION['carrinho'] as $cart){
echo'<input type="hidden" name="item_id_1" value="' . $cart['id'] . '" />
<input type="hidden" name="item_descr_1" value="' . $cart['nome'] . '" />
<input type="hidden" name="item_quant_1" value="' . $cart['qtde'] . '" />
<input type="hidden" name="item_valor_1" value="' . $cart['preco'] . '" />
<input type="hidden" name="item_frete_1" value="EN" />
<input type="hidden" name="item_peso_1" value="' . $cart['peso'] . '" />';
}?>
<input type="image" src="https://pagseguro.uol.com.br/Security/Imagens/btnPagar.jpg" name="submit" alt="Pague com PagSeguro - é rápido, grátis e seguro!" />
</form>
Tente adicionar no seu carrinho o peso também, caso você queira calcular frete no PagSeguro você irá precisar dele...
insira
$_SESSION['carrinho'][$k]['peso'] = $peso;
da uma olhada no laboratorio de scripts, tem um monte de modelos de paginação...
Sua classe Carrinho é assim
class Carrinho{
Ou assim:
class Carrinho{
Se for como o primeiro caso, só o último elemento é enviado porque toda vez que o método adicionaProduto() é chamado ele sobrescreve o valor de $codigo_produto.
Se for como o segundo caso, pelo que você mostrou, deveria funcionar.
Se não for nenhum dos dois, mostre o código dessa classe.