Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá amigos,tudo bom?
Bom fiz um pequeno sistema de captcha onde eu gero uma string, e exibo ela num input 'desativado'.
O problema é o seguinte, eu gero a string(entenda string como o captcha gerado), mostro ela tudo ok! Mas quando clico no submit,a função que cria a string é executada novamente, o que faz com que o que foi colocado no input de confirmação não seja igual a strng gerada!
Já tentei salvar o script numa sessão, não deu certo.. o que eu posso fazer, sem ser salvar a string em database?
****
Tá aqui o meu código:
<?php
include ("config.php");
function gerandostring($n){
$str = "abcdefghijlmnpqrstuvxzywk123456789";
$cod = "";
for($a = 0;$a < $n;$a++){
$rand = rand(0,35);
$cod .= substr($str,$rand,1);}
return $cod;}
$string = gerandostring(6);
if(isset($_POST["enviar"]) == true) { {
$email = $_POST['email'];
$captcha = $_POST['captcha'];
if($captcha != $string){
echo '<script>window.alert("Código captcha errado! ");';
echo 'window.location.href="?pagina=nova-senha";</script>';
exit;
}
$busca_usuario = mysql_query("SELECT * FROM usuarios WHERE email like '$email'");
while ($reg = mysql_fetch_array($busca_usuario)) {
//variaveis
$user = $reg['usuario'];
$emaildb = $reg['email'];
}
$cod = sha1($user.$captcha.$email);
if($_POST['email'] == '') {
echo '<script>window.alert("Preencha o campo email");';
echo 'window.location.href="?pagina=nova-senha";</script>';
exit;
}
if($_POST['captcha'] == '') {
echo '<script>window.alert("Preencha o campo Captcha");';
echo 'window.location.href="?pagina=nova-senha";</script>';
exit;
}
if ($email == $emaildb) {
query e scripts
}
}
}
?>
Agradeço qualquer tipo de ajuda! Obrigado!
Sim, foi uma boa idéia fazer com md5!! :D
Mas é o seguinte toda vez que clico em submit, a session é atualizada pela nova string gerada. Ai o que foi colocado no $_POST não vai conferir com que a session.
:S
Alguma idéia?
Obrigado!!,Mulambo
Verifique se a SESSION já existe. Se já existir, não gera uma nova. Ou mais simples: verifique se as strings são iguais A-N-T-E-S de gerar uma nova.
Para quem programou o código acima, não consigo enxergar dificuldade para fazer isso.
Basta um if. Tente implementar e poste os resultados.
Até mais.
Nossa, realmente foi vacilo e erro de lógica!
Consegui resolver o problema, e tô postando aqui o resultado caso alguem precise!
<?php
include ("config.php");
$string = substr(md5(uniqid('')),-6,6);
$captchaend = $_SESSION['Captchatrade'];
//teste
if($captchaend != $string) {
$_SESSION['Captchatrade'] = $string;
}
if(isset($_POST["enviar"]) == true) { {
$email = $_POST['email'];
$captcha = $_POST['captcha'];
if($captcha != $captchaend){
echo '<script>window.alert("Código captcha errado! ");';
echo 'window.location.href="?pagina=nova-senha";</script>';
exit;
}
$busca_usuario = mysql_query("SELECT * FROM usuarios WHERE email like '$email'");
while ($reg = mysql_fetch_array($busca_usuario)) {
//variaveis
$user = $reg['usuario'];
$emaildb = $reg['email'];
}
$cod = sha1($user.$captcha.$email);
if($_POST['email'] == '') {
echo '<script>window.alert("Preencha o campo email");';
echo 'window.location.href="?pagina=nova-senha";</script>';
exit;
}
if($_POST['captcha'] == '') {
echo '<script>window.alert("Preencha o campo Captcha");';
echo 'window.location.href="?pagina=nova-senha";</script>';
exit;
}
if ($email == $emaildb) {
}
}
}
?>
Obrigado pela ajuda ai! Eu ando tão focado em outras coisas que acabei vacilando ali! ^^
Abraços!
Amigo, ao invés de gravar no BD, faça assim:
No formulário gere um algoritmo, inteligente de preferência, para o usuário responder, e grave numa SESSION em MD5.
Se o md5(POST) do usuário for igual ao $_SESSION, tudo certo, senão repete o procedimento.
Entendeu?
Nunca fiz um sistema assim, mas se eu fosse fazer, provavelmente faria dessa maneira.
EDIT: Se não quiser usar sessions, por acessibilidade, use input hidden.
Até mais.