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!!
Estou desenvolvendo um sistema de enquete, nada tão complexo, mas estou com um problema, e já verifiquei varios codigos sobre cookie e acho que está correto meu codigo, só que ele não está querendo setar o cookie, alguem pode analisar o codigo e ver o que está errado
<?
$enquete = strip_tags($_POST["enquete"]);
if($enquete == 'votar') {
$id_questao = strip_tags($_POST["id_questao"]);
$escolha = strip_tags($_POST["escolha"]);
if($escolha == '') {
?>
<script>alert("Você precisa selecionar uma opção!");</script>
<?
} else {
$nome_cookie = "enquete_wow";
if (isset($_COOKIE['$nome_cookie'])) {
?>
<script>alert("Você pode votar apenas uma vez por dia!");</script>
<?
}else {
$ip = $_SERVER["REMOTE_ADDR"];
mysql_query("UPDATE options set votos = votos + 1 WHERE id = '$escolha'") or die(mysql_error());
mysql_query("INSERT into logs_votos (id,id_opcao,data_registro,ip) VALUES ('','$escolha',NOW(),'$ip')") or die(mysql_error());
setcookie("enquete_wow", $ip, time()+3600*24);
?>
<script>alert("Voto computado com sucesso!");</script>
<?
}
}
}
?>Antes já estava assim e mesmo assim não dava certo.
Eu dei um print_r($_COOKIE[$nome_cookie]); para listar o que estava nele, e ele está vindo vazio.
Pelo que percebi ele não esta setando o cookie.
Já fiz de tudo e não quer setar de deixo algum, e em outra pagina do mesmo site o cookie funciona perfeito.
Você já verificou se não está printando nada na tela antes de setar o cookie? Como um espaço antes de abrir o bloco de código PHP por exemplo.
Coloque esse código no início do seu script pra ver se retorna algum erro:
error_reporting(E_ALL);
ini_set('display_errors', TRUE);Eu não sou iniciante em PHP... Eu já fiz todos os testes!
Ele inclui o registro na tabela e era pra setar o cookie com o nome "enquete_wow" com o valor do IP.
Eu inclui um cookie manualmente pela barra developer e ele verificou corretamente que o cookie estava setado.
Dai eu limpei todos os cookies, cliquei em votar, votou corretamente. Era pra ter gravado o cookie para que não pudesse ser votado novamente, mas ele vota. Ele não está gravando o cookie.
A e coloquei o codigo de erro e deu o seguinte:
Warning: Cannot modify header information - headers already sent by (output started at /home/storage/3/b9/ee/andstudio/public_html/clientes/wow/institucional/header.php:40) in /home/storage/3/b9/ee/andstudio/public_html/clientes/wow/institucional/index.php on line 285
Esta mensagem de erro indica que está sendo printado algum conteúdo antes de setar o cookie.
Remova os espaços antes do <?.
Em que lugar??
Não tem espaço antes do de abrir o PHP? No código que você colou parece ter.
Pelo erro que retornou parece que você está tentando setar o cookie em um arquivo index.php e antes está incluíndo um arquivo header.php contendo um cabeçalho com HTML, não seria isso?
Minha pagina ta estruturada da seguinte forma...
Um include do header...
No meio o conteudo onde encontra-se a enquete
e final o footer que é outro include.
Então está aí o erro, você não pode enviar nenhum conteúdo antes de setar o cookie, pois o cookie é enviado para o navegador através do cabeçalho da página que vem antes do conteúdo.
Putz, nem tinha pensado nisso!
Agora funciono perfeitamnete...
Pode fechar o topico!
Obrigado ae!!!
O que notei errado no seu código é o seguinte:
if (isset($_COOKIE['$nome_cookie'])) {
deveria ser:
if (isset($_COOKIE[$nome_cookie])) {