Ir ao conteúdo

Problema com tipo de dados no Banco de Dados


Wesj

Posts recomendados

Postado

Boa noite galera, eu estou com um problema que não sei mas como resolver, é o seguinte.

eu acabei de fazer um joga virtual com PHP, e estou com o seguinte problema, quando o usuario faz uma compra com o valor nesse acima de 1.254,47 ai ele só insere la na tabela do meu Banco de Dados o seguinte: 1.254. por favor me ajudem...

  • Moderador
Postado

Olá,

por gentileza dê mais detalhes.

Se possível poste o código em php... a estrutura da tabela que quer inserir o dado...

e etc.. dê o máximo de informações possíveis

Att,

Dif

Postado

<?php
if(isset($parametros[1]) && $parametros[1] == 'add' && isset($parametros[2]) && $parametros[2] != '0'){
$idProd = (int)$parametros[2];
$carrinho->verificaAdiciona($idProd);
}

if(isset($_SESSION['wfp_produto'][0])){unset($_SESSION['wfp_produto'][0]);}
if(count($_SESSION['wfp_produto']) == 0){unset($_SESSION['valor_frete']);}

//verifica se o produto que o usuário está tentando adicionar está disponível para compra no banco de dados
$verificar_no_banco = BD::conn()->prepare("SELECT estoque FROM `loja_produtos` WHERE id = ?");
$produto_Id = (int)$parametros[2];
$verificar_no_banco->execute(array($produto_Id));
$fetchEstoque = $verificar_no_banco->fetchObject();
if($fetchEstoque->estoque == '0'){
unset($_SESSION['wfp_produto'][$produto_Id]);
echo '<p id="aviso">Desculpe, mais este produto encontra-se em falta em nosso estoque!</p>';
}


if(isset($parametros[1]) && $parametros[1] == 'add' || isset($_POST['atualizar'])){
unset($_SESSION['valor_frete']);
foreach($_SESSION['wfp_produto'] as $id => $qtd){
unset($_SESSION['valor_frete_'.$id]);
}
}

if(isset($parametros[1]) && $parametros[1] == 'del' && isset($parametros[2])){
$idDel = (int)$parametros[2];
if($carrinho->deletarProduto($idDel)){
echo '<script>alert("Produto deletado do carrinho");location.href="'.PATH.'/carrinho"</script>';
}else{
echo '<script>alert("Erro ao deletar produto");location.href="'.PATH.'/carrinho"</script>';
}
}

if(isset($_POST['prodSingle'])){
$produtoValor = $_POST['prodSingle'];

if($carrinho->setarByPost($produtoValor)){}else{
echo '<p id="aviso">Não foi possivel adicionar este produto</p>';
}
}

if(isset($_POST['atualizar'])){
$produto = $_POST['prod'];
foreach($produto as $chave => $qtd){
$selecionar_produto = BD::conn()->prepare("SELECT * FROM `loja_produtos` WHERE id = ?");
$selecionar_produto->execute(array($chave));
$fetchProd = $selecionar_produto->fetchObject();
if($qtd > $fetchProd->estoque){
echo '<p id="aviso">Não é possivel adicionar mais que: '.$fetchProd->estoque.' produtos para compra deste produto: '.$fetchProd->titulo.'</p>';

$warn = true;
}
}
if($warn == true){}else{
if($carrinho->atualizarQuantidades($produto)){
echo '';
}else{
echo '<script>alert("Erro ao alterar quantidades");location.href="'.PATH.'/carrinho"</script>';
}
}
}
//frete
if(isset($_POST['acao']) && $_POST['acao'] == 'calcular'):
$frete = $_POST['frete'];
$_SESSION['frete_type'] = $frete;
$cep = strip_tags(filter_input(INPUT_POST, 'cep'));
switch($frete){
case 'pac';
$valor = '41106';
$peso_total = 0;
foreach($_SESSION['wfp_produto'] as $id => $qtd){
$selecionar_produto = BD::conn()->prepare("SELECT peso FROM `loja_produtos` WHERE id = ?");
$selecionar_produto->execute(array($id));
$fetch_produto = $selecionar_produto->fetchObject();

$_SESSION['valor_frete_'.$id] = $carrinho->calculaFrete($valor, 26010600, $cep, $fetch_produto->peso);
}
break;

case 'sedex';
$valor = '40010';
$peso_total = 0;
foreach($_SESSION['wfp_produto'] as $id => $qtd){
$selecionar_produto = BD::conn()->prepare("SELECT peso FROM `loja_produtos` WHERE id = ?");
$selecionar_produto->execute(array($id));
$fetch_produto = $selecionar_produto->fetchObject();

$_SESSION['valor_frete_'.$id] = $carrinho->calculaFrete($valor, 26010600, $cep, $fetch_produto->peso);
}
break;
}
endif;
$_SESSION['valor_frete'] = 0;
foreach($_SESSION['wfp_produto'] as $id => $qtd){
$_SESSION['valor_frete_'.$id] = str_replace(",",".",$_SESSION['valor_frete_'.$id]);


$_SESSION['valor_frete'] += $_SESSION['valor_frete_'.$id]*$qtd;
}
?>
<div id="carrinho-page">
<h1 class="title-page"/><img src="<?php echo PATH;?>/img/loja_cart_title.png" border="0" alt="0" />Minhas Compras</h1>
<form action="<?php echo PATH.'/carrinho/atualizar';?>" method="post" enctype="multipart/form-data">
<table border="1" cellpadding="0" cellspacing="0" class="carrinho">
<thead>
<tr>
<th>Produto</th>
<th>Quantidade</th>
<th>Valor Unitário</th>
<th>Sub Total</th>
<th>Excluir</th>
</tr>
</thead>
<tbody>
<?php
if($carrinho->qtdProdutos() == 0){
echo '<tr><td colspan="5">Não existem produtos em seu carrinho!</td></tr>';
}else{
$total = 0;
foreach($_SESSION['wfp_produto'] as $id => $quantidade){
$id = (int)$id;
$selecao = BD::conn()->prepare("SELECT * FROM `loja_produtos` WHERE id = ?");
$selecao->execute(array($id));
$fetchProduto = $selecao->fetchObject();
?>
<tr>
<td><img src="<?php echo PATH;?>/produtos/<?php echo $fetchProduto->img_padrao;?>" width="100" title="<?php echo $fetchProduto->titulo;?>" id="prodimg" alt="" border="0" /><span><?php echo $fetchProduto->titulo;?></span></td>
<td><input type="text" name="prod[<?php echo $id;?>]" value="<?php echo $quantidade;?>" size="3"/></td>
<td class="unitario">R$ <?php echo number_format($fetchProduto->valor_atual, 2,',','.');?></td>
<td class="sub">R$ <?php echo number_format($fetchProduto->valor_atual * $quantidade, 2,',','.');?></td>

<td><a href="<?php echo PATH.'/carrinho/del/'.$id;?>" title="Deletar Produto"><img src="<?php echo PATH;?>/img/del.png" border="0" alt=""/></a></td>
</tr>
<?php $total += $fetchProduto->valor_atual *$quantidade;}}?>

<tr>
<td colspan="4" align="right" class="last">Total:</td>
<td class="total last">R$
<?php echo (isset($_SESSION['valor_frete'])) ? number_format($total+$_SESSION['valor_frete'],2,',','.') : number_format($total, 2, ',','.');?></td>
</tr>
</tbody>
</table>
<input type="submit" value="Atualizar Quantidades" id="update" name="atualizar"/>
</form>
<div id="opções">
<div id="outros">
<span id="resultado-frete">Valor do frete: R$
<?php echo $_SESSION['valor_frete'];?></span>
<a href="<?php echo PATH.'/verificar';?>" id="finalizar">Finalizar Compra</a>
<a href="<?php echo PATH;?>" id="continuar">Continuar Comprando</a>
</div>
<div class="calcular">
<form action="<?php echo PATH.'/carrinho';?>" method="post" enctype="multipart/form-data">
<input type="submit" value="Calcular Frete" />
<label>
<span>Escolha a forma de envio</span>
<select name="frete">
<option value="">Selecione...</option>
<option value="pac">PAC</option>
<option value="sedex">SEDEX</option>
</select>
</label>
<label>
<span>Seu CEP</span>
<?php if($login->isLogado()){?>
<input type="text" name="cep" value="<?php echo $usuarioLogado->cep?>" />
<?php }else{?>
<input type="text" name="cep" value=""/>
<?php }?>
</label>
<input type="hidden" name="acao" value="calcular" />
</form>
</div><!-- -->
</div><!-- opções-->
</div><!-- carrinho - page -->
<?php
(isset($_SESSION['valor_frete'])) ?
$_SESSION['total_compra'] = number_format($total+$_SESSION['valor_frete'],2,',','.') :
$_SESSION['total_compra'] = number_format($total,2,',','.');
$_SESSION['total_compra'] = str_replace(",",".", $_SESSION['total_compra']);
?>

loja_pedidos.jpg

  • Moderador
Postado

Olá

acredito que seja o erro está dando porque os campos: 3 e 8 da sua tabela estão como varchar.

Quando se trabalha com valores monetários, deve-se usar o tipo "Double" no tamanho de 9,2

Postado
Olá

acredito que seja o erro está dando porque os campos: 3 e 8 da sua tabela estão como varchar.

Quando se trabalha com valores monetários, deve-se usar o tipo "Double" no tamanho de 9,2

não é esse problema, pois mesmo colocando o tipo "Double"(9,2) quando ele insere o valor na minha tabela ele insere da seguinte forma: 1.42 e eu não quero que ele exiba somente isso eu quero que ele exiva o valor todo: 1.427,50

  • Moderador
Postado

Amigo, só o fato de você cadastrar valores monetários em "varchar" já é errado.

Você precisa entender que o campo da tabela DEVE ser ou float ou Double. No caso, o melhor dos dois é o double no tamanho de 9,2.

agora no php.. SEU erro é porque está formatando o valor monetário antes de inserir no banco.

O formato double no banco é: 1234.50

ou seja, "1.234,50"

Quando se tenta inserir o valor monetario no campo de forma errada.. ele arredonda. no caso é o que aconteceu ...

forma errada

1.427,50

forma certa

1427.50

Sugestão:

No seu carrinho.. crie duas variáveis para os valores.. formatados (mostrar para o usuário que esta comprando).. e outra sem o number format para inserir no banco.

Postado

tem como você fazer pra mim ?

Eu já consegui resolver, muito Obrigado.

eu botei o campo sem o number_format, o comprador visualiza o valor normal, sendo que quando envia para a tabela ele vai sem formatação e já pega a do double.

já deu tudo certo.

  • Moderador
Postado

Caso o autor necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

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

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!