Ir para conteúdo

Arquivado

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

Vanderlan

Formularios Moeda PHP MySQL

Recommended Posts

Olá pessoal,

 

Eu tenho um formulario que está cadastrando os valores em dinheiro para o banco.

 

Mas o MySQL não aceita virgula, até ai tudo bem. Mas como vou fazer para o usuario quando colocar virgula cadastrar no banco como ponto?

 

O campo está como DOUBLE, e eu preciso fazer calculo com esse valores.

 

Valores como R$ 2.867,90.

 

Eu queria uma sugestão a nível de usuario para o formulario, tipo se o cara colocar 2.867,90., no banco vai cadastrar 2.86.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com ER vc certifica-se que é somente numero e a virgula, removendo os pontos

/[^0-9,]/i

com str_replace, vc substitui a virgula do formato BR do final por pontos

$valor = '2.867,90';

$valor = preg_replace('/[^0-9,]/i', '', $valor );
$valor = str_replace(',', '.', $valor);

echo $valor; //output 2867.90

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcio Yamagushi

Não coloquei como VARCHAR, por quer vou utilizar para calculos.



Williams Duarte obrigado pela a sua ajuda.

 

Segue o meu código.

 

Nesse caso como eu iria aplicar o str_replace?

 

 

$custoproj = $_POST["custoproj"];

$custohisto = $_POST["custohisto"];

 

 

esses dois campos que estou com problema, não postei o formulario HTML, mas se for necessario envio.

 

Obrigado pela ajuda.

 

 

<?php
mysql_close($conexao);
}
}

else // alterar obra
{

$projeto = $_POST["projeto"];
$expediente = $_POST["expediente"];
$titulo = $_POST["titulo"];
$municipio = addslashes ($_POST["municipio"]);
$fiscal = $_POST["fiscal"];
$poste = $_POST["poste"];
$consumidores = $_POST["consumidores"];
$custoproj = $_POST["custoproj"];
$datacontratacao = $_POST["datacontratacao"];
$prazoobra = $_POST["prazoobra"];
$dataenergi = $_POST["dataenergi"];
$si = $_POST["si"];
$datasi = $_POST["datasi"];
$datapasta = $_POST["datapasta"];
$concdefinicao = $_POST["concdefinicao"];
$custohisto = $_POST["custohisto"];
$gse = $_POST["gse"];
$materiais = $_POST["materiais"];
$status = $_POST["status"];
$sql="UPDATE controle SET
titulo='$titulo',expediente='$expediente',municipio='$municipio',fiscal='$fiscal',poste='$poste',consumidores='$consumidores',custoproj='$custoproj',
datacontratacao='$datacontratacao',prazoobra='$prazoobra',dataenergi='$dataenergi',si='$si',datasi='$datasi',datapasta='$datapasta',concdefinicao='$concdefinicao',custohisto='$custohisto',gse='$gse',materiais='$materiais',status='$status' WHERE
projeto='$projeto'";
$res2=mysql_query($sql);
//mysql_affected_rows() RETORNA A QUANTIDA DE LINHAS ALTERADAS COM O COMANDO SQL ANTERIOR
if (mysql_affected_rows()>0)
{
echo"<p align='center'>Obra alterada com
sucesso!</p>";
}
else
{
$erro=mysql_error();
echo "<p align='center'>Erro:$erro</p>";
}
mysql_close($conexao);
}
?>

</div>
</div>
</div>

<div class="row clearfix"></div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use como função.

function formatar_decimal($valor) {
	if(!is_numeric($valor)) {
		$valor = preg_replace('/[^0-9,]/i', '', $valor );
		$valor = str_replace(',', '.', $valor);
	}
	return $valor;
}
$custoproj = formatar_decimal($_POST["custoproj"]);
$custohisto = formatar_decimal($_POST["custohisto"]);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está apresentando o seguinte erro:

 

Fatal error: Call to undefined function formatar_decimal() in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\NOVOSIOCA\aperfeicoamento\alterar.php on line 546

 

 

 

O código ficou da seguinte maneria:

 

 

<?php
mysql_close($conexao);

function formatar_decimal($valor) {
if(!is_numeric($valor)) {
$valor = preg_replace('/[^0-9,]/i', '', $valor );
$valor = str_replace(',', '.', $valor);
}
return $valor;
}
}
}


else // alterar obra
{

$projeto = $_POST["projeto"];
$expediente = $_POST["expediente"];
$titulo = $_POST["titulo"];
$municipio = addslashes ($_POST["municipio"]);
$fiscal = $_POST["fiscal"];
$poste = $_POST["poste"];
$consumidores = $_POST["consumidores"];
$custoproj = formatar_decimal($_POST["custoproj"]);
$datacontratacao = $_POST["datacontratacao"];
$prazoobra = $_POST["prazoobra"];
$dataenergi = $_POST["dataenergi"];
$si = $_POST["si"];
$datasi = $_POST["datasi"];
$datapasta = $_POST["datapasta"];
$concdefinicao = $_POST["concdefinicao"];
$custohisto = formatar_decimal($_POST["custohisto"]);
$gse = $_POST["gse"];
$materiais = $_POST["materiais"];
$status = $_POST["status"];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funções é para ser colocada dentro de arquivo de configurações de inicialização, ou em uma classe Tools se OOP

 

Veja

 

vc tem um else

else // alterar obra
{

... Seus dados vindo do post

Aqui vc chama a função

E ainda quer que ache a função?

Veja que vc colocou a função dentro

if

E quer que ache?

Ai é abusar de nossa paciência. :assobiando:

Compartilhar este post


Link para o post
Compartilhar em outros sites

realmente.

 

Obrigado


Vou deixar o código caso alguém precise.

 

<?php
mysql_close($conexao);

}
}


else // alterar obra
{

function formatar_decimal($valor) {
if(!is_numeric($valor)) {
$valor = preg_replace('/[^0-9,]/i', '', $valor );
$valor = str_replace(',', '.', $valor);
}
return $valor;
}

$projeto = $_POST["projeto"];
$expediente = $_POST["expediente"];
$titulo = $_POST["titulo"];
$municipio = addslashes ($_POST["municipio"]);
$fiscal = $_POST["fiscal"];
$poste = $_POST["poste"];
$consumidores = $_POST["consumidores"];
$custoproj = formatar_decimal($_POST["custoproj"]);
$datacontratacao = $_POST["datacontratacao"];
$prazoobra = $_POST["prazoobra"];
$dataenergi = $_POST["dataenergi"];
$si = $_POST["si"];
$datasi = $_POST["datasi"];
$datapasta = $_POST["datapasta"];
$concdefinicao = $_POST["concdefinicao"];
$custohisto = formatar_decimal($_POST["custohisto"]);
$gse = $_POST["gse"];
$materiais = $_POST["materiais"];
$status = $_POST["status"];
$sql="UPDATE controle SET

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então absorva o estudo do jeito correto. Sua opinião é livre, porém, o método que sugere não é o método correto. Onde já se viu salvar valores monetários em campo varchar ? você acha mesmo que este é o tipo de campo correto ?

 

Estude mais, e mais, até entender pra que serve cada tipo de campo para o SGBD MySQL.

 

Indicação de estudo: http://forum.imasters.com.br/topic/191441-escolhendo-um-tipo-de-campo-correto/

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.