Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rodrigo.rrch

[Resolvido] Captcha - Session

Recommended Posts

Bom dia galera imasters

 

minha duvida é na validação do session com o valor do input

 

Vou colocar o codigo que estou usando dai eu explico melhor o que esta acontecendo

 

contato.php

<form name="form" id="formID" action="comentarioEnvia.php" method="post">

// campo nome
<label style="font-weight:bolder;">Nome: </label>
<input id="nome" name="nome" type="text" size="43" maxlength="42" class="validate[required] custom[onlyLetterSp] text-input"/></br>
// tirei outros campos aqui como assunto comentario etc etc não tem o pq coloca-los aqui

// aqui gera a img do captcha
<img id="palavra" src="Plugin/Captcha/captcha.php?l=150&a=50&tf=20&ql=5">

// aqui é o campo input para comparar com as letras do session
<input id="palavras" type="text" name="palavras" size="12" class="validate[required]" />


<div id="botao" align="center">
   // aqui é o botao para enviar ao comentarioEnvia.php caso tudo esteja validado
   <input type="submit" name="submit" value="Enviar Comentario"/>
</div>
</form>

<?php
// aqui tento validar o captcha com o valor do input

  session_start();
  echo $_SESSION["palavra"];
  echo $_POST["palavras"]; 
   if ($_POST["palavras"] == $_SESSION["palavra"]){
       echo "<h1>Voce Acertou</h1>";
   }else{
       echo "<h1>Voce nao acertou!</h1>";
   }
?>          

 

 

captcha.php << aqui gero o captcha ---- $_SESSION["palavra"]

 


<?php
  session_start(); // inicial a sessao
  header("Content-type: image/jpeg"); // define o tipo do arquivo

   function captcha($largura,$altura,$tamanho_fonte,$quantidade_letras){
       $imagem = imagecreate($largura,$altura); // define a largura e a altura da imagem
       $fonte = "arial.ttf"; //voce deve ter essa ou outra fonte de sua preferencia em sua pasta
       $preto  = imagecolorallocate($imagem,0,0,0); // define a cor preta
       $branco = imagecolorallocate($imagem,255,255,255); // define a cor branca

       // define a palavra conforme a quantidade de letras definidas no parametro $quantidade_letras
       $palavra = substr(str_shuffle("AaBbCcDdEeFfGgHhIiJjKkLlMmNnPpQqRrSsTtUuVvYyXxWwZz23456789"),0,($quantidade_letras));
       $_SESSION["palavra"] = $palavra; // atribui para a sessao a palavra gerada
       for($i = 1; $i <= $quantidade_letras; $i++){
           imagettftext($imagem,$tamanho_fonte,rand(-25,25),($tamanho_fonte*$i),($tamanho_fonte + 10),$branco,$fonte,substr($palavra,($i-1),1)); // atribui as letras a imagem
       }
       imagejpeg($imagem); // gera a imagem
       imagedestroy($imagem); // limpa a imagem da memoria
   }

   $largura = $_GET["l"]; // recebe a largura
   $altura = $_GET["a"]; // recebe a altura
   $tamanho_fonte = $_GET["tf"]; // recebe o tamanho da fonte
   $quantidade_letras = $_GET["ql"]; // recebe a quantidade de letras que o captcha terá
   captcha($largura,$altura,$tamanho_fonte,$quantidade_letras); // executa a funcao captcha passando os parametros recebidos
?>

 

Vamos la.. a imagem do captcha aparece normal.. sem nenhum problema com isso

 

Na parte do codigo (contato.php)

<?php
// aqui tento validar o captcha 
  session_start();
  echo $_SESSION["palavra"];
  echo $_POST["palavras"]; 
   if ($_POST["palavras"] == $_SESSION["palavra"]){
       echo "<h1>Voce Acertou</h1>";
   }else{
       echo "<h1>Voce nao acertou!</h1>";
   }
?> 

 

O resultado de echo $_SESSION["palavra"] é um valor diferente da imagem gerada no captcha sendo assim como eu consigo pegar o mesmo valor gerada da imagem ?

 

O echo $_POST["palavras"] não esta buscando o valor digitado no campo input "palavras" do formulario =/

 

Estou estudando toda a parte da session e validação ja li varios artigos e tutoriais porem não encontrei algo que me ajudasse quanto a isso.. documentei todo o codigo que fiz para facilitar na leitura deles..

 

Antes de mais nada obrigado pela ajuda que vocês estão dando..

E desculpa toda minha ignorancia.. :blush:

 

Se tiverem algum artigo sobre este assunto tbm ficaria muito grato.

 

Vlw

 

-----------------EDITADO-----------------------

 

Para ajudar mais um pouco...

 

66748314.png

http://imageshack.us/photo/my-images/64/66748314.png

 

 

o erro de UNDEFINED INDEX significa variavel não definida nhe ?! que é o caso do $_POST["palavras"] não encontrar o valor do input palavras..

 

e o "vbQy2" é o que esta trazendo da session $_SESSION["palavra"]; diferente da imagem..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou fazendo uns teste aqui.. to tentando validar com jQuery Validation Engine..

 

Mudei o codigo assim

<img id="img" src="Plugin/Captcha/captcha.php" width="130" height="40" />

<input id="palavras" type="text" name="captcha" size="12" class="validate[required] equals[<?php echo $_SESSION['textoCAPTCHA'];?>] text-input" />

 

o comando class="validate[required] equals[<?php echo $_SESSION['textoCAPTCHA'];?>] text-input"

 

o required significa que é obrigatorio.. o equals ele compara o valor digitado no campo palavras com o <?php echo $_SESSION['textoCAPTCHA'];?>

 

É essa a ideia que to tentando fazer rolar uhahuahua

 

mais não ta indo.. =/ o valor que eu coloco no campo não valida com o resultado da img..

 

To fazendo mais tente aqui.. se eu consegui eu posto o resultado..

 

Vlw pela paciente comigo ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos Coelho vou testar o QapTcha aqui =)

 

Quanto ao captcha.. tem como passar o mesmo valor da img para um input ?

 

Minha ideia é o seguinte..

 

se a imagem do captcha estiver 3ccb57 eu passo esse mesmo valor para um input com propriedade hidden dai no outro campo eu consigo comparar de boa com jquery.

 

Tentando aqui..

 

consegui passar o valor do SESSION para o input com o seguinte codigo

 

// gera a img do captcha
<img id="img" src="Plugin/Captcha/captcha.php" width="130" height="40" />

//pego o valor do SESSION e coloco nesse input.. o type ta como text apenas para aparecer na tela
<input id="cap" type="text" name="valorCaptcha" value="<?php echo $_SESSION['textoCAPTCHA']?>"/>

//campo que compara com o valor pelo ID do input de cima 
<input id="palavras" type="text" name="captcha" size="12" class="validate[required] equals[cap] text-input" />

 

Porem o que esta acontecendo é.. o valor da SESSION esta diferente ao valor do captcha.. pq isso ? coloquei uma imagem aqui para melhor explicar imagem

 

O Campo captcha é 3ccb57 mais a SESSION que tras no input é fb7e07 no campo logo abaixo ele compara certinho com o input..

 

to viajando muito ? rsrs é um jeito que achei de resolver.. :blush:

 

Ainda to penando para entender a session.. ja vi o manual do php.. mais ainda não entro aqui..

minha maior duvida agora é essa.. pq a mesma session que gero a img do captcha aparece outro valor em outro lugar ?

 

Obrigadão por tudo mesmo.. (teste de paciencia rsrs)

 

Vou implemetar o QapTcha aqui enquanto isso..

 

serve para estudo =)

 

vlw

 

------ edit -------

 

percebi que o valor que aparece no input é sempre o valor anterior que estava na img.. Oo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que entendi o que aconteceu..

 

Acontece que o contato.php é processado primeiro que o captcha.php. Primeiro o cliente recebe o HTML que o contato gera. Depois é que o navegador vai acessar o captcha pra gerar o código e baixar a imagem. Assim, o contato fica mesmo sempre atrasado, como está ai. O PHP não entende HTML. O HTML que você escreve o PHP manda direto pro navegador sem se importar. Quem vai entender o <img> e baixar a imagem é o cliente.

 

então a pergunta agora é..

 

se eu trazer a imagem como php eles irao ficar iguais ? e como trago o Plugin/Captcha/captcha.php para aparecer como imagem no php ?

 

ou

 

se eu trazer a session como html eles irao ficar iguais ? tem como chamar a session em html ?

 

ou

 

tem como fazer os dois arquivos processarem juntos ?

 

Vlw pessoal

 

---- EDIT ----

 

Carlos Coelho implementei o QapTcha funcionou certinho.. =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.