Vanderlan 2 Denunciar post Postado Abril 21, 2015 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
Williams Duarte 431 Denunciar post Postado Abril 21, 2015 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 0 Denunciar post Postado Abril 21, 2015 porque não coloca varchar mesmo, só validar o registro do campo Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Abril 21, 2015 @Marcio Yamagushi Te aconselho estudar um pouco mais... Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Abril 21, 2015 Se quer uma sugestão a nível de usuário para formulário, use uma máscara: http://plentz.github.io/jquery-maskmoney/ De qualquer sorte, valide os dados no PHP também. Compartilhar este post Link para o post Compartilhar em outros sites
Vanderlan 2 Denunciar post Postado Abril 21, 2015 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. <?phpmysql_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 SETtitulo='$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' WHEREprojeto='$projeto'";$res2=mysql_query($sql);//mysql_affected_rows() RETORNA A QUANTIDA DE LINHAS ALTERADAS COM O COMANDO SQL ANTERIORif (mysql_affected_rows()>0){echo"<p align='center'>Obra alterada comsucesso!</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
Williams Duarte 431 Denunciar post Postado Abril 21, 2015 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
Vanderlan 2 Denunciar post Postado Abril 21, 2015 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: <?phpmysql_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
Williams Duarte 431 Denunciar post Postado Abril 21, 2015 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
Vanderlan 2 Denunciar post Postado Abril 21, 2015 realmente. Obrigado Vou deixar o código caso alguém precise. <?phpmysql_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
Alaerte Gabriel 662 Denunciar post Postado Abril 21, 2015 Saudações. <?php echo number_format( $valor , 2 , ' , ' , ' . ' ); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Yamagushi 0 Denunciar post Postado Abril 22, 2015 @Marcio Yamagushi Te aconselho estudar um pouco mais... Eu já estudo todo dia....... Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Abril 22, 2015 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