Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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>// 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 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...
/applications/core/interface/imageproxy/imageproxy.php?img=http://imageshack.us/photo/my-images/64/66748314.png&key=b87756c13623b064e858ac9c7f998fac70723b034af92989581387125230dff3" alt="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..Carlos Coelho deu certo sim
Tanto faz usar captcha usando get e post ?
Vlw
Isso vai depender do tipo de informação(senha, cpf, etc...) que você vai enviar.
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 ^^
Você já conhece o plugin QapTcha?
Veja ele em funcionamento :seta: http://www.myjqueryplugins.com/QapTcha/demo
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
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.. =)
Teste este script :seta: http://forum.imasters.com.br/topic/425957-problemas-com-captcha/page__view__findpost__p__1681320
:seta: anonymous.gdf
:seta: captcha.png