Jump to content


Photo

Validação De Formulário (básico)


  • Faça o login para participar
22 replies to this topic

#16 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

Posted 26/06/2008, 16:15

1 :: validação PHP é mais segura
2 :: validação Javascript irrita o usuário muito menos

Se for o caso, use as duas! ;)
Mas eu acho que uma modelagem de dados bem feita dispensa a validação no PHP na maioria dos casos.

#17 donizeth

donizeth

    Normal

  • Usuários
  • 77 posts
  • Sexo:Masculino

Posted 26/06/2008, 17:49

boirock valeu pela dica, usando o codigo do Adrielso logo acima, eu xeguei nesse codigo:

PROBLEMA:
1º - Se der algum erro, o formulário é todo limpo, tendo o trabalho de ter que preencher tudo novamente.
2º - Se eu preencher tudo corretamente inclusive o CPF, so que eu esquecer algum campo em branco por exemplo CIDADE, ele acusa que a CIDADE esta com erro mais também acusa que o CPF esta invalido, mesmo que eu tenha preenchido o CPF corretamente.

So falta isso pra eu terminar, resolver estes dois problemas.

<?php  
	/* Se o CPF estiver no formato inválido vai aparecer aqui: */
	if ($ver=="VerOk") {
	
	if ($status) {
	include "class/cad.php";
	}
	else {
	echo "<div id=\"erros\">
	<div style=\"background: #F4C400; padding: 3px; text-align:left;\">
	<p>Ocorreram alguns problemas durante a tentativa de cadastro, os campos abaixo estão inválidos:</p></div>";
	/* Verifica os outros campos do formulário */
	if ($nome == "") { echo "* Nome completo <br />"; }
	if ($email == "") { echo "* E-mail <br />"; }
	if ($empresa == "") { echo "* Empresa <br />"; }
	if ($telefone == "") {echo "* Telefone <br />";}
	if ($endereco == "") {echo "* Endereço <br />";}
	if ($numero == "") {echo "* Número <br />";}
	if ($bairro == "") {echo "* Bairro <br />";}
	if ($cidade == "") {echo "* Cidade <br />";}
	if ($cep == "") {echo "* Cep <br />";}
	if ($descricao == "") {echo "* Descrição da Empresa <br />";}

	else { echo "O CPF: $cpf É INVÁLIDO!"; }
	} }
	echo "</div>";
	?></td>

Acima desse codigo tem o codigo de validacao de CPF do Adrielso.

OBS: A unica desvantagem em usar JS é de que o usuario pode desabilitar o JS? O padrao dos browser é com JS habilitado correto?

Aguardo resposta gente pra mim termina com esse formulário e entender de uma vez por todas as vantagens e desvantagens do uso de JS.

Vlw gente pela ajuda... ta sendo extremamente util para mim a ajuda de vcs.... vlwwww

#18 victorhb

victorhb

    24 Horas

  • Usuários
  • 489 posts
  • Sexo:Masculino
  • Localidade:Brasília-DF

Posted 26/06/2008, 18:32

humm, agora entendi victorhb, essa seria a unica desvantagem de usar JS? e tpw, o modo padrão dos browser é o JAVA habilitado ou desabilitado?

Adrielso, adaptei teu codigo em meu site, e surgiu um problema tpw, se eu preencher o formulario todo, e o CPF estiver inválido, o formulário é completamente limpo, fazendo com que o usuário tenha que digitar todo o formulário novamente, teria como contornar isso? fazendo com q ele mostre o erro mais não apague o formulário? Obrigado a todos.... aguardo respostas se possivel....



OBS: estou esclarecendo todas minhas dúvidas em relação a isso graças a vcs.... vlw...


É habilitado sim, mas a questão é que o usuário tem o poder de desativar quando quiser e se ele fizer isso, vários dados indesejáveis serão inseridos no seu banco de dados.

#19 donizeth

donizeth

    Normal

  • Usuários
  • 77 posts
  • Sexo:Masculino

Posted 26/06/2008, 18:55

agora tudo correto victorhb, entendi as vantagens e desvantagens em usar JS no form, muito obrigado..... vlw msm......

agora so falta resolver esses dois problemas... brigadao...

#20 Adrielso P. Teodoro

Adrielso P. Teodoro

    Novato no fórum

  • Usuários
  • 24 posts
  • Sexo:Masculino
  • Localidade:Campinas/SP
  • Interesses:PHP, Hardware, HTML, CSS e XML

Posted 27/06/2008, 11:40

Opa tudo certo amigo???
1 º Problema: Então você poderia usar o java script:history.back(-1); que retornaria na página sem perder os dados digitados no código que fiz não coloquei pois erra somete um exemplo vou te mandar o novo que tbm é Bem simples mais se precisar posso fazer uma mais melhorado para você testar... Também existem outras formas de fazer isso... um exemplo: (Você poderia jogar os valores digitados para variáveis e jogar na URL, e depois na página cadastro.php dar um echo... neles...). Também existem... outras possíbilidades... Mas da uma olhada nesse código.. aí!!!

Segue abaixo o código:

Página: cadastro.php

<html>
<head>
<title> Formul&aacute;rio B&aacute;sico</title>
</head>
<body>
<form method="POST" action="insere.php">
Nome: <input type="text" name="nome" title="Digite seu nome" size="15">
E-mail: <input type="text" name="email" title="Digite seu e-mail" size="15">
CPF: <input type="text" name="cpf" title="Digite seu CPF">
<input type="submit" value="Enviar" name="BtnEnviar">
</form>
</body>
</html>
<?
if ($msg==1){
	echo "&lt;script>alert('Cadastro efetuado com sucesso.')</script>";
}


?>

Página: insere.php

<?php
include "funcoes.php"; //Inclui pagina com funções.

if (empty($nome) OR strlen($nome)<5) {
	echo "&lt;script>alert('Digite o nome corretamente!')</script>";
	echo "&lt;script>java script:history.back(-1);</script>";
}
elseif(empty($email) OR strlen($email)<8){
	echo "&lt;script>alert('Digite o E-mail corretamente!')</script>";
	echo "&lt;script>java script:history.back(-1);</script>";
}
elseif (!verificacpf($cpf) OR empty($cpf)){
	echo "&lt;script>alert('O CPF digitado é inválido!')</script>";
	echo "&lt;script>java script:history.back(-1);</script>";
}
else {
	$sql = mysql_query("INSERT INTO seudb (nome, email, cpf) VALUES ('$nome','$email','$cpf')");
	header("Location: cadastro.php?msg=1");
}


?>

Página: Funcoes.php (Nessa página nada foi alterado).

<?php

conexaobd(); //Inicia a conexão com banco de dados.

function conexaobd(){

$conexao = mysql_connect("seuservidor","seuusuario","suasenha");
$bd = mysql_select_db("seubd");

}

function verificacpf($cpf){

 //VERIFICA SE O QUE FOI INFORMADO É NÚMERO SE NÃO FOR SO NÚMEROS SÃO RETIRADOS OS PONTOS E DIGITOS.
 if(!is_numeric($cpf)) {
  $cpf = str_replace(".","",$cpf);
  $cpf = str_replace("-","",$cpf);
 }
 //VERIFICA SE O VALOR DE $cpf ESTÁ VAZIO OU NÃO NÚMERICO
 if(!is_numeric($cpf) OR empty($cpf))
 {
   return 0; //SE VERDADEIRO ATRIBUI O VALOR false À VARIAVEL $status.
 }

//VERIFICA SE O CPF NÃO SÃO NÚMEROS INVÁLIDOS. EX: 22222222222
  if( ($cpf == '11111111111') || ($cpf == '22222222222') ||
   ($cpf == '33333333333') || ($cpf == '44444444444') ||
   ($cpf == '55555555555') || ($cpf == '66666666666') ||
   ($cpf == '77777777777') || ($cpf == '88888888888') ||
   ($cpf == '99999999999') || ($cpf == '00000000000') ) {
   return 0; //SE O IF FOR VERDADEIRO ATRIBUI O VALOR false A VÁRIAVEL $status
  }

  else {
   //PEGA O DIGITO VERIFIACADOR
   $dv_informado = substr($cpf, 9,2);

   for($i=0; $i<=8; $i++) {
	$digito[$i] = substr($cpf, $i,1);
   }

   //CALCULA O VALOR DO 10º DIGITO DE VERIFICAÇÂO
   $posicao = 10;
   $soma = 0;

   for($i=0; $i<=8; $i++) {
	$soma = $soma + $digito[$i] * $posicao;
	$posicao = $posicao - 1;
   }

   $digito[9] = $soma % 11;

   if($digito[9] < 2) {
	$digito[9] = 0;
   }
   else {
	$digito[9] = 11 - $digito[9];
   }

   //CALCULA O VALOR DO 11º DIGITO DE VERIFICAÇÃO
   $posicao = 11;
   $soma = 0;

   for ($i=0; $i<=9; $i++) {
	$soma = $soma + $digito[$i] * $posicao;
	$posicao = $posicao - 1;
   }

   $digito[10] = $soma % 11;

   if ($digito[10] < 2) {
	$digito[10] = 0;
   }
   else {
	$digito[10] = 11 - $digito[10];
   }

  //VERIFICA SE O DV CALCULADO É IGUAL AO INFORMADO
  $dv = $digito[9] * 10 + $digito[10];
  if ($dv != $dv_informado) {
   return 0; //SE O DIGITO CALCULADO FOR DIFERENTE DO INFORMADO false É ATRIBUÍDO À $status.
  }
  else
   return 1; //SIGNIFICA QUE O CPF É VALIDO.
  }

}

?>



2º Problema: Está tendo problema pelo seguinte no seu você uso if para todas as verificações use dessa forma abaixo:

<?php  
	/* Se o CPF estiver no formato inválido vai aparecer aqui: */
	if ($ver=="VerOk") {
	
	if ($status) {
	include "class/cad.php";
	}
	else {
	echo "<div id=\"erros\">
	<div style=\"background: #F4C400; padding: 3px; text-align:left;\">
	<p>Ocorreram alguns problemas durante a tentativa de cadastro, os campos abaixo estão inválidos:</p></div>";
	/* Verifica os outros campos do formulário */
	if ($nome == "") { echo "* Nome completo <br />"; }
	elseif ($email == "") { echo "* E-mail <br />"; }
	elseif ($empresa == "") { echo "* Empresa <br />"; }
	elseif ($telefone == "") {echo "* Telefone <br />";}
	elseif ($endereco == "") {echo "* Endereço <br />";}
	elseif ($numero == "") {echo "* Número <br />";}
	elseif ($bairro == "") {echo "* Bairro <br />";}
	elseif ($cidade == "") {echo "* Cidade <br />";}
	elseif ($cep == "") {echo "* Cep <br />";}
	elseif ($descricao == "") {echo "* Descrição da Empresa <br />";}
	else { echo "O CPF: $cpf É INVÁLIDO!"; }
	} }
	echo "</div>";
	?></td>

Veja se esse código é o que você precisa... Se não de mais orientações do que você quer Ok??

Qq dúvida post no fórum!!!

Até ++ (y)


Att.

Edição feita por: Adrielso P. Teodoro, 27/06/2008, 15:51.

Adrielso Pinto Teodoro
Suporte Técnico

-- Sistema Operacional: Windows XP - Service Pack 3
-- Navegador: Mozilla Firefox 3.0

#21 donizeth

donizeth

    Normal

  • Usuários
  • 77 posts
  • Sexo:Masculino

Posted 27/06/2008, 12:31

Adrielso, mais no caso se eu usar o codigo

echo "<script>java script:history.back(-1);</script>";

se o usuario desabilitar o java, essa funcao nao ira funcionar correto? fazendo com que o formulario seja limpo novamente?

Adrielso, consegui aqui fazendo da seguinte maneira e sem usar JS, olha so como:

<td align="right">* Nome completo:</td>
	<td colspan="3"><input class="inputs" type="text" name="nome" id="nome" value="<?php echo $nome; ?>" /></td>

:D, agora o unico problema que falta é o seguinte:

2º - Se eu preencher tudo corretamente inclusive o CPF, so que eu esquecer algum campo em branco por exemplo CIDADE, ele acusa que a CIDADE esta com erro mais também acusa que o CPF esta invalido, mesmo que eu tenha preenchido o CPF corretamente.


brigadaooo...

#22 Adrielso P. Teodoro

Adrielso P. Teodoro

    Novato no fórum

  • Usuários
  • 24 posts
  • Sexo:Masculino
  • Localidade:Campinas/SP
  • Interesses:PHP, Hardware, HTML, CSS e XML

Posted 27/06/2008, 13:01

Então acontece isso pq o else else { echo "O CPF: $cpf É INVÁLIDO!"; } está associado ao if ($descricao == "") {echo "* Descrição da Empresa <br />";} e como foi a cidade que você deixou em branco o if ($descricao == "") {echo "* Descrição da Empresa <br />";} vai ser falso então o se não é o else { echo "O CPF: $cpf É INVÁLIDO!"; } por isso que aparece O CPF: $cpf é Inválido!

Se quiser fazer o teste deixe a descrição em branco você irá perceber que so irá aparecer o erro da descrição.


Ok!!! Testa aí!!! Estou pensando em uma solução!!!


Até +++


Att.


Adrielso, mais no caso se eu usar o codigo

echo "&lt;script>java script:history.back(-1);</script>";

se o usuario desabilitar o java, essa funcao nao ira funcionar correto? fazendo com que o formulario seja limpo novamente?

Adrielso, consegui aqui fazendo da seguinte maneira e sem usar JS, olha so como:

<td align="right">* Nome completo:</td>
	<td colspan="3"><input class="inputs" type="text" name="nome" id="nome" value="<?php echo $nome; ?>" /></td>

:D, agora o unico problema que falta é o seguinte:

2º - Se eu preencher tudo corretamente inclusive o CPF, so que eu esquecer algum campo em branco por exemplo CIDADE, ele acusa que a CIDADE esta com erro mais também acusa que o CPF esta invalido, mesmo que eu tenha preenchido o CPF corretamente.


brigadaooo...


Adrielso Pinto Teodoro
Suporte Técnico

-- Sistema Operacional: Windows XP - Service Pack 3
-- Navegador: Mozilla Firefox 3.0

#23 donizeth

donizeth

    Normal

  • Usuários
  • 77 posts
  • Sexo:Masculino

Posted 27/06/2008, 17:26

Adrielso, ainda bem tu me ajudo a resolver meu problema.... tudo funcionando perfeitamente... brigadaçoooooo.... vlw msmm...




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq