GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Problema com Javascript recebendo a função em PHP

ajax
html
jquery
php
javascript
Tags: #<Tag:0x00007f653a6b2488> #<Tag:0x00007f653a6b22f8> #<Tag:0x00007f653a6b21b8> #<Tag:0x00007f653a6b2050> #<Tag:0x00007f653a6b1e70>
#1

Bom dia, estou tendo uma baita problema que já tentei de tudo para resolver, fiquei o sab todo pesquisando e não consegui.
Meu problema é fazer com que o javascript leia a função “checarCPF($cpf)” em php (essa função vê se o cpf informado no formulário é valido ou não, com true ou false") para a função “validar()” no javascript informe o erro do formulário (se tiver erro informa se não prossiga)
Eu já tentei a biblioteca jquery com “$.ajax” (tentei fazer como entendi) e não consegui.

No código que estou mostrando abaixo foi o que chequei mais próximo, forem não com sucesso que esperava. Pois além de informar “cpf invalido” para todos os CPFs, até os validos, ele avança para próxima pagina.

Nesse código eu fiz uma variável em php ($ckCPF) receber true ou false (true para cpf valido) e depois no javascript a variável “EhCPF” recebe a variável “$ckCPF” ( var EhCpf = <?php $ckCPF; ?> ) apos receber o if(EhCpf) irá fazer a validação.

Desde já agradeço quem poder me ajudar.

<?php
   function limpaCPF($cpf) {
	  return str_replace('-', '', str_replace('.', '', $cpf));
   }
   function checarCPF($cpf) {
      $cpf = limpaCPF($cpf);
      $checksum1 = 0; $checksum2 = 0;
      for($i = 0; $i < 9; $i++) {
         $checksum1 += (10 - $i) * $cpf[$i];
         $checksum2 += (11 - $i) * $cpf[$i];
      }
      $checksum2 += 2*$cpf[9];
      $resto1 = $checksum1 % 11;
      $digito1 = $resto1 < 2 ? 0 : 11 - $resto1;
      $resto2 = $checksum2 % 11;
      $digito2 = $resto2 < 2 ? 0 : 11 - $resto2;
	  return $cpf[9] == $digito1 && $cpf[10] == $digito2;
   }

   function clean($input,$maxlength){
      $input = substr($input,0,$maxlength);
      $input = EscapeShellCmd($input);     
      return ($input);
   }
?>

<html>
<head>
	<title>Formulario de cadastro</title>
	<script type="text/javascript" src="jquery-1.10.1.js"></script>
	<script type="text/javascript">
		function validar(){
			var cpf =formulario.cpf.value;
			var nome =formulario.nome.value;
			var endereco =formulario.endereco.value;
			var email =formulario.email.value;
			var EhCpf = <?php $ckCPF; ?>  ///////////////////////////// Meu problema
			
			
			if(cpf == "" || cpf.legth < 15 ){
				alert("prencha o campo cpf  com o minimo de 1 e o maximo de 15 caracteres.");
				formulario.cpf.focus();
				return false;
			}
			if(EhCpf){
				alert("O cpf possui numeros inválidos");
				formulario.cpf.focus();
				return false;
			}
			if(nome == ""|| nome.legth < 50 ){
				alert("prencha o campo nome com o minimo de 1 e o maximo de 50 caracteres.");
				formulario.nome.focus();
				return false;
			}
			if(endereco == "" || endereco.legth < 50){
				alert("prencha o campo endereço  com o minimo de 1 e o maximo de 50 caracteres.");
				formulario.endereco.focus();
				return false;
			}
			if(email == "" || email.legth < 50){
				alert("prencha o campo e-mail com o minimo de 1 e o maximo de 50 caracteres.");
				formulario.email.focus();
				return false;
			}
		}
	</script>
</head>
<body>
<h1>Cadastro</h1>

<form name="formulario" method="post" action="cadastro.php" onsubmit= "return(validar());">
	CPF: <input type="text" name="cpf" size=15><br><br>
	Nome: <input type="text" name="nome" size=50><br><br>
	Endereço: <input type="text" name="endereco" size=50><br><br>
	E-mail: <input type="text" name="email" size=50><br><br>
	
	<input type="submit" value="enviar">

</form>
<?php
$digitos = $_POST[cpf];            //////////////////////////// Meu problema
$diglimpo = limpaCPF($digitos);
$ckCPF = checarCPF($diglimpo);
?>

</body>
</html>
0 Likes

#2

Precisa trabalhar com requisição … assim não é realmente pra funcionar

0 Likes

#3

requisição? Como assim?

0 Likes

#4

O seu código PHP deveria ser sempre no topo da página, porque como o html vai saber o que foi feito naquela variável, e o correto seria uma requisição em outro arquivo para verificar se o CPF está de acordo com suas regras …

Tem elementos errados na estrutura da sua programação, é como se fosse fazer uma casa pelo telhado.

0 Likes

#5

eu coloquei o todo o codigo php no top e mesmo assim está avançando para próxima pagina sem acusar nenhum erro.

<?php
   function limpaCPF($cpf) {
	  return str_replace('-', '', str_replace('.', '', $cpf));
   }
   function checarCPF($cpf) {
      $cpf = limpaCPF($cpf);
      $checksum1 = 0; $checksum2 = 0;
      for($i = 0; $i < 9; $i++) {
         $checksum1 += (10 - $i) * $cpf[$i];
         $checksum2 += (11 - $i) * $cpf[$i];
      }
      $checksum2 += 2*$cpf[9];
      $resto1 = $checksum1 % 11;
      $digito1 = $resto1 < 2 ? 0 : 11 - $resto1;
      $resto2 = $checksum2 % 11;
      $digito2 = $resto2 < 2 ? 0 : 11 - $resto2;
	  return $cpf[9] == $digito1 && $cpf[10] == $digito2;
   }

   function clean($input,$maxlength){
      $input = substr($input,0,$maxlength);
      $input = EscapeShellCmd($input);     
      return ($input);
   }

   $digitos = $_POST[cpf];            /////// conferir 
   $diglimpo = limpaCPF($digitos);
   $ckCPF = checarCPF($diglimpo);

?>
<html>
<head>
	<title>Formulario de cadastro</title>
	<script type="text/javascript" src="jquery-1.10.1.js"></script>
	<script type="text/javascript">
		function validar(){
			var cpf =formulario.cpf.value;
			var nome =formulario.nome.value;
			var endereco =formulario.endereco.value;
			var email =formulario.email.value;
			var EhCpf = <?php $ckCPF; ?>  /////// conferir 
			
			
			if(cpf == "" || cpf.legth < 15 ){
				alert("prencha o campo cpf  com o minimo de 1 e o maximo de 15 caracteres.");
				formulario.cpf.focus();
				return false;
			}
    		if(!EhCpf){
				alert("O cpf possui numeros inválidos");
				formulario.cpf.focus();
				return false;
			}
			if(nome == ""|| nome.legth < 50 ){
				alert("prencha o campo nome com o minimo de 1 e o maximo de 50 caracteres.");
				formulario.nome.focus();
				return false;
			}
			if(! nome.match(/^[a-z A-Z áéíóúÁÉÍÓÚãõÃÕâêîôûÂÊÎÔÛäëïöüÄËÏÖÜ]+$/)){
				alert("prencha o campo nome apenas com caractéres alfabéticos.");
				formulario.nome.focus();
				return false;
			}
			if(endereco == "" || endereco.legth < 50){
				alert("prencha o campo endereço  com o minimo de 1 e o maximo de 50 caracteres.");
				formulario.endereco.focus();
				return false;
			}
			if(email == "" || email.legth < 50){
				alert("prencha o campo e-mail com o minimo de 1 e o maximo de 50 caracteres.");
				formulario.email.focus();
				return false;
			}
			if(! email.match(/^([a-z A-Z 0-9 ! _\-\%\$\&]+)\@([a-z A-Z 0-9 ]+)\.([a-z A-Z 0-9]+)$/)){
				alert("prencha o campo e-mail no formato válido (nome@dominio).");
				formulario.nome.focus();
				return false;
		    }
		}
	</script>
</head>
<body>
<h1>Cadastro</h1>

<form name="formulario" method="post" action="cadastro.php" onsubmit= "return(validar());">
	CPF: <input type="text" name="cpf" size=15><br><br>
	Nome: <input type="text" name="nome" size=50><br><br>
	Endereço: <input type="text" name="endereco" size=50><br><br>
	E-mail: <input type="text" name="email" size=50><br><br>
	
	<input type="submit" value="enviar">

</form>

</body>
</html>
0 Likes

#6

Vai dar erro de variaveis não definidas, você não confere se o botão foi clicado com um simples isset($_POST['cpf']) e você poderia fazer essa parte de validação com um framework para tal.

Exemplo

$digitos = $_POST[cpf];            /////// conferir 

primeiro que é $_POST['cpf'] não pode ser uma constante e antes de jogar o valor se precisa saber se o valor existe

if (isset($_POST['cpf']) && !empty($_POST['cpf'])) 
{
    $digitos = $_POST[cpf] ;
}

mas, mesmo assim isso é PHP não é Javascript, não pode misturar PHP com Javascript isso não funciona, se pode utilizar requisições, mas, do jeito que fez não!

0 Likes

#7

A requisição que você ta falando é colocar em um arquivo separado no formato .inc as funções (limpaCPF($cpf), checarCPF($cpf), clean($input,$maxlength) ) chamando pelo comando “include validarCpf.inc;” e o unico codigo php ser o:

<?php
if (isset($_POST['cpf']) && !empty($_POST['cpf'])) 
{
    $digitos = $_POST['cpf'] ;
    $diglimpo = limpaCPF($digitos); 
    $ckCPF = checarCPF($diglimpo);
}
?>

Assim pode dar certo?

0 Likes

#8

Não … você precisa validar isso com Javascript e depois com Server Side se está fazendo uma confusão doida nisso …

Requisição estou falando por ver o seu código! mas, deveria ser diferente!

0 Likes

#9

Vlw. Vou estudar sobre Server Side e tentar refazer o código depois eu volto

0 Likes

#10

Crie um arquivo somente assim:

<html>
<head>
	<title>Formulario de cadastro</title>
	<script type="text/javascript" src="jquery-1.10.1.js"></script>
	<script type="text/javascript">
		function testaCPF(strCPF) {
			if (strCPF === '') return false;
			if (strCPF.length < 11) return false;
		    var Soma;
		    var Resto;
		    Soma = 0;
		  	if (strCPF == "00000000000") return false;
		  	if (strCPF == "11111111111") return false;
		  	if (strCPF == "22222222222") return false;
		  	if (strCPF == "33333333333") return false;
		  	if (strCPF == "33333333333") return false;
		  	if (strCPF == "44444444444") return false;
		  	if (strCPF == "55555555555") return false;
		  	if (strCPF == "66666666666") return false;
		  	if (strCPF == "77777777777") return false;
		  	if (strCPF == "88888888888") return false;
		  	if (strCPF == "99999999999") return false;

		     
		  	for (i=1; i<=9; i++) Soma = Soma + parseInt(strCPF.substring(i-1, i)) * (11 - i);
		  		Resto = (Soma * 10) % 11;
		   
		    if ((Resto == 10) || (Resto == 11))  Resto = 0;
		    if (Resto != parseInt(strCPF.substring(9, 10)) ) return false;
		   
		  	Soma = 0;
		    for (i = 1; i <= 10; i++) Soma = Soma + parseInt(strCPF.substring(i-1, i)) * (12 - i);
		    	Resto = (Soma * 10) % 11;
		   
		    if ((Resto == 10) || (Resto == 11))  Resto = 0;
		    if (Resto != parseInt(strCPF.substring(10, 11) ) ) return false;
		    return true;
		}
		function validar(){
			var cpf =formulario.cpf.value;
			var nome =formulario.nome.value;
			var endereco =formulario.endereco.value;
			var email =formulario.email.value;
			if(cpf == "" || cpf.legth < 15 ){
				alert("prencha o campo cpf  com o minimo de 1 e o maximo de 15 caracteres.");
				formulario.cpf.focus();
				return false;
			}
			if (!testaCPF(cpf))
			{
				alert("cpf inválido.");
				formulario.cpf.focus();
				return false;	
			}
			if(nome == ""|| nome.legth < 50 ){
				alert("prencha o campo nome com o minimo de 1 e o maximo de 50 caracteres.");
				formulario.nome.focus();
				return false;
			}
			if(endereco == "" || endereco.legth < 50){
				alert("prencha o campo endereço  com o minimo de 1 e o maximo de 50 caracteres.");
				formulario.endereco.focus();
				return false;
			}
			if(email == "" || email.legth < 50){
				alert("prencha o campo e-mail com o minimo de 1 e o maximo de 50 caracteres.");
				formulario.email.focus();
				return false;
			}
		}
	</script>
</head>
<body>


	<h1>Cadastro</h1>

	<form name="formulario" method="post" action="cadastro.php" onsubmit= "return(validar());">
		CPF: <input type="text" name="cpf" size=15><br><br>
		Nome: <input type="text" name="nome" size=50><br><br>
		Endereço: <input type="text" name="endereco" size=50><br><br>
		E-mail: <input type="text" name="email" size=50><br><br>	
		<input type="submit" value="enviar">
	</form>

</body>
</html>

Observação ai tem uma verificação de CPF válido ou inválido feito em JAVASCRIPT.

E no arquivo cadastro.php esse esse formulário é submetido:

<?php
   function limpaCPF($cpf) 
   {
	  return str_replace('-', '', str_replace('.', '', $cpf));
   }
   function checarCPF($cpf) 
   {
      $cpf = limpaCPF($cpf);
      $checksum1 = 0; $checksum2 = 0;
      for($i = 0; $i < 9; $i++) {
         $checksum1 += (10 - $i) * $cpf[$i];
         $checksum2 += (11 - $i) * $cpf[$i];
      }
      $checksum2 += 2*$cpf[9];
      $resto1 = $checksum1 % 11;
      $digito1 = $resto1 < 2 ? 0 : 11 - $resto1;
      $resto2 = $checksum2 % 11;
      $digito2 = $resto2 < 2 ? 0 : 11 - $resto2;
	  return $cpf[9] == $digito1 && $cpf[10] == $digito2;
   }
   function clean($input,$maxlength)
   {
      $input = substr($input,0,$maxlength);
      $input = EscapeShellCmd($input);     
      return ($input);
   }
   
   if (isset($_POST['cpf'] && isset($_POST['nome']) &&
       isset(isset($_POST['endereco']) && isset($_POST['email']))
   {
       // aqui as informações estão presentes
   }

Ou seja, as funções do javascript é uma coisa e server nesse caso momento para validar a sua tela (na verdade ajudar a não passar tanta coisa inválida para o servidor) e as funções do PHP devem (devem, obrigatoriedade, fazer com certeza) a validação igual a da sua tela …

0 Likes