Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Enigma_Boy

Conflito no cart.php

Recommended Posts

Boas pessoa é o seguinte tenho um carinho de compras, que não sei o que se passa quando o cliente actualiza os dados atraves da pagina do carrinho aquilo fica tudo atrufiado e mandame as encomendas mal feitas.

 

imagem de uma encomenda correcta antes de actualizar os dados atraves do carrinho.

Imagem Postada

 

imagem de a encomenda depois de alterar detalhes na pagina do carrinho fica da seguinte maneira.

Imagem Postada

 

 

não sei o que se passa mas quando a encomenda é efectuada fica tudo mal feito devido a esse erro.

 

o code da pagina do carrinho é a seguinte:

 

NO INICIO MESMO ANTES DE <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<?php
require_once 'library/config.php';
require_once 'library/cart-functions.php';

//print_r($_REQUEST); exit;

$action = (isset($_GET['action']) && $_GET['action'] != '') ? $_GET['action'] : 'view';

switch ($action) {
	case 'add' :
		addToCart();
		break;
	case 'update' :
		updateCart();
		break;	
	case 'delete' :
		deleteFromCart();
		break;
	case 'view' :
}

$cartContent = getCartContent();
$numItem = count($cartContent);


// mostra erro da mensagem (se houver erro)
displayError();

if ($numItem > 0 ) {
?>

Depois da tag BODY

 

<div class="carr_top"></div>
    <div class="carr_centro"><form action="<?php echo $_SERVER['PHP_SELF'] . "?action=update"; ?>" method="post" name="frmCart" id="frmCart">
  <table width="100%" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#CFE1ED" class="entryTable">
    <tr class="entryTableHeader">
      <td height="26" colspan="2" align="center" bordercolor="#CFE1ED">Produto</td>
      <td width="94" align="center" bordercolor="#CFE1ED">Opções 1</td>
      <td width="94" align="center" bordercolor="#CFE1ED">Opções 2</td>
      <td width="93" align="center" bordercolor="#CFE1ED">Preço Unid</td>
      <td width="64" align="center" bordercolor="#CCCCCC">Qtid</td>
      <td width="103" align="center" bordercolor="#CCCCCC">Total</td>
      <td width="60" align="center" bordercolor="#CCCCCC">Opções</td>
    </tr>
    <?php
$subTotal = 0;
for ($i = 0; $i < $numItem; $i++) {
	extract($cartContent[$i]);
	$supl =  explode('+', $pd_sizes);
	
	if(count($supl) > 1){
		$pd_price = $pd_price + $supl[1];
	}
	
	$productUrl = "home.php?c=$cat_id&p=$pd_id";
	$subTotal += $pd_price * $ct_qty;
?>
    <tr class="content">
      <td width="69" align="center" bordercolor="#CFE1ED"><div align="center"><a href="<?php echo $productUrl; ?>"><img src="<?php echo $pd_thumbnail; ?>" border="0" /></a><a href="<?php echo $productUrl; ?>"><br />
      </a></div></td>
      <?php 

$sel_colors = HasAttribute($ct_id, 'pd_colors');
$sel_sizes  = HasAttribute($ct_id, 'pd_sizes');
?>
      <td width="155" bordercolor="#CFE1ED"><div align="center"><a href="<?php echo $productUrl; ?>"><?php echo $pd_name; ?></a></div></td>
      <td align="right" bordercolor="#CFE1ED"><div align="center"><a href="<?php echo $productUrl; ?>">
          <?php if($sel_colors != false || $sel_sizes != false) { ?>
      </a> <?php echo ($sel_colors !== false) ? AttributesSelect($pd_id, 'pd_colors', 'pd_colors[]', $sel_colors) : '<strong>N/D</strong>'; ?></div></td>
      <td width="94" bordercolor="#CFE1ED"><div align="center">
          <?php echo ($sel_sizes !== false) ? AttributesSelect($pd_id, 'pd_sizes', 'pd_sizes[]', $sel_sizes) : '<strong>N/D</strong>'; ?></td>
      <?php } else { echo "</a>Sem Detalhes<td>Sem Detalhes</td>"; } ?>
      <td align="right" bordercolor="#CFE1ED"><div align="right"></div>
          <div align="center">
            <div align="right"></div>
            <?php echo displayAmount($pd_price); ?>
            <label>
            <div align="right"></div>
          </div>
        <div align="right"></div></td>
      <td width="64" align="center" bordercolor="#CCCCCC"><div align="center">
          <input name="txtQty[]" type="text" id="txtQty[]" size="5" value="<?php echo $ct_qty; ?>"  class="box" onkeyup="validar(this);" />
          <input name="hidCartId[]" type="hidden" value="<?php echo $ct_id; ?>" />
          <input name="hidProductId[]" type="hidden" value="<?php echo $pd_id; ?>" />
      </div></td>
      <td width="103" align="center" bordercolor="#CCCCCC"><div align="center"><?php echo displayAmount($pd_price * $ct_qty); ?></div></td>
      <td width="60" align="center" bordercolor="#CCCCCC"><div align="center">
          <input name="btnDelete" type="button" id="btnDelete" value=" X " onclick="window.location.href='<?php echo $_SERVER['PHP_SELF'] . "?action=delete&cid=$ct_id"; ?>';" class="box" />
      </div></td>
    </tr>
    <?php
}
?>
  </table>
  <table width="271" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#CFE1ED" style="margin-top:10px;">
    <tr>
      <td width="162">Sub-Total</td>
      <td width="103"><?php echo displayAmount($subTotal); ?></td>
    </tr>
    <tr>
      <td>Despesas de envio</td>
      <td><?php echo displayAmount($shopConfig['shippingCost']); ?></td>
    </tr>
    <tr>
      <td>Total a pagar</td>
      <td><?php echo displayAmount($subTotal + $shopConfig['shippingCost']); ?></td>
    </tr>
  </table>
  <p> </p>
  <table width="74" border="0" align="center" cellpadding="0" cellspacing="0" bordercolor="#1F1D1E" style="margin-top:5px;">
    <tr>
      <td><input name="btnUpdate" type="submit" id="btnUpdate" value="Actualizar Dados" class="box" /></td>
    </tr>
  </table>
  <p> </p>
  <p><span class="vermelho">IMPORTANTE: </span></p>
  <ul>
    <li>Ter em conta que os 3.00 euros de despesas de envio serve para encomenda com peso inferior a 2 kilos, caso contrário poderá sofrer alterações no valor das despesas de envio. De qualquer maneira o cliente irá ser notificado da situação em questão.</li>
    <li>Os produtos tem 2 modos de pagamento ou por transferencia bancaria ou por envio de cheque, assim que efectuado o pagamento e comprovado será entao prosseguido o envio do mesmo.</li>
    </ul>
  <p>Para mais informação em relação aos procedimentos de entregas, pagamentos e outros veja <a href="http://pet-world-na.net/cond_gerais.php">aqui</a></p>
    </form>
<label>
<div align="center"><img src="http://pet-world-na.net/images/separador.jpg" width="490" height="30" />
    </input>
</div>
</label>
<div align="center">
  <?php
} else {
				echo"<script>window.location='home.php';alert('O seu carrinho encontra-se actualmente sem produtos, continue com uma boa visita :)');</script>";
 ?>
  <?php
}

$shoppingReturnUrl = isset($_SESSION['shop_return_url']) ? $_SESSION['shop_return_url'] : 'home.php';
?>
</div>
<table width="550" border="0" align="center" cellpadding="10" cellspacing="0">
 <tr align="center"> 
  <td><input name="btnContinue" type="button" id="btnContinue" value="<< Continuar Compras" onClick="window.location.href='<?php echo $shoppingReturnUrl; ?>';" class="box"></td>
<?php 
if ($numItem > 0) {
?>  
  <td><input name="btnCheckout" type="button" id="btnCheckout" value="Prosseguir Compras >>" onClick="window.location.href='checkout.php?step=1';" class="box"></td>
<?php
}
?>  
 </tr>
</table></div>
    <div class="carr_footer"></div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, somente com essas informações eu não consigo te dizer, você teria q me mostrar a função updateCart(); ... mas tente verificar se todas as informações estão vindo corretamente do form.

 

coloca um

<pre>
print_r($_POST);
</pre>

e veja... se estiver vindo correto tente verificar se as informações estão sendo atualizadas no updateCart() corretamente.

 

É preciso analisar onde o erro está acontecendo...

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
require_once 'config.php';

/*********************************************************
*                 SHOPPING CART FUNCTIONS 
*********************************************************/
 
function addToCart()
{
	// verifica se produto existe
	if (isset($_GET['p']) && (int)$_GET['p'] > 0) {
		$productId = (int)$_GET['p'];
	} else {
		header('Location: home.php');
	}
	
	// poduto existe ?
	$sql = "SELECT pd_id, pd_qty
	        FROM tbl_product
			WHERE pd_id = $productId";
	$result = dbQuery($sql);
	
	if (dbNumRows($result) != 1) {
		// produto nao existe
		header('Location: cart.php');
	} else {
		// quantos produtos temos em stock(armazem)
	
		$row = dbFetchAssoc($result);
		$currentStock = $row['pd_qty'];

		if ($currentStock == 0) {
			// ja nao temos este produto em stock mostra o erro
			// show the error message
			echo"<script>window.location='cart.php';alert('O produto que referiu já não existe em stock!');</script>";
			header('Location: cart.php');
			exit;
		}

	}		
	
	//  id sessao actual
	$sid = session_id();
	setcookie("sid", $sid, time()+3600*24*7);
	
	// verifica se produto ja existe na tabela do carrinho de compras nesta sessao
	
	$sql = "SELECT pd_id
	        FROM tbl_cart
			WHERE pd_id = $productId AND ct_session_id = '$sid'";
	$result = dbQuery($sql);
	
	$pd_sizes  = @trim($_REQUEST['pd_sizes']);
	$pd_colors = @trim($_REQUEST['pd_colors']);
	

	//if (dbNumRows($result) == 0) {
		// coloca produto no carrinho
		$sql = "INSERT INTO tbl_cart (pd_id, ct_qty, ct_session_id, ct_date, pd_colors, pd_sizes)
				VALUES ($productId, 1, '$sid', NOW(), '".mysql_real_escape_string($pd_colors)."', '".mysql_real_escape_string($pd_sizes)."')";
		
        $result = dbQuery($sql);
	//} else {
		// actualiza produto no carrinho
		//$sql = "UPDATE tbl_cart 
		  //      SET ct_qty = ct_qty + 1
			//	WHERE ct_session_id = '$sid' AND pd_id = $productId";		
				
		//$result = dbQuery($sql);		
	//}	
	
	// trabalho extra para nos , aqui e apagado os carrinhos abandonados 
	// agora melhor opcao e chamar funcao aqui
	deleteAbandonedCart();
	
	//print_r($_REQUEST); exit;
	header('Location: ' . $_SESSION['shop_return_url']); 
    exit;

$arq = fopen("files/$product.txt" , "a");
 
    /**
        Verifica se o arquivo foi aberto ou criado com sucesso
    */
     if($arq)
     {
        /**
          Grava o texto no arquivo. O primeiro parâmetro é o ponteiro do arquivo aberto, e o segundo parâmetro é o conteúdo a ser gravado no arquivo.
       */
       fputs($arq, "\"Tamanhos\"|Cores\r\n");
       /**
          Fecha o arquivo
      */
       fclose($arq);
     }
$data = date("d/m/Y H:i"); 	
}			

/*
	Vai buscar todos items da sessao actual do carrinho de compras
*/
function getCartContent()
{
	$cartContent = array();

	$sid = session_id();
	$sql = "SELECT ct_id, ct.pd_id, ct_qty, pd_name, pd_price, pd_thumbnail, pd.cat_id, ct.pd_sizes, ct.pd_colors
			FROM tbl_cart ct, tbl_product pd, tbl_category cat
			WHERE ct_session_id = '$sid' AND ct.pd_id = pd.pd_id AND cat.cat_id = pd.cat_id";
	
	$result = dbQuery($sql);
	
	while ($row = dbFetchAssoc($result)) {
		if ($row['pd_thumbnail']) {
			$row['pd_thumbnail'] = WEB_ROOT . 'images/product/' . $row['pd_thumbnail'];
		} else {
			$row['pd_thumbnail'] = WEB_ROOT . 'images/no-image-small.png';
		}
		$cartContent[] = $row;
	}
	
	return $cartContent;
}

/*
	remove um item do carrinho
*/
function deleteFromCart($cartId = 0)
{
	if (!$cartId && isset($_GET['cid']) && (int)$_GET['cid'] > 0) {
		$cartId = (int)$_GET['cid'];
	}

	if ($cartId) {	
		$sql  = "DELETE FROM tbl_cart
				 WHERE ct_id = $cartId";

		$result = dbQuery($sql);
	}
	
	header('Location: cart.php');	
}

/*
	actualiza quantidade de itens no carrinho de compras
*/
function updateCart()
{
	$cartId     = $_POST['hidCartId'];
	$productId  = $_POST['hidProductId'];
	$itemQty    = $_POST['txtQty'];
	
	$pd_colors = @$_POST['pd_colors'];
	$pd_sizes  = @$_POST['pd_sizes'];
	
	$numItem    = count($itemQty);
	$numDeleted = 0;
	$notice     = '';
	
	for ($i = 0; $i < $numItem; $i++) {
		
		$new_pd_colors = empty($pd_colors[$i]) ? '' : $pd_colors[$i];
		$new_pd_sizes  = empty($pd_sizes[$i])  ? '' : $pd_sizes[$i];
        
        $newQty = (int)$itemQty[$i];
		if ($newQty < 1) {
			// remove este item do carrinho de compras
			deleteFromCart($cartId[$i]);	
			$numDeleted += 1;
		} else {
			// verifica stock actual
			$sql = "SELECT pd_name, pd_qty
			        FROM tbl_product 
					WHERE pd_id = {$productId[$i]}";
			$result = dbQuery($sql);
			$row    = dbFetchAssoc($result);
			
			if ($newQty > $row['pd_qty']) {
				//  so temos esta quantidade em stock
				$newQty = $row['pd_qty'];

				// se cliente colocar mais do que
				// temos em stock, da um erro 
				if ($row['pd_qty'] > 0) {
				echo"<script>window.location='cart.php';alert('A quantidade que pediu é superior a quantidade existente em stock.');</script>";
					
				} else {
					// ja nao ha produto em stock
					echo"<script>window.location='cart.php';alert('Pedimos desculpa, mas o produto que deseja já não existe em stock');</script>";

					// remove do carrinho de compras
					deleteFromCart($cartId[$i]);	
					$numDeleted += 1;					
				}
			} 
            				
			// actualiza quantidade do produto
			$sql = sprintf("UPDATE `tbl_cart` SET `ct_qty` = %d, `pd_sizes` = '%s', `pd_colors` = '%s' WHERE `ct_id` = %d;", 
                           (int)$newQty, 
                           mysql_real_escape_string($new_pd_sizes),
                           mysql_real_escape_string($new_pd_colors),
                           (int)$cartId[$i]);
				
			dbQuery($sql);
		}
	}
	
	if ($numDeleted == $numItem) {
		header("Location: $returnUrl" . $_SESSION['shop_return_url']);
	} else {
		header('Location: cart.php');	
	}
	
	exit;
}

function isCartEmpty()
{
	$isEmpty = false;
	
	$sid = session_id();
	$sql = "SELECT ct_id
			FROM tbl_cart ct
			WHERE ct_session_id = '$sid'";
	
	$result = dbQuery($sql);
	
	if (dbNumRows($result) == 0) {
		$isEmpty = true;
	}	
	
	return $isEmpty;
}

/*
	Apaga todas entradas de carrinhos existentes a mais de 1 dia
*/
function deleteAbandonedCart()
{
	$yesterday = date('Y-m-d H:i:s', mktime(0,0,0, date('m'), date('d') - 1, date('Y')));
	$sql = "DELETE FROM tbl_cart
	        WHERE ct_date < '$yesterday'";
	dbQuery($sql);		
}

?>

sera que alguem me ajuda nisto

 

Será que ainda ng tem uma selução para o meu problema? eu agradeçia a quem me pudesse ajudar que me veja o que poderá se passar com o meu cart.

 

... Obrigado pelas ajudas... :S

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.