mdartson 0 Denunciar post Postado Dezembro 7, 2005 Olá pessoal, :) Estou com um probleminha no código de um sistema Captcha (aquele que a gente tem que digitar as letrinhas antes de enviar o formulário), que estou implantando em meu site porque estavam utilizando os formulários para fazer flood. Daí, por medida de segurança, quero que todo usuário antes de enviar o formulario preenchido, digite as letras/números aleatoriamente. O que ocorre é que, apesar do script estar rodando certinho, toda vez que se digita os códigos, ele diz que está errado, mesmo digitando-se tudo certo. Coloquei uma página de teste para que possam entender: Teste Este sistema que coloquei é feito com 2 arquivos. O primeiro é o de gerar a imagem, chamado: imagem.php <?php$largura = 180;$altura = 30;$imagem = imagecreate($largura,$altura); // cria uma imagem/*Possiveis Letras do captcha*//*'a','b','c','d','e','f','g','h','i', 'j','k','l','m','n','o','p','q','r', 's','t','u','v','w','x','y','z', 'A','B','C','D','E','F','G','H','I', 'J','K','L','M','N','O','P','Q','R', 'S','T','U','V','W','X','Y','Z', */$letras = array('0','1','2','3','4','5','6','7','8','9'); // neste caso o captcha terá só números$tam_letras = count($letras)-1;/*Fim possives letras*//*Cores da imagem*/$cinza = imagecolorallocate($imagem,0xF8,0xF8,0xF8);$cinza_escuro = imagecolorallocate($imagem,0xCC,0xCC,0xCC);$vermelho = imagecolorallocate($imagem,0xFF,0x00,0x00);$azul = imagecolorallocate($imagem,0x0F,0x93,0xFF);$verde = imagecolorallocate($imagem,0x00,0x66,0x00);$rosa = imagecolorallocate($imagem,0xFF,0x1A,0x98);$preto = imagecolorallocate($imagem,0x00,0x00,0x00);$marrom = imagecolorallocate($imagem,0xDC,0x91,0x3D);$laranja = imagecolorallocate($imagem,0xFF,0x8C,0x24);$cores = array($vermelho,$azul,$verde,$rosa,$preto, $marrom,$laranja);$tam_cores = count($cores)-1;/*Fim das cores*//*Escrevendo linhas de fundo*/$nro_linhas = 20;for($i=0;$i<$nro_linhas;$i++){ $x1 = rand(0,$largura); $x2 = rand(0,$largura); $y1 = rand(0,$altura); $y2 = rand(0,$altura); imageline($imagem,$x1,$y1,$x2,$y2,$cinza_escuro);}/*Fim linhas de fundo*//*Escrevendo arcos de fundo*/$nro_arcos = 20;for($i=0;$i<$nro_arcos;$i++){ $cx = rand(0,$largura); $w = rand(0,$largura); $cy = rand(0,$altura); $h = rand(0,$altura); $s = rand(0,360); $e = rand(0,360); imagearc($imagem,$cx,$cy,$w,$h,$s,$e,$cinza_escuro);}/*Fim arcos de fundo*//*Escrevendo as Letras na imagem*/$palavra = '';$xPos = 0;for($i=0;$i<6;$i++){ $xPos += rand(10,25); $yPos = rand(10,15); $j = rand(0,$tam_cores); $k = rand(0,$tam_letras); $palavra .= $letras[$k]; imagestring($imagem, 5, $xPos, $yPos, $letras[$k], $cores[$j]);}/*fim escrevendo letras na imagem*/session_name('captcha');session_start();$_SESSION['palavra'] = $palavra;header("Content-type: image/png");imagepng($imagem);imagedestroy($imagem);?>O segundo arquivo é o do formulário: checa.php <?phpsession_name('captcha');session_start();?><html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Captcha</title><body><?phpif(isset($_POST['minhaPalavra'])){ if($_SESSION['palavra'] == $_POST['minhaPalavra']) echo 'ok'; else echo 'errado';}?><form action="checa.php" method="post"><img src="imagem.php"><br>Digite: <input type="text" name="minhaPalavra"><input type="submit" name="ok" value="Ok"></form></body></html>Só consegui uma vez com que funcionasse corretamente. Das outras vezes, por mais que eu dê reload e digite corretamente o código, ele só diz que está errado, apesar de estar correto. Alguém pode me ajudar????? []s Compartilhar este post Link para o post Compartilhar em outros sites
luis-restart 0 Denunciar post Postado Dezembro 7, 2005 cara, eu dei uma lida rapida(nao testei ainda) mas parace estar tudo correto, pelo menos erro aparente eu nao observei. voce pode ir debugando usando echos pra ver os valores das variaveis: echo $_SESSION['palavra']; echo $_POST['minhaPalavra']); e tals pra ir vendo o conteudo e ver onde ta trocando o valor... (depois eu testo e falo o resultado...) Adailton: "Dessa forma, você precisa chamar session_name() para cada requerimento (e antes de session_start() ou session_register() serem chamadas). " http://www.php.net/session_name tem que vir antes mesmo... =D []s luis Compartilhar este post Link para o post Compartilhar em outros sites
mdartson 0 Denunciar post Postado Dezembro 7, 2005 Pois é, pessoal. O lance é que o programa executa beleza, mas na hora do teste, quando digito as letras e números apresentados na imagem gerada, ele sempre diz que está errado, por mais que eu digite certo. :blink: Ainda não consegui solucionar isso..... :unsure: []s Compartilhar este post Link para o post Compartilhar em outros sites
luis-restart 0 Denunciar post Postado Dezembro 7, 2005 Pois é, pessoal. O lance é que o programa executa beleza, mas na hora do teste, quando digito as letras e números apresentados na imagem gerada, ele sempre diz que está errado, por mais que eu digite certo. :blink: Ainda não consegui solucionar isso..... :unsure: []sOla,Eu testei umas 30 vezes seu script e ele funcionou perfeitamente, tanto para digitadas corretas e digitas erradas... agora o que da errado ai eu nao sei dizer nao... a session ta startando corretamente ai, a variavel post ta passando normal?? tem que ir debugando o script conforme eu tinha falado dai pode ver o que ta saindo errado...[]sluis Compartilhar este post Link para o post Compartilhar em outros sites
mdartson 0 Denunciar post Postado Dezembro 7, 2005 para fazer o CAPTCHA, eu uso o Text_CAPTCHA do PEAR que é molinho de usar...da uma olhadinha nesse link...http://www.phpavancado.net/node/17t+Interessante, Mutante.Mas uma dúvida: Eu hospedo meu site em um provedor pago. O Pear já faz parte do PHP ou eu tenho que solicitar a instalação dele? No caso dele não estar instalado, eu mesma posso instalá-lo via FTP?[]sMary Compartilhar este post Link para o post Compartilhar em outros sites
mestre fyoda 1 Denunciar post Postado Dezembro 8, 2005 checa <?phpsession_name('captcha');session_start();?><html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Captcha</title><body><?phpif(isset($_POST['minhaPalavra'])){ if($_SESSION['palavra'] == $_POST['minhaPalavra'])echo "<script>location='http://localhost:8084/Projeto_Interdiciplinar/index.jsp';</script>"; else echo 'errado';}?><form action="checa.php" method="post"><img src="imagem.php"><br>Digite: <input type="text" name="minhaPalavra"><input type="submit" name="ok" value="Ok"></form></body></html>imagem<?php$largura = 180;$altura = 30;$imagem = imagecreate($largura,$altura); // cria uma imagem/*Possiveis Letras do captcha*//*'a','b','c','d','e','f','g','h','i', 'j','k','l','m','n','o','p','q','r', 's','t','u','v','w','x','y','z', 'A','B','C','D','E','F','G','H','I', 'J','K','L','M','N','O','P','Q','R', 'S','T','U','V','W','X','Y','Z', */$letras = array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'); // neste caso o captcha terá só números$tam_letras = count($letras)-1;/*Fim possives letras*//*Cores da imagem*/$cinza = imagecolorallocate($imagem,0xF8,0xF8,0xF8);$cinza_escuro = imagecolorallocate($imagem,0xCC,0xCC,0xCC);$vermelho = imagecolorallocate($imagem,0xFF,0x00,0x00);$azul = imagecolorallocate($imagem,0x0F,0x93,0xFF);$verde = imagecolorallocate($imagem,0x00,0x66,0x00);$rosa = imagecolorallocate($imagem,0xFF,0x1A,0x98);$preto = imagecolorallocate($imagem,0x00,0x00,0x00);$marrom = imagecolorallocate($imagem,0xDC,0x91,0x3D);$laranja = imagecolorallocate($imagem,0xFF,0x8C,0x24);$cores = array($vermelho,$azul,$verde,$rosa,$preto, $marrom,$laranja);$tam_cores = count($cores)-1;/*Fim das cores*//*Escrevendo linhas de fundo*/$nro_linhas = 20;for($i=0;$i<$nro_linhas;$i++){ $x1 = rand(0,$largura); $x2 = rand(0,$largura); $y1 = rand(0,$altura); $y2 = rand(0,$altura); imageline($imagem,$x1,$y1,$x2,$y2,$cinza_escuro);}/*Fim linhas de fundo*//*Escrevendo arcos de fundo*/$nro_arcos = 20;for($i=0;$i<$nro_arcos;$i++){ $cx = rand(0,$largura); $w = rand(0,$largura); $cy = rand(0,$altura); $h = rand(0,$altura); $s = rand(0,360); $e = rand(0,360); imagearc($imagem,$cx,$cy,$w,$h,$s,$e,$cinza_escuro);}/*Fim arcos de fundo*//*Escrevendo as Letras na imagem*/$palavra = '';$xPos = 0;for($i=0;$i<6;$i++){ $xPos += rand(10,25); $yPos = rand(10,15); $j = rand(0,$tam_cores); $k = rand(0,$tam_letras); $palavra .= $letras[$k]; imagestring($imagem, 5, $xPos, $yPos, $letras[$k], $cores[$j]);}/*fim escrevendo letras na imagem*/session_name('captcha');session_start();$_SESSION['palavra'] = $palavra;header("Content-type: image/png");imagepng($imagem);imagedestroy($imagem);?> Compartilhar este post Link para o post Compartilhar em outros sites
nknk 3 Denunciar post Postado Dezembro 13, 2006 Estou tendo problemas no meu 'captcha' tba dúvida que eu gostaria de tirar éno campo do formulário eu posso colocar action="<?php echo $_SERVER['SCRIPT_NAME'];?>"SCRIPT_NAME eu coloco enviar, referente ao arquivo enviar.phpou eu deixo somenteaction="enviar.php"enviar.phpé o arquivo que vai receber os valores dos campos e postar na tabela, o que acontecesse no meu formulário é que depois de todas as validações ele volta para tela do formulário e nao para a do enviar.php Compartilhar este post Link para o post Compartilhar em outros sites
Cyb3r-X 0 Denunciar post Postado Agosto 27, 2007 starta a session primeiro e semespaço<?session_start();session_name('captcha');..... blablbaRealmente é so colocar na ordem em que o Adailton falou.Imagem.php<?php$largura = 150;$altura = 30;$imagem = imagecreate($largura,$altura); // cria uma imagem/*Possiveis Letras do captcha*//*'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',*/$letras = array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'); // neste caso o captcha terá só números$tam_letras = count($letras)-1;/*Fim possives letras*//*Cores da imagem*/$cinza = imagecolorallocate($imagem,0xF8,0xF8,0xF8);$cinza_escuro = imagecolorallocate($imagem,0xCC,0xCC,0xCC);$vermelho = imagecolorallocate($imagem,0xFF,0x00,0x00);$azul = imagecolorallocate($imagem,0x0F,0x93,0xFF);$verde = imagecolorallocate($imagem,0x00,0x66,0x00);$rosa = imagecolorallocate($imagem,0xFF,0x1A,0x98);$preto = imagecolorallocate($imagem,0x00,0x00,0x00);$marrom = imagecolorallocate($imagem,0xDC,0x91,0x3D);$laranja = imagecolorallocate($imagem,0xFF,0x8C,0x24);$cores = array($vermelho,$azul,$verde,$rosa,$preto,$marrom,$laranja);$tam_cores = count($cores)-1;/*Fim das cores*//*Escrevendo linhas de fundo*/$nro_linhas = 20;for($i=0;$i<$nro_linhas;$i++){$x1 = rand(0,$largura);$x2 = rand(0,$largura);$y1 = rand(0,$altura);$y2 = rand(0,$altura);imageline($imagem,$x1,$y1,$x2,$y2,$cinza_escuro);}/*Fim linhas de fundo*//*Escrevendo arcos de fundo*/$nro_arcos = 20;for($i=0;$i<$nro_arcos;$i++){$cx = rand(0,$largura);$w = rand(0,$largura);$cy = rand(0,$altura);$h = rand(0,$altura);$s = rand(0,360);$e = rand(0,360);imagearc($imagem,$cx,$cy,$w,$h,$s,$e,$cinza_escuro);}/*Fim arcos de fundo*//*Escrevendo as Letras na imagem*/$palavra = '';$xPos = 0;for($i=0;$i<6;$i++){$xPos += rand(10,25);$yPos = rand(10,15);$j = rand(0,$tam_cores);$k = rand(0,$tam_letras);$palavra .= $letras[$k];imagestring($imagem, 5, $xPos, $yPos, $letras[$k], $cores[$j]);}/*fim escrevendo letras na imagem*/session_start();session_name('captcha');$_SESSION['palavra'] = $palavra;header("Content-type: image/png");imagepng($imagem);imagedestroy($imagem);?>eu mudei alguma coisa aki<?php session_start(); if ($_POST['minhaPalavra'] != $_SESSION['palavra']) { echo "ERRO";// echo "<script>location='teste.php';</script>"; } else { // include ("sendmail.php"); echo "OK"; } unset($_SESSION['palavra']); ?>funciono certinho. o cod é bom ! Compartilhar este post Link para o post Compartilhar em outros sites
tiagocaus 1 Denunciar post Postado Agosto 29, 2007 Olá Amigo,Você conseguiu recolver o problema com seu Captcha?Eu tentei usar e tambem não consegui, aparece a imagem certinho mas ele não verifica se esta certo ou errado.Se algum poder me ajudar.Meu form é esse:index.php<?phpif(isset($_POST['minhaPalavra'])){ if($_SESSION['palavra'] == $_POST['minhaPalavra']) echo 'ok'; else echo 'errado';}?> <form method="post" name="form1" action="<?php echo $editFormAction; ?>"> <table width="89%" align="center" class="borda_cinza"> <tr valign="baseline"> <td width="80" align="right" nowrap><div align="left"> Nome:</div></td> <td width="360"><input name="nome" type="text" class="form_FontePreto" value="" size="40" onKeyPress="fcnOnlyNum()"></td> </tr> <tr valign="baseline"> <td nowrap align="right"><div align="left"> Email:</div></td> <td><input name="email" type="text" class="form_FontePreto" value="" size="40" onKeyPress="fcnOnlyNum()"></td> </tr> <tr valign="baseline"> <td align="left" valign="middle" nowrap><div align="left"> Testeminho:</div></td> <td><textarea name="testeminho" cols="55" rows="10" class="form_FontePreto" onKeyPress="fcnOnlyNum()"></textarea></td> </tr> <tr valign="baseline"> <td nowrap align="right"> </td> <td> <img src="captcha.php"><br>Digite: <input type="text" name="minhaPalavra"> </td> </tr> <tr valign="baseline"> <td nowrap align="right"> </td> <td> </td> </tr> <tr valign="baseline"> <td nowrap align="right"><div align="left"></div></td> <td><input type="submit" class="FormularioBotão" value="Inserir Testemunho" name="ok" ></td> </tr> </table> <input type="hidden" name="MM_insert" value="form1"> </form> Compartilhar este post Link para o post Compartilhar em outros sites