Ir para conteúdo
Fórum Script Brasil
  • 0

Captcha - Session


rodrigo.rrch

Pergunta

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

Editado por rodrigo.rrch
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 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();

?>

Editado por rodrigo.rrch
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...