Ir para conteúdo

POWERED BY:

Arquivado

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

roger_php

Problemas com valor monetário em PHP

Recommended Posts

Nossa estou penando e não acho uma solução.....Gostaria que quando o usuário fosse digitar num input text o número já fosse formatado em valor monetário...mas o problema maior é quando vou gravar no BD, pois ele não aceita virgulas....existe alguma solução?

Compartilhar este post


Link para o post
Compartilhar em outros sites

aceita sim, qual o tipo de campo que esta usando ?se você usar virgula acho que pode te atrapalhar, usa ponto depois você da um number_format() "passa os parametros na hora de imprimir".no mysql pode usar varchar mesmo ou doubla(20,2)ae ele grava assim: 2000.00e com o number_format(paramentros...), você pode imprimir assim:2.000,00e consegue depois fazer um select usando o SUM pra somar tudo se precisar.espero ter ajudado, abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz uma função que trata os valores antes de armazenar no banco, independente como o usuário digitar, usando "ponto" ou "virgula" é tratada. Assim é possivel usar uma mascara em javascript no front-end.

 

 

function entradaMonetaria($valor){//By Alessandro Gonzalez		$situacao = substr_count($valor, ".");		$situacao += substr_count($valor, ",");		if($situacao > 0){			$subs = array (",",".");				$valor = str_replace($subs,"",$valor);				$decimal = substr($valor, -2);				$valor = substr($valor, 0, -2);				$valor = $valor.".".$decimal;				return $valor;			} else {				return $valor;		}}

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

ao utilizar o codigo no drewanweaver CS5 o mesmo gera a seguinte mensagem de erro

 

"Ocorreu um erro de JavaScript durante a execução de analyzeServerBehavior em InsertRecord.htm."

 

 

no caso estou intercalando sua função, mais um Javascript:

 

 

function entradaMonetaria($valor){
//By Alessandro Gonzalez

       $situacao = substr_count($valor, ".");

       $situacao += substr_count($valor, ",");

       if($situacao > 0){

               $subs = array (",",".");

               $valor = str_replace($subs,"",$valor);

               $decimal = substr($valor, -2);

               $valor = substr($valor, 0, -2);

               $valor = $valor.".".$decimal;

               return $valor;

       } else {

               return $valor;

       }

}

 

 

 

Javascript que acrescenta virgula e ponto.

 

<script>
function moeda(campo, e)
{
  var SeparadorDecimal = ","
  var SeparadorMilesimo = "."
  var sep = 0;
  var key = '';
  var i = j = 0;
  var len = len2 = 0;
  var strCheck = '0123456789';
  var aux = aux2 = '';
  var whichCode = (window.Event) ? e.which : e.keyCode;




  if (whichCode == 13) return true;
  key = String.fromCharCode(whichCode); // Valor para o código da Chave

  if (strCheck.indexOf(key) == -1) return true; // Chave inválida
  len = campo.value.length;
  for(i = 0; i < len; i++)

          if ((campo.value.charAt(i) != '0') && (campo.value.charAt(i) != SeparadorDecimal)) break;
  aux = '';
  for(; i < len; i++)

          if (strCheck.indexOf(campo.value.charAt(i))!=-1) aux += campo.value.charAt(i);
  aux += key;
  len = aux.length;

  if (len == 0) campo.value = '';
  if (len == 1) campo.value = '0'+ SeparadorDecimal + '0' + aux;
  if (len == 2) campo.value = '0'+ SeparadorDecimal + aux;
  if (len > 2) {
          aux2 = '';
          for (j = 0, i = len - 3; i >= 0; i--) {
                  if (j == 3) {
                          aux2 += SeparadorMilesimo;
                          j = 0;
                  }
                  aux2 += aux.charAt(i);
                  j++;
          }
          campo.value = '';
          len2 = aux2.length;
          for (i = len2 - 1; i >= 0; i--)
          campo.value += aux2.charAt(i);
          campo.value += SeparadorDecimal + aux.substr(len - 2, len);
}
  return false;

}
</script>

 

consegue entender algo relacionado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usar varchar para armazenar um dado numérico não faz o minimo sentido. Os tipos de campos existem para ser usados corretamente. O que é número fica em campo do tipo numérico.

 

Isso evita dores de cabeça futuras

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.