Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
>
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
>
Recomendo as leituras:
http://aprenderphp.com.br/artigo/conversao-de-tipos-de-dados-no-php/
https://php.net/manual/pt_BR/language.types.integer.php
http://php.net/manual/en/function.intval.php
http://au1.php.net/manual/en/function.floatval.php
ja li mais do que vc imagina e nao adiantam essas funções nativas
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?
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
Quem pode informar os valores, qualquer pessoa? Que tipo de dado é este?
recebo como string mas posso criar uma marcação de tipo junto com a regra de validação para cada caso sem problema
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...
<?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
}
}
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
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
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
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:
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
Porque você não trata isso em uma mascara em js?
Vou ver se tenho um exemplo aqui com jquery o um javascript puro.
validar form com jr nao rola, eu so dei um exemplo
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);
}
}>
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
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...
Se eu entendi direito criatividade zero, Williams Duarte em meias palavras ele disse para você estudar mais, e não se limitar ao que você sabe, vejo isso muito aqui nos fóruns Brasileiros, a sublinhada aprende o básico e acham que são master. :sleep:
E Williams Duarte, posta o restante desta formatação de preços em JS, o que acha na web é em Jquery. :)
>
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.
1. acessibilidade
2. se eu uso o PHP como validador eu nao preciso me preocupar se a validação na camada cliente esta habilitada ou desabilitada
3. imagina integrar uma API e criar verificadores separados - OMG³
>
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...
e eu nao estou procurando alternativas dentro do que eu preciso?
se for para JS e esperar que o usuario o tenha habilitado, é muito mais facil/pratico usar HTM5...
<input type="number" step="0.01" min="3" >
hehehe sua dúvida era de input agora vem falar de API, isso de fato são camadas diferentes. :ninja:
Não se usa numerador para preço
<input type="number" step="0.01" min="3" >
para isso existe regex
pattern="\d+(\,\d{2})?"
hehehe sua dúvida era de input agora vem falar de API, isso de fatos são camadas diferentes. :ninja:
Will... a API só dei um motivo para nao me prender ao uso de JS.
Eu sei que existem n tipos de verificações, mas pq dividir se podemos centrar no PHP?
JS eu uso como máscara apenas para informar como deve ser o preenchimento correto do campo, se o usuario quiser burlar o JS eu pego no PHP.
basta você fazer uma validação dos dados recebidos ex:
if($campo =< 100 ){ // Verifica se o numero é maior ou igual a 100
// Aqui você executa os comandos que quiser....
}