Kante 0 Denunciar post Postado Dezembro 11, 2007 Olá phpmigos, Tou fazendo um formulário de votação, onde após votar uma vez, o usuário que votou não pode votar de novo... Fiz então o código abaixo, com o objetivo de controlar tal situação, ou seja, fazendo um select no banco antes de atualizar com os mesmos dados da atualização, seguido de um if para o controle pertinente... Mas o problema é que tal if não está sendo respeitado pois ao clicar no botão atualizar do Mozzila Firefox, ele faz um uptdate novamente no banco: PHP $TotalTesteDeVoto=0 $TotalTesteDeVoto = "select * from tbquestaluno Where JaVotou=1 and pkRespCod='".$ipkRespCod."'"; $ResultTesteVotou = mysql_query($TotalTesteDeVoto) or die(mysql_error()); $TotalTesteVotou = mysql_num_rows($ResultTesteVotou); if ($TotalTesteDeVoto==0) { echo "<script language='Javascript'> alert('Voto já registrado. O sistema não permite dupla votação')</script>"; } if ($TotalTesteDeVoto !=0) { $SqlAtualizaVoto= "update tbvotacoes set FlagJaVotou=1 WHERE pkRespCod='".$ipkRespCod."'"; mysql_query($SqlAtualizaVoto) or die(mysql_error()); echo "<script language='Javascript'> alert('Seu Voto Acaba de Ser Registrado. Muito Obrigado pela Tua Colaboração')</script>"; } ?> Alguém poderia me dizer o que está acontecendo ??? Imaginei que um refresh no banco antes do referido teste talvez resolveria o problema, mas tou começando em php agora e nem imagino como fazer isso... Alguém helpeia-me ? Agradecido desde já, Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Dezembro 11, 2007 Use cookie. Basta determinar um tempo para a existência dele. Também é possível usar sessões, mas, nesse caso, o bloqueio só ocorreria enquanto o navegador não for fechado. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Kante 0 Denunciar post Postado Dezembro 11, 2007 Desculpe-me pela minha suposta ignorância Beraldo, mas como faço isso ? Compartilhar este post Link para o post Compartilhar em outros sites
Lab Design 0 Denunciar post Postado Dezembro 12, 2007 include("../global.php"); //funcoes para conexao com database $id_r = $_GET['id_r']; // id da resposta $id_p = $_GET['id_p']; // id da pergunta $todo = $_GET['todo']; // action $enq = "enq1"; $msg = ""; $conn_enq = mysql_connect($host,$userDB,$pwdDB); if (!$conn_enq) { die ("Falha de Conexão!"); } mysql_select_db($dataBase); if ($todo=="votar") { // PHP adiciona um hit á resposta da enquete // recupera os dados dos campos hidden if (!$_COOKIE[$enq]) { $remotaddr = $_SERVER["REMOTE_ADDR"]; $query=mysql_query("update enquete set hits= hits + 1 where id_enquete=$id_r",$conn_enq); setcookie ("$enq", $remotaddr,time()+86400); } $msg = "Agradecemos sua participação!"; } else $msg="Você já votou nesta enquete hoje!!!"; @mysql_free_result($query); mysql_close($conn_enq); Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Cobra 0 Denunciar post Postado Dezembro 12, 2007 Dar uma pesquisada no Google ou no site do PHP ajudaria... http://forum.imasters.com.br/public/style_emoticons/default/natal_happy.gif http://www.php.net/setcookie http://www.php.net/session Compartilhar este post Link para o post Compartilhar em outros sites
Kante 0 Denunciar post Postado Dezembro 12, 2007 Mas isso só é possível com cookie ativado né ? E outra coisa, se o usuário excluir o cookie como fica ? (É q numa votação séria podem ter alguns mal intensionados que venham a excluir o cookie para poder votar de novo). Existe alguma outra técnica além dos cookies ? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Dezembro 12, 2007 Se o cara excluir o cookie, pode votar de novo, sim. Se você fizer com sessão, basta ele fechar o navegador e abrir de novo. Se fizer restrição por IP, basta reconectar (outro problema é qunato a usuários em uma mesma rede: todos usam o mesmo IP). Cada um tem uma forma de transgressão. Mas ainda acho cookie mais eficiente. Lembre-se de que leigos, muitas vezes, nem sabem o que é um cookie, muito menos como removê-lo. Compartilhar este post Link para o post Compartilhar em outros sites
Kante 0 Denunciar post Postado Dezembro 12, 2007 Se o cara excluir o cookie, pode votar de novo, sim. Se você fizer com sessão, basta ele fechar o navegador e abrir de novo. Se fizer restrição por IP, basta reconectar (outro problema é qunato a usuários em uma mesma rede: todos usam o mesmo IP). Cada um tem uma forma de transgressão. Mas ainda acho cookie mais eficiente. Lembre-se de que leigos, muitas vezes, nem sabem o que é um cookie, muito menos como removê-lo. Pois é Beraldo, mas é bom lembrar que com a interligação global das informações propiciadas pela internet, existe cada vez menos leigos no mercado né ? Além disso existem também vários supostos concorrentes que podem "testar" teu sistema de qualquer parte do planeta com o objetivo de achar "furos" e desmoralizá-lo e assim talvez ganhar teu cliente...Por isso que vou ficar insistindo na busca de novas alternativas... Imagino que uma das soluções esteja na utilização correta do teste de consulta no MySQL que postei no início do tópico e que não sei porque não está funcionando... Se puder me ajudar neste sentido, com certeza será de grande valia... Mas, mesmo assim, continuarei pesquisando até achar e quando conseguir posto aí...Se achar, espero que poste também visto que pelo que entendi tal solução é do interesse de ambos né ? Baita abraço e grato novamente pela tua contribuição. Compartilhar este post Link para o post Compartilhar em outros sites
Kante 0 Denunciar post Postado Dezembro 13, 2007 Bom dia a todos, Informo-lhes que consegui resolver o problema simplesmente utilizando as facilidades das consultas SQL, em conformidade com o que estava tentando fazer no início do tópico, mas com o erro de não testar a variável certa, ou seja, a "$TotalTesteVotou", a qual armazena o total de registros, resultando em '0' no caso do cara ainda não ter votado. Aproveito para agradecer a todos os que contribuiram direta e indiretamente para chegar a esta solução. http://forum.imasters.com.br/public/style_emoticons/default/natal_noel.gif []'s Compartilhar este post Link para o post Compartilhar em outros sites