Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
bom galera... estou aki pra postar uma função que fiz aki no meu tempo ocioso pra resolver um problema meu, e que com ctz eh de muita gente ai tb...
validação de campos vazios...
ter que escrever não sei quatos if's pra validar cada campo... é phoda...
ai criei essa função que me quebrou um galhão...
function testaCampos(array $campos){
foreach($campos as $legenda => $campo){
$name = $campo['input'];
if(empty($_POST[$name])){
$camposVazios[] = sprintf("%s",$legenda);
}
}
if(count($camposVazios) > 0){
return 'Os seguintes campos estão vazios: '.implode(", ",$camposVazios);
}else{
return 1;
}
}
modo de Usar:
<?php
if($_GET['teste'] == 'teste'){
$args = array(
'Nome' => array('input' => 'nome'),
'Endereco' => array('input' => 'endereco'),
'Número' => array('input' => 'numero'),
'E-mail' => array('input' => 'email'),
'Login' => array('input' => 'login'),
'Senha' => array('input' => 'senha')
);
echo testaCampos($args);
}
?>
<form method="post" id="formulario" name="formulario" enctype="multipart/form-data" action="?teste=teste">
<input type="text" name="nome" id="nome" value="<?php echo $_POST['nome'];?>" />
<input type="text" name="endereco" id="endereco" value="<?php echo $_POST['endereco'];?>" />
<input type="text" name="numero" id="numero" value="<?php echo $_POST['endereco'];?>" />
<input type="email" name="email" id="email" value="<?php echo $_POST['email'];?>" />
<input type="text" name="login" id="login" value="<?php echo $_POST['login'];?>" />
<input type="text" name="senha" id="senha" value="<?php echo $_POST['senha'];?>" />
<input type="submit" name="mandar" id="mandar" value="Testar Campos" />
</form>
ah... e se alguém ai souber como forçar o PHP a reconhecer um input como tipo de dados NUMBER, me diga, pq nessa função eu tentei validar o tipo de dados tb... mais... o PHP só reconhece input como string...
pra isso...
se quiserem realizar o teste, e me ajudar a aprimorar esta função, façam o teste da seguinte forma(desta forma a função retorna o tipo de dados de cada campo...msmo usando a propriedade type="number" do HTML5 não funcionou...):
<?php
function testaCampos(array $campos){
foreach($campos as $legenda => $campo){
$name = $campo['input'];
$type = $campo['type'];
if(empty($_POST[$name])){
$camposVazios[] = sprintf("%s(%s)",$legenda,gettype($_POST[$name]));
}
if(gettype($_POST[$name]) != $type){
$camposErrados[] = sprintf("%s(%s)",$legenda,gettype($_POST[$name]));
}
}
if(count($camposVazios) > 0){
return 'Revise os campos: '.implode(", ",$camposVazios);
}else if(count($camposErrados) > 0){
return 'Caracteres Invalidos nos campos: '.implode(", ",$camposErrados);
}else{
return 0;
}
}
if($_GET['teste'] == 'teste'){
$args = array(
'Nome' => array('input' => 'nome', 'type' => string),
'Endereco' => array('input' => 'endereco', 'type' => string),
'Número' => array('input' => 'numero', 'type' => integer),
'E-mail' => array('input' => 'email', 'type' => string),
'Login' => array('input' => 'login', 'type' => string),
'Senha' => array('input' => 'senha', 'type' => string)
);
echo testaCampos($args);
}
?>
<form method="post" id="formulario" name="formulario" enctype="multipart/form-data" action="?teste=teste">
<input type="text" name="nome" id="nome" value="<?php echo $_POST['nome'];?>" />
<input type="text" name="endereco" id="endereco" value="<?php echo $_POST['endereco'];?>" />
<input type="number" name="numero" id="numero" value="<?php echo $_POST['endereco'];?>" />
<input type="email" name="email" id="email" value="<?php echo $_POST['email'];?>" />
<input type="text" name="login" id="login" value="<?php echo $_POST['login'];?>" />
<input type="text" name="senha" id="senha" value="<?php echo $_POST['senha'];?>" />
<input type="submit" name="mandar" id="mandar" value="Testar Campos" />
</form>eu sei, andrey, eu coloquei ai pra me ajudar durante o desenvolvimento da função, se quiserem, para utiliza-la, podem tirar e deixar somente a variavel $legenda.
eu que esqueci, na hora de postar, de retirar o sprintf
bom, galera... demorei, mais consegui ter tempo de terminar de escrever a função... espero que seja util pra muita gente... tah tudo bem comentado e explicado, mais... qualquer duvida... é só perguntar...
ah... e preste atenção aos comentarios iniciais que tem instruções de utilização... tah bem explicado tb...
espero poder ajudar alguém...
/*
* Função para validação de campos v1.1
* Autor: Jonatã Luiz Cioni
* Argumento unico array $campos
* modo de usar: testaCampos(array('name_do_input_a_ser_validado' => array("Legenda que aparecera para o usuario, em caso de algum erro","tipo_de_valor_do_campo")
*
* tipos que podem ser setados:
* string = em caso do campo somente puder ser digitado LETRAS
* inteiro = em caso do campo somente puder ser digitado NUMEROS
* email = validação para campo de email
* telefone = validação para campo de teleofne no formato: (000)0000-0000
* cep = validação de CEP no formato: 00000-000
* cpf_num = validação de CPF no formato: 00000000000
* cpf_num_ponto = validação de CPF no formato 000.000.000-00
*/
function testaCampos(array $campos){
//seta as variaveis que armazenarão os erros e define elas como array
$camposVazios = array();
$camposErrados = array();foreach($campos as $campo => $itens){
//verifica se o campo da que esta sendo verificado no loop esta vazio
if(empty($_POST[$campo])){
$camposVazios[] = strtoupper($itens[0])."<br/>";
}
//se não estiver vazio, verifica a compatibilidade dos dados digitados pelo usuario
if(!empty($_POST[$campo])){
//se tiver setado o tipo como string, a função valida-o como string
if($itens[1] == 'string' && !preg_match("/^[a-zA-Z]+$/",$_POST[$campo])){
$camposErrados[] = "No campo ".strtoupper($itens[0])." você só pode digitar letras<br/>";
}
//se tiver setado o tipo como inteiro, a função valida-o como inteiro
if($itens[1] == 'inteiro' && !preg_match("/^[0-9]+$/",$_POST[$campo])){
$camposErrados[] = "No campo ".strtoupper($itens[0])." você só pode digitar números<br/>";
}
//se tiver setado o tipo como email, a função valida-o como email
if($itens[1] == 'email' && !preg_match("/^[a-z0-9_\.\-]+@[a-z0-9_\.\-]*[a-z0-9_\-]+\.[a-z]{2,4}$/i",$_POST[$campo])){
$camposErrados[] = "Digite um E-mail válido no campo ".strtoupper($itens[0])."<br/>";
}
//se tiver setado o tipo como telefone, a função valida-o como telefone
if($itens[1] == 'telefone' && !preg_match("/^\(\d{3}\)[\s-]?\d{4}-\d{4}$/",$_POST[$campo])){
$camposErrados[] = "Digite o formato correto no campo ".strtoupper($itens[0])." => Correto: (000)0000-0000<br/>";
}
//se tiver setado o tipo como cep, a função valida-o como cep
if($itens[1] == 'cep' && !preg_match("/^[0-9]{5}([-][0-9]{3})$/",$_POST[$campo])){
$camposErrados[] = "Digite o formato correto no campo ".strtoupper($itens[0])." => Correto: 00000-000<br/>";
}
//se tiver setado o tipo como cpf_num, a função valida-o como cpf_num
if($itens[1] == 'cpf_num' && !preg_match("/^[0-9]{11}$/",$_POST[$campo])){
$camposErrados[] = "Digite o formato correto no campo ".strtoupper($itens[0])." => Correto: 00000000000<br/>";
}
//se tiver setado o tipo como cpf_num_ponto, a função valida-o como cpf_num_ponto
if($itens[1] == 'cpf_num_ponto' && !preg_match("/^[0-9]{3}\.[0-9]{3}\.[0-9]{3}\-[0-9]{2,2}$/",$_POST[$campo])){
$camposErrados[] = "Digite o formato correto no campo ".strtoupper($itens[0])." => Correto: 000.000.000-00<br/>";
}
}
} $retorno.= "Os seguintes campos Obrigatórios estão vazios:<br/>".implode("",$camposVazios);
}
//se tiver campos vazios e campos com erro... pula uma linha para não ficar tudo muito junto
if(count($camposVazios) > 0 && count($camposErrados) > 0){
$retorno.= '<br/>';
}
//se tiver campos com erros... mostra-os
if(count($camposErrados) > 0){
$retorno.= "Ocorreram os seguintes erros:<br/>".implode("",$camposErrados);
} $retorno = 0;
}
return $retorno;
}
Certo, pra que isso aqui ?
$camposVazios[] = sprintf("%s",$legenda);
Esse sprintf é desnecessário ..