Jump to content

Recommended Posts

Posted

Boas pessoal,

Tenho aqui uma dúvida que espero que seja esclarecida,

Eu tenho um formulário onde faço o registo de novos utilizadores e tenho um recaptcha code para ter o formulário protegido do spam,

A dúvida é a seguinte, eu tenho um script que verifica se os campos estão devidamente preenchidos mas jnão verifica se o recaptcha code foi inserido correctamente ou não.

Já tentei de diversas formas e até agora, todas sem sucesso.

Desde já agradeço a vossa atenção. 🙂

Bom fim de semana.

Posted

Já tentaste usar o XMLHttpRequest() para fazer isso?

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Posted

Boas brunoais,

Nunca usei essa função nem tão pouco sei como é que ela funciona. :s

Já andei a fazer umas pesquisas mas mesmo assim ainda não consegui compreender na totalidade o que ela faz.

Posted

Já tentaste este exemplo de forma isolada para verificar se a tua chave está a funcionar?

https://developers.google.com/recaptcha/docs/php?hl=pt-PT

Precisas de chamar aqueles métodos para te ser gerado os campos de formulário corretos onde o utilizador vai digitar o resultado do CAPTCHA. Nota que precisas que o teu servidor tenha o PHP instalado sem restrições de sockets (isto é, o servidor poder contactar com outros).

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Posted

Boas softklin,

As chaves estão a funcionar lindamente, mesmo em localhost, a única diferença é que agora está dentro de um form onde é necessário que o utilizador preencha o CAPTCHA (entre outros campos) de forma a prevenir a criação de utilizadores abusiva (spam) e eu estou a usar um script que verifica se o campo x foi preenchido ou não e gostava de, se possível, integrar a verificação do CAPTCHA.

Um abraço e desde já obrigado pela ajuda.

Posted (edited)

Boas pessoal,

Antes demais quero pedir desculpa por não ter dado resposta mais cedo, tive com uns problemas que fizeram com que não tivesse tempo para dar aqui um saltinho

Eu tenho o seguinte código a verificar se os campos estão preenchidos ou não

<script type="text/javascript">

function validateForm(frm) {


 if ( frm.Utilizador.value =='' || frm.Password.value =='' || frm.CPassword.value =='' ||frm.Email.value ==''|| frm.Nome.value =='' || frm.Morada.value ==''|| frm.Localidade.value ==''|| frm.Pais.value =='' || frm.CPostal.value ==''|| frm.Telefone.value ==''|| frm.Telemovel.value ==''||frm.Fax.value ==''|| frm.Contribuinte.value =='') {
  alert( "Por favor, certifique-se de que o formulário está completo e válido." );

  return false;
 }

if (frm.Password.value != frm.CPassword.value) {
 alert( "Por favor, certifique-se de que as passwords são iguais!" );

  return false;
 }
 return true;
}
</script>

O que eu pretendia era, se possivel, integrar a verificação do capcha code neste pedaço de código.

Edited by brunoais
Posted

Se quiseres fazer essa verificação por Javascript, tens de usar mesmo AJAX/XMLHttpRequest, porque para verificares se o captcha está correto ou não, tens de enviar a resposta do utilizador juntamente com a tua chave privada para os servidores do Google. Ora, a tua chave privada não pode ser revelada publicamente, por isso, não a deves colocar num ficheiro com código Javascript pois fica acessível a toda a gente.

Aqui entra o XMLHttpRequest, pois este apenas faz um pedido a um script PHP teu que tem a chave privada de forma não acessível ao público, e apenas diz se o código está certo ou não. Isto é possível de se fazer, mas não te recomendo por uma simples razão: se o utilizador tiver o javascript desligado, a validação do captcha não te serve de nada, porque não vai ser executada. Nesse caso, acho que devias implementar a validação do captcha apenas do lado do servidor, porque corre de ambas as maneiras.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Posted (edited)

Podes-me mandar como é que funciona o XMLHttpRequest? é que nunca trabalhei com essa função :s

Nada melhor que a melhor documentação do DOM e de javascript grátis que existe na internet, o MDN 😉

AJAX: Getting Started

Edited by brunoais
melhorei um pouco a frase

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Posted (edited)

Olha não é bem isto que queres mas acho que basta adaptares para o teu caso.

  <script type="text/javascript">

  function createRequestObject() {
 var ro;	
 ro = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();

 return ro;
  }
  var http = createRequestObject();
  function sndReq(action) {
 http.open('get', 'verificaCaptcha.php?action='+action);
 http.onreadystatechange = handleResponse;
 http.send(null);
  }
  function handleResponse() {
 if(http.readyState == 4){
   var response = http.responseText;
   var update = new Array();

   if(response.indexOf('|') != -1) {
	 update = response.split('|');
	 document.getElementById(update[0]).innerHTML = update[1];
   }
 }
  }

  setInterval(function()
  {

       var string = document.getElementById("CaptchaID").value;
       sndReq(string);

  }, 2000);

  </script>
Edited by nunolevezinho
Posted

O uso do innerHTML é desaconselhado, não resolve o problema que foi indicado por mim anteriormente.

O código do utilizador (javascript) deve receber só dados num formato que não HTML.

Tu assumes que todos os requests correm bem. Prepara-te para obter uma exceção quando isso não acontece.

Nota:

Para suportar todos os browsers que são oficialmente suportados pelas empresas que fazem os browsers, a função createRequestObject() é desnecessária.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Posted

Boas pessoal,

Acabei por resolver o problema de outra maneira,

Em vez de verificar na página onde se regista vai verificar na página onde estão as querys que inserem os dados na Base de dados ( como é óbvio verifica se o código está correcto antes de executar as querys 😛 ),

O código que usei para verificar é o que está disponivel https://developers.google.com/recaptcha/docs/php?hl=pt-PT

Desde já obrigado pela vossa ajuda,

Um abraço

Posted

Acho que foi a escolha mais sensata. Se optasses por fazer a validação do captcha por Javascript, tinhas 2 trabalhos: fazer a validação com AJAX e fazer a validação no servidor (obrigatório). Se fizesses apenas a verificação por Javascript, não te ia servir de nada, como expliquei atrás.

Cumps.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.