Ir para conteúdo

POWERED BY:

Arquivado

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

criatividade zero

verificação de valores decimais

Recommended Posts

preciso fazer algumas verificações com campos INT e FLOAT antes de gravar no BD

se eu receber um input e quiser verificar se é menor que 100:

 

1) (float)'7E1' // 70

70 é menor que 100

2) (int)'7E1' // 7

7 é menor que 100

 

nos 2 casos ele vai dizer que posso gravar 7E1, mas se eu quero trabalhar com valor isso nao rola...

obviamente ctype_digit tambe nao funciona pq posso receber um decimal com virgula

 

alguem tem uma solução para trabalhar com valores?

Compartilhar este post


Link para o post
Compartilhar em outros sites

basta você fazer uma validação dos dados recebidos ex:

 

<?php

$campo = intval($_POST['campo']); // A FUNÇÃO INTVAL TRANSFORMA A STRING EM VALOR INTEIRO

if($campo =< 100 ){ // Verifica se o numero é maior ou igual a 100

// Aqui você executa os comandos que quiser....

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

basta você fazer uma validação dos dados recebidos ex:

 

<?php

$campo = intval($_POST['campo']); // A FUNÇÃO INTVAL TRANSFORMA A STRING EM VALOR INTEIRO

if($campo =< 100 ){ // Verifica se o numero é maior ou igual a 100

// Aqui você executa os comandos que quiser....

}

 

$input = '123'

intval( $input ) // int(123 )

 

$input = 'PHP'

intval( $input ) // int( 0 )

 

if( intval( $input ) =< 100 )

entao se if( 0 =< 100 ) quer dizer que tenho 'PHP' como um numero valido

 

 

 

 

 

ja li mais do que vc imagina e nao adiantam essas funções nativas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos recapitular. Você receberá um valor, que poderá ser uma string e quer saber se ele é numérico ou string para verificar se é menor que 100?Estou correto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

se é menor, maior, entreou igual... é uma classe de validação

validação de string nao tem misterio, mas validar n. complica

 

se eu receber uma string e forçar (int) vai ser zero e vai dizer que a string é menor que 100 como no exemplo

tb é complicado usar float... notações cientificas pioram ainda mais, mas nem vou abordar estes casos agora, estou só de olho em positivo, negativo e decimais

 

ctype_digit tb nao funcionará se eu receber um decimal

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use is_numeric então, isso vai te informar se é um número (int, float, etc...), ai você faz o if para ver se é mais, menos, igual, etc...

Compartilhar este post


Link para o post
Compartilhar em outros sites


<?php

 

$input = 'PHP';

 

$campo = intval($input); // A FUNÇÃO INTVAL TRANSFORMA A STRING EM VALOR INTEIRO

if($campo =< 100 ){ // Verifica se o numero é maior ou igual a 100

if($input == '0'){

 

}else{

// AQUI EXECUTA OS COMANDOS

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use is_numeric então, isso vai te informar se é um número (int, float, etc...), ai você faz o if para ver se é mais, menos, igual, etc...

is_numeric vai me informar se é numerico com true/false... hexadecimal "são numericas"

basta testar is_numeric( '0xf4c3b00c' ) // true

nao posso gravar 0xf4c3b00c como um valor monetario

 

@victorqueiroz

seu exemplo nao é ruim, mas seria melhor com floatval, ja que eu quero validar DECIMAIS

o problema é que floatval tb retornar true em notações cientificas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para validar valores monetários, o melhor neste caso é com expressão regular! ;)

<?php
function isPrice($price)
{
	return preg_match('/^[-]?[0-9]{1,10}(\.[0-9]{1,9})?$/', $price);

}

var_dump( isPrice( '0xf4c3b00c' ));

Somente positivos

/^[0-9]{1,10}(\.[0-9]{1,9})?$/

http://php.net/manual/en/function.preg-match.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu tinha medo de ter que me prender nas ERs...valor monetario nao é meu forte

o limite são 10N . 10N?

 

 

 

se eu criar uma ER para verificar se exitem chars que nao sejam (0-9) para integer e (0-9.) para os decimais, assim excluem as ocorrencias hexa. e cientificas:

para casos integer se a ER validar eu posso forçar (int)

para casos decimais se a ER validar eu posso forçar (float)

ambos vao trabalhar apenas quando o input for 0-9 e/ ou decimal

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sinceramente não estou entendendo o motivo da preocupação sobre esta validações monetárias.

 

Que eu saiba valores monetários expresso numericamente é 0.000000 ou -0.000000

 

Se mesmo assim o valor der uma de "Neymar" e driblar as validações.

 

Você ainda tem a opção de não aceitar no banco de dados e tratar o erro.

 

por exemplo se tentar inserir o valor 0xf4c3b00c, em um campo do tipo double vai gerar erro.

`price`  double(10,6) NULL DEFAULT NULL , //0.000000

e se inserir o valor 0xf4c3b00c, em um campo do tipo decimal, o valor inserido vai ser 0.0000

`price`  decimal(10,6) NULL DEFAULT NULL , //0.000000

Não sei qual o motivo da discordância deste do inicio do tópico.

 

A não ser que você vai gravar isso em um xml, ai é outra historia ou em um campo do tipo char. :dormindo:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sinceramente não estou entendendo o motivo da preocupação sobre esta validações monetárias.

vamos la... tenho uma tbl decimal e pretendo gravar um valor em reais - por exemplo - 1.99

1.99 é um numero decimal :)

passa pela validação de tipo sem problema

 

 

2E1 tb vai passar e vai salvar 20.00

mas nao deve passar pela validação pq numero é 0-9... notação cientifica, hexadecimais e afins contem caracteres nao numericos.

 

 

nao ha discordância no topico, so procuro uma forma de validar os malditos benditos numeros. :innocent:

 

edit

como um filtro em js que impede [a-z] em form, eu so quero garantir que um valor recebido seja numerico de 0-9

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque você não trata isso em uma mascara em js?

Vou ver se tenho um exemplo aqui com jquery o um javascript puro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara eu ia te passar uma função que monta a mascara de acordo com as teclas apertadas, mas como não rola, perdeu a oportunidade.

 

Pelo jeito é do tipo de cara que já sabe tudo!

 

Trecho:

if (tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105) {

        if (tam <= dec) {
            campo.value = vr;
        }

        if ((tam > dec) && (tam <= 5)) {
            campo.value = vr.substr(0, tam - 2) + "," + vr.substr(tam - dec, tam);
        }
        if ((tam >= 6) && (tam <= 8)) {
            campo.value = vr.substr(0, tam - 5) + "." + vr.substr(tam - 5, 3) + "," + vr.substr(tam - dec, tam);
        }
        if ((tam >= 9) && (tam <= 11)) {
            campo.value = vr.substr(0, tam - 8) + "." + vr.substr(tam - 8, 3) + "." + vr.substr(tam - 5, 3) + "," + vr.substr(tam - dec, tam);
        }
        if ((tam >= 12) && (tam <= 14)) {
            campo.value = vr.substr(0, tam - 11) + "." + vr.substr(tam - 11, 3) + "." + vr.substr(tam - 8, 3) + "." + vr.substr(tam - 5, 3) + "," + vr.substr(tam - dec, tam);
        }
        if ((tam >= 15) && (tam <= 17)) {
            campo.value = vr.substr(0, tam - 14) + "." + vr.substr(tam - 14, 3) + "." + vr.substr(tam - 11, 3) + "." + vr.substr(tam - 8, 3) + "." + vr.substr(tam - 5, 3) + "," + vr.substr(tam - 2, tam);
        }
    }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara eu ia te passar uma função que monta a mascara de acordo com as teclas apertadas, mas como não rola, perdeu a oportunidade.

 

Pelo jeito é do tipo de cara que já sabe tudo!

vai ficar com raiva só pq minha duvida é com PHP e vc quer me passar uma função em JS?

pelo jeito é do tipo de cara que acha que JS resolve segurança... mas enfim, obrigado pela tentativa

ok, ai eu uso JS e o usuario desabilita... agora fico sem validação ou vou continuar precisando do PHP

 

a sua ER vai ser util para validar cada tipos

mas continua aberto para para outras opções alem de preg

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe 03 níveis de validação e o php e o último recurso,

 

Se um sistema é totalmente em ajax, e o javascript estiver desabilitado, você ainda pode carregar uma versão normal e validar pelo php, ou até mesmo mostrar uma mensagem referente em como habilita-lo ou redirecionar ele para outra página etc., ou não permitir o acesso se precisar de fato do JS.

 

Não disse que "JS resolve segurança", mas não me limito ao meu conhecimento, procuro por alternativas antes de afirmar qualquer coisa.

 

Sem mais...

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.