Jump to content
Fórum Script Brasil
  • 0

Captcha - Session


rodrigo.rrch

Question

Bom dia galera

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 porque 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 não 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 não 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 já 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 também ficaria muito grato.

Vlw

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

Para ajudar mais um pouco...

<ahttp://imageshack.us/photo/my-images/64/66748314.png" border="0" class="linked-image" />

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..

Edited by rodrigo.rrch
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Galera.. 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.. porque 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.. já vi o manual do php.. mais ainda não entro aqui.. minha maior duvida agora é essa.. porque a mesma session que gero a img do captcha aparece outro valor em outro lugar ? Obrigadão por tudo mesmo.. (teste de paciencia rsrs) serve para estudo =) vlw obs mudei a session palavras para session textoCAPTCHA a função captcha.php fico assim
<?php
    
/**
* fun��o CAPTCHA para diferenciar humanos de computadores
*/

function CAPTCHA(){
    
    // iniciou a sess�o ?
    if(!isset($_SESSION)){
       
        // inicia a sess�o
        session_start();
       
    }
    
    // definimos o header como image/png para que possamos visualizar a imagem
    header("Content-type: image/png");
    
    // retorna um identificador de imagem representando a imagem obtida atrav�s do nome de arquivo informado.
    $imagemCAPTCHA = imagecreatefrompng("captcha1.png");
    
    // carrega uma nova fonte
    $fontCAPTCHA = imageloadfont("anonymous.gdf");
    
    // criamos o texto que ir� na imagem
    $textoCAPTCHA = substr(md5(uniqid(rand(), true)), -9,6);
    
    // guardamos o texto em uma session
    $_SESSION['textoCAPTCHA'] = $textoCAPTCHA; 
    
    // damos uma cor(RGB) para o texto
    $corCAPTCHA = imagecolorallocate($imagemCAPTCHA,255,000,000);
    
    // vamos escrever o texto na imagem.
    //imagestring("identificador da imagem","identificador da fonte","posi��o do texto na coordenada x",posi��o do texto na coordenada y","string texto","identificador de cor");
    imagestring($imagemCAPTCHA,$fontCAPTCHA,5,5,$textoCAPTCHA,$corCAPTCHA);
    
    // mostramos a imagem pronta
    imagepng($imagemCAPTCHA);
    
    // destruimos a imagem
    imagedestroy($imagemCAPTCHA);
}

// chamamos a fun��o
CAPTCHA();

?>

Edited by rodrigo.rrch
Link to comment
Share on other sites

  • 0

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 ?

Vlw pessoal

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652.1k
×
×
  • Create New...