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,
Estou usando um captcha. Nele, salvo o valor da palavra em uma sessão. Chamo o captcha no form e logo após fechar este form chamo a validação em jquery dele. Estou tentando salvar numa var js o valor desta sessão, porém, só salva o valor anterior, exemplo. Estou com o valor 12345 agora, ao dar F5, o valor na variável js fica 12345 e o valor da sessão é atualizado. Como corrigir isso?
<form id="cadastrar_empresa" method="post" action="">
<div class="form-group">
<label for="palavra">Imagem<small>*</small></label>
<input type="text" class="form-control" id="palavra" name="palavra" value="" />
<img src="<?php echo URL; ?>painel/php/captcha.php?l=150&a=50&tf=20&ql=5">
</div>
<input type="submit" id="bt_cadastrar_empresa" value="Cadastrar" />
</form>
<script type="text/javascript">
jQuery("#cadastrar_empresa").submit(function () {
var $palavra_1 = '<?php echo $_SESSION["palavra"]; ?>';
});
</script>
Obrigado pela atenção.
tenta assim amigo
<form id="cadastrar_empresa" method="post" action="">
<div class="form-group">
<label for="palavra">Imagem<small>*</small></label>
<input type="text" class="form-control" id="palavra" name="palavra" value="" />
<img src="<?php echo URL; ?>painel/php/captcha.php?l=150&a=50&tf=20&ql=5">
<input id='captcha' type="hidden">
</div>
<input type="submit" id="bt_cadastrar_empresa" value="Cadastrar" />
</form>
<script type="text/javascript">
jQuery("#cadastrar_empresa").submit(function () {
var palavra_1 = jQuery("#captcha").val();
console.log(palavra1);
});
</script>@paulinhosupriano,
Já tem o session_start no cabecalho.php, como informei no problema, pega a sessão, só que a definida antes de atualizar a página.
@Marcos_imasters,
A palavra digitada já foi resgatada antes, preciso pegar agora o valor correto da palavra, o que foi armazenado em sessão ao criar o captcha, da forma que você fez, esse valor também não está sendo passado.
Obrigado pela atenção.
Veja se te ajuda: http://www.hufersil.com.br/labs/captcha/
Arquivos: http://www.hufersil.com.br/labs/captcha/captcha.zip
@hufersil,
Implementei aqui seu captcha, entendi a forma que faz a validação, seguindo sua lógica, como poderia alterar a forma que valido os campos? Veja a forma atual que faço a validação:
<script type="text/javascript">
jQuery("#cadastrar_empresa").submit(function () {
var $fantasia = jQuery("#fantasia");
var $ramo = jQuery("#ramo");
var $endereco = jQuery("#endereco");
var $estado = jQuery("#estado");
var $cidade = jQuery("#cidade");
var $bairro = jQuery("#bairro");
var $cep = jQuery("#cep");
var $telefone_1 = jQuery("#telefone_1");
var $palavra = jQuery("#palavra");
if ($fantasia.val() === "" ||
$ramo.val() === "" ||
$endereco.val() === "" ||
$estado.val() === "" ||
$cidade.val() === "" ||
$bairro.val() === "" ||
$cep.val() === "" ||
$telefone_1.val() === "" ||
$palavra.val() === "")
{
if ($fantasia.val() === "") {
$fantasia.addClass("vazio");
}
if ($ramo.val() === "") {
$ramo.addClass("vazio");
}
if ($endereco.val() === "") {
$endereco.addClass("vazio");
}
if ($estado.val() === "") {
$estado.addClass("vazio");
}
if ($cidade.val() === "") {
$cidade.addClass("vazio");
}
if ($bairro.val() === "") {
$bairro.addClass("vazio");
}
if ($cep.val() === "") {
$cep.addClass("vazio");
}
if ($telefone_1.val() === "") {
$telefone_1.addClass("vazio");
}
if ($palavra.val() === "") {
$palavra.addClass("vazio");
}
return false;
} else {
var dados = jQuery(this).serialize();
jQuery.ajax({
type: "POST",
url: "../painel/php/empresa_inserir.php",
data: dados,
success: function (data) {
var texto = (data !== "Registro inserido com sucesso! Aguarde a liberação desta empresa.") ? "erro" : "sucesso";
jQuery("#form_empresa").hide("slow", function () {
jQuery("#resultado").show("slow", function () {
var msg = '<p class="' + texto + '">' + data + '</p>';
var voltar = '<a class="voltar" href="../anuncie/">Voltar</a>';
jQuery("#resultado").html(msg + voltar);
});
});
}
});
return false;
}
});
var $fantasia = jQuery("#fantasia");
var $ramo = jQuery("#ramo");
var $endereco = jQuery("#endereco");
var $estado = jQuery("#estado");
var $cidade = jQuery("#cidade");
var $bairro = jQuery("#bairro");
var $cep = jQuery("#cep");
var $telefone_1 = jQuery("#telefone_1");
var $palavra = jQuery("#palavra");
$fantasia.focus(function () {
var $this = jQuery(this);
$this.removeClass("vazio");
});
$ramo.focus(function () {
var $this = jQuery(this);
$this.removeClass("vazio");
});
$endereco.focus(function () {
var $this = jQuery(this);
$this.removeClass("vazio");
});
$estado.focus(function () {
var $this = jQuery(this);
$this.removeClass("vazio");
});
$cidade.focus(function () {
var $this = jQuery(this);
$this.removeClass("vazio");
});
$bairro.focus(function () {
var $this = jQuery(this);
$this.removeClass("vazio");
});
$cep.focus(function () {
var $this = jQuery(this);
$this.removeClass("vazio");
});
$telefone_1.focus(function () {
var $this = jQuery(this);
$this.removeClass("vazio");
});
$palavra.focus(function () {
var $this = jQuery(this);
$this.removeClass("vazio");
});
</script>existe uma biblioteca jquery.validate muito interessante a mesma, segue abaixo o link.
@paulinhosupriano,
A ideia é resgatar o valor da sessão e validar o captcha sem refresh algum.
Acho mais seguro utilizar ajax então.
Como eu postei anteriormente, e agora sugerido pelo William Bruno, acredito que por ajax é mais seguro e rápido.
Se você levar o valor do captcha para validar via JS (lado do cliente), você pode sofre um ataque de man-in-the-middle, que pega o valor durante a transmissão e faz o que bem entender, ou até mesmo facilitar a vida de quem faz um robozinho para pegar os valores vindos na requisição.
Fazendo por ajax, você também centraliza as validações em um lugar só.
Consegui, ficou da seguinte forma:
var $resultado = '';
jQuery.ajax({
url: '../painel/php/valida_captcha.php',
async: false,
data: dados,
success: function (data) {
$resultado = data;
}
});
Logo abaixo faço a validação.
Obrigado.