Jump to content


rodrigo.rrch

Member Since 12/12/2011
Offline Last Active 25/01/2012, 09:39
-----

Topics I've Started

Captcha - Session

13/12/2011, 13:55

Bom dia

tenho 2 arquivos php e estou validando com jquery enginer

segue os codigos

contato.php

// primeira linha do documento
<?php

// iniciou a sessão ?
if(!isset($_SESSION)){

    // inicia a sessão    
    session_start();

}
?>

// dentro do body

// inicia o form para mandar ao comentarioEnvia.php caso todos os dados seja validado
<form name="form" id="formID" action="comentarioEnvia.php" method="post">

//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" />

<div id="botao" align="center">    
    <input type="submit" name="submit" value="Enviar Comentario"/>
</div>
</form>


e

captcha.php

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

?>



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

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 gerou a img do captcha aparece outro valor em outro lugar ?

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

onde ta o problema ?

caso precisem do codigo que estou validando eu posto aqui tbm..

Estou estudando PHP sozinho.. desculpa se cometi alguma perola

Vlw

IPB Skin By Virteq