AnaAlves Posted June 21, 2013 at 04:00 PM Report #514298 Posted June 21, 2013 at 04:00 PM (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 June 21, 2013 at 04:36 PM by anolsi adicionado geshi
de3v0 Posted June 21, 2013 at 04:20 PM Report #514306 Posted June 21, 2013 at 04:20 PM (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 June 21, 2013 at 05:33 PM by yoda
AnaAlves Posted June 21, 2013 at 08:19 PM Author Report #514373 Posted June 21, 2013 at 08:19 PM o resultado é o mesmo .. e obrigada pela dica dos if's 🙂
de3v0 Posted June 22, 2013 at 03:09 AM Report #514408 Posted June 22, 2013 at 03:09 AM (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 June 22, 2013 at 06:34 PM by yoda
AnaAlves Posted June 22, 2013 at 01:32 PM Author Report #514449 Posted June 22, 2013 at 01:32 PM 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..
HappyHippyHippo Posted June 22, 2013 at 03:28 PM Report #514477 Posted June 22, 2013 at 03:28 PM 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 Portugol Plus
de3v0 Posted June 23, 2013 at 07:56 PM Report #514608 Posted June 23, 2013 at 07:56 PM (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 June 23, 2013 at 07:57 PM by de3v0
AnaAlves Posted June 23, 2013 at 09:50 PM Author Report #514621 Posted June 23, 2013 at 09:50 PM (edited) sim HappyHippyHippo, tinha o restaura da sessão e obrigada pessoal mas já consegui resolver 😄 Edited June 23, 2013 at 09:51 PM by AnaAlves
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now