← Desenvolvimento

Ajuda com votação

Lida 12453 vezes

Offline

OFFICER 
Membro
Mensagens 2076 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

Bem eu a partir de um tutorial consegui inserir um sistema de votação integrando PHP & MySQL. O que eu gostava é que ele só deixasse votar uma vez por IP, como fazer? Deixo abaixo o código fonte do formulário de voto e do script que faz o trabalho.

Formulário:
Citar

<?php
function pegar_cenas(){
$con=mysql_connect("localhost", "db", "pass") or die ("Erro de ligação ao servidor de Votação");
$sel=mysql_select_db("db", $con) or die ("Erro de ligação à base de dados de Votação");
$sql="select pergunta, resposta1, resposta2, resposta3, resposta4 from votacao";
$exe=mysql_query($sql, $con) or die ("Problemas no requerimento dos dados");
$registo=mysql_fetch_array($exe);
return $registo;
}
$valores=pegar_cenas();
?>
<form name="form1" method="post" action="votacao.php">
<table width="126" border="1" bordercolor="#707070" bgcolor="#4E4E4E">
<tr>
<td colspan="2" align="center"><font color="#CCCCCC"><b>Votação</b></font></span></td>
</tr>
<tr>
<td colspan="2" align="justify"><div align="center"><font color="#CCCCCC"><?php echo $valores[0]; ?></font></div></td>
</tr>
<tr>
<td width="36"><input name="op" type="radio" value="1"></td>
<td width="148"><font color="#CCCCCC"><?php echo $valores[1] ; ?></font></td>
</tr>
<tr>
<td><input name="op" type="radio" value="2"></td>
<td><font color="#CCCCCC"><?php echo $valores[2] ; ?></font></td>
</tr>
<tr>
<td><input name="op" type="radio" value="3"></td>
<td><font color="#CCCCCC"><?php echo $valores[3] ; ?></font></td>
</tr>
<tr>
<td><input name="op" type="radio" value="4"></td>
<td><font color="#CCCCCC"><?php echo $valores[4] ; ?></font></td>
</tr>
<tr>
<td colspan="2"><div align="center">
  <input type="submit" name="2" value="Votar">
  <input type="submit" name="1" value="Resultados">
</div></td>
</tr>
</table>
</form>


ficheiro votacao.php:

Citar
<?php
function resultados(){
$con=mysql_connect("localhost", "db", "pass") or die ("Erro de ligação ao servidor de Votação");
$sel=mysql_select_db("db", $con) or die ("Erro de ligação à base de dados de Votação");
$sql="select * from votacao";
$exe=mysql_query($sql, $con) or die ("Erro ao interrogar a base de dados");
$registo=mysql_fetch_array($exe);
mysql_close($con);
echo "<body bgcolor='#555555' text='#CCCCCC' link='#FFFFFF' vlink='#FFFFFF' alink='#FFFFFF'><form name='form1' method='post' action='votacao.php'>
<table width='200' border='1' align='center' bordercolor='#707070' bgcolor='#4E4E4E'>
<tr>
<td colspan='2' align='center'><font color='#CCCCCC'><b>Votação</b></font></td>
</tr>
<tr>
<td colspan='2' align='center'><font color='#CCCCCC'>$registo[0]</font></td>
</tr>
<tr>
<td width='36'><font color='#CCCCCC'>$registo[5]</font></td>
<td width='148'><font color='#CCCCCC'>$registo[1]</font></td>
</tr>
<tr>
<td><font color='#CCCCCC'>$registo[6]</font></td>
<td><font color='#CCCCCC'>$registo[2]</font></td>
</tr>
<tr>
<td><font color='#CCCCCC'>$registo[7]</font></td>
<td><font color='#CCCCCC'>$registo[3]</font></td>
</tr>
<tr>
<td><font color='#CCCCCC'>$registo[8]</font></td>
<td><font color='#CCCCCC'>$registo[4]</font></td>
</tr>
<tr>
<td colspan='2' align='center'><font color='#CCCCCC'><a href='index.php'>Voltar à página principal</a></font></td>
</tr>
</table>
</form>";
}

function votar(){
//sabido o valor vamos fazer update ao campo
$o_con=mysql_connect("localhost", "db", "pass") or die ("Erro de ligação ao servidor de Votação");
$sel=mysql_select_db("db", $o_con) or die ("Erro de ligação à base de dados de Votação");
$sql="update votacao set valor". $_POST['op'] . "=valor". $_POST['op'] ."+1";
$exe=mysql_query($sql, $o_con) or die ("Erro ao interrogar a base de dados");
if (mysql_affected_rows()==1){ resultados();} else { echo "<script>alert('A sua votação não foi concluida com sucesso')</script>";}
//mysql_close($o_con);
}
if(isset($_POST['2'])){votar();}elseif(isset($_POST['1'])){resultados();}
?>


Fico a aguardar uma ajudinha  :roll:
Offline

OFFICER 
Membro
Mensagens 2076 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

ng me consegue ajudar? :(
Offline

morpheus 
Membro
Mensagens 1199 Gostos 0
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 1000 Posts

:lol: hello there!

desculpa a pergunta, mas queres mesmo fazer isso?

pelo teu script, essa sql que usas actualiza sempre o mesmo valor, ou seja, não mantem o histórico dos votos recebidos, correcto?

para fazeres um "filtro" dos ips que já votaram, a meu ver, tens duas hipóteses: ou crias uma 2ª tabela só para armazenar ips ou alteras tudo para armazenar ips e votos na mesma... a primeira é mais fácil.

depois de criar a tabela, acrescenta-se um pouco mais de código para só actualizar o voto se o ip NAO estiver já gravado. ;)

diz-me de tua justiça e eu ajudo-te no caminho. deal?
Offline

OFFICER 
Membro
Mensagens 2076 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

morpheus o sistema funciona perfeitamente, basta só acrescentar o bloqueio dos ip's mais nada. Sim prefiro a primeira maneira da-me so uma ajudinha no codigo e onde acrescentar..  :roll:
Offline

morpheus 
Membro
Mensagens 1199 Gostos 0
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 1000 Posts

:roll: ok, tu é que perguntaste.

1º crias uma tabela mysql só com um campo (vamos chamar de ip);
2ª alteras o código assim:

Código: [Seleccione]
<?
$host="";
$sqluser="";
$sqlpassword="";
$database="";
$connection=mysql_select_db($database) or die (mysql_error());
$ip=$_SERVER['REMOTE_ADDR'];
$getrows=mysql_query("SELECT * FROM tabela WHERE ip='$ip'") or die (mysql_error());
$numrows=mysql_numrows($getrows);
if($numrows=='0'){
$query='INSERT INTO tabela (ip) VALUES ('$ip')";
$res=mysql_query($query) or die (mysql_error());
$sel=mysql_select_db("db", $o_con) or die ("Erro de ligação à base de dados de Votação");
$sql="update votacao set valor". $_POST['op'] . "=valor". $_POST['op'] ."+1";
$exe=mysql_query($sql, $o_con) or die ("Erro ao interrogar a base de dados");
if (mysql_affected_rows()==1){ resultados();} else { echo "<script>alert('A sua votação não foi concluida com sucesso')</script>";}
//mysql_close($o_con);}
if(isset($_POST['2'])){votar();}elseif(isset($_POST['1'])){resultados();}}
if($numrows<>'0'){echo"erro";}
?>


3º testas a coisa.
Offline

OFFICER 
Membro
Mensagens 2076 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

só uma perguntinha isso substitui qual deles? o formulário ou o votacao.php?  :?
Offline

morpheus 
Membro
Mensagens 1199 Gostos 0
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 1000 Posts

a parte do:

Código: [Seleccione]
$o_con=mysql_connect("localhost", "db", "pass") or die ("Erro de ligação ao servidor de Votação");
$sel=mysql_select_db("db", $o_con) or die ("Erro de ligação à base de dados de Votação");
$sql="update votacao set valor". $_POST['op'] . "=valor". $_POST['op'] ."+1";
$exe=mysql_query($sql, $o_con) or die ("Erro ao interrogar a base de dados");
if (mysql_affected_rows()==1){ resultados();} else { echo "<script>alert('A sua votação não foi concluida com sucesso')</script>";}
//mysql_close($o_con);
}
if(isset($_POST['2'])){votar();}elseif(isset($_POST['1'])){resultados();}


ele está lá, mas embebido em ifs por causa do ip.
Offline

OFFICER 
Membro
Mensagens 2076 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

mas isso vai substituir o que? dcp la a cena mas n tou a perceber  :?
Offline

morpheus 
Membro
Mensagens 1199 Gostos 0
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 1000 Posts

onde está:

Código: [Seleccione]
$o_con=mysql_connect("localhost", "db", "pass") or die ("Erro de ligação ao servidor de Votação");
$sel=mysql_select_db("db", $o_con) or die ("Erro de ligação à base de dados de Votação");
$sql="update votacao set valor". $_POST['op'] . "=valor". $_POST['op'] ."+1";
$exe=mysql_query($sql, $o_con) or die ("Erro ao interrogar a base de dados");
if (mysql_affected_rows()==1){ resultados();} else { echo "<script>alert('A sua votação não foi concluida com sucesso')</script>";}
//mysql_close($o_con);
}
if(isset($_POST['2'])){votar();}elseif(isset($_POST['1'])){resultados();}


pões:

Código: [Seleccione]
$host="";
$sqluser="";
$sqlpassword="";
$database="";
$connection=mysql_select_db($database) or die (mysql_error());
$ip=$_SERVER['REMOTE_ADDR'];
$getrows=mysql_query("SELECT * FROM tabela WHERE ip='$ip'") or die (mysql_error());
$numrows=mysql_numrows($getrows);
if($numrows=='0'){
$query='INSERT INTO tabela (ip) VALUES ('$ip')";
$res=mysql_query($query) or die (mysql_error());
$sel=mysql_select_db("db", $o_con) or die ("Erro de ligação à base de dados de Votação");
$sql="update votacao set valor". $_POST['op'] . "=valor". $_POST['op'] ."+1";
$exe=mysql_query($sql, $o_con) or die ("Erro ao interrogar a base de dados");
if (mysql_affected_rows()==1){ resultados();} else { echo "<script>alert('A sua votação não foi concluida com sucesso')</script>";}
//mysql_close($o_con);}
if(isset($_POST['2'])){votar();}elseif(isset($_POST['1'])){resultados();}}
if($numrows<>'0'){echo"erro";}


depois de criares a tal tabela "ip"
Offline

OFFICER 
Membro
Mensagens 2076 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

a tabela ip será com auto_increment? e not null? valor 0?  :lol:
Offline

morpheus 
Membro
Mensagens 1199 Gostos 0
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 1000 Posts

podes por uma primeira coluna com o id e auto increment e a segunda (ip) com varchar e 11 caracteres.
Offline

OFFICER 
Membro
Mensagens 2076 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

isso em código fica como? tipo código sql, é que eu tenho uma tabela chamada votacao para esta votacao e n sei se preciso de inserir essa tabela do ip dentro da votacao ou criar mm essa tabela, podes dar-me esta ultima ajudinha?  :oops:
Offline

OFFICER 
Membro
Mensagens 2076 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

Criei um campo dentro da tabela votacao chamado ip com varchar 11 e not null e depois o ficheiro votacao.php ficou assim:

Citar
<?php
function resultados(){
$con=mysql_connect("localhost", "officer_good", "cabrao") or die ("Erro de ligação ao servidor de Votação");
$sel=mysql_select_db("officer_good", $con) or die ("Erro de ligação à base de dados de Votação");
$sql="select * from votacao";
$exe=mysql_query($sql, $con) or die ("Erro ao interrogar a base de dados");
$registo=mysql_fetch_array($exe);
mysql_close($con);
echo "<html>
<head>
<title>Resultados da votação</title>
<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>
<style type='text/css'>
<!--
a:link {
   color: #FFFFFF;
   text-decoration: none;
}
a:visited {
   text-decoration: none;
   color: #FFFFFF;
}
a:hover {
   text-decoration: underline;
   color: #FFFFFF;
}
a:active {
   text-decoration: none;
   color: #FFFFFF;
}
body {
   background-color: #555555;
}
-->
</style></head>

<body>
<form name='form1' method='post' action='votacao.php'>
<table width='200' border='1' align='center' bordercolor='#707070' bgcolor='#4E4E4E'>
<tr>
<td colspan='2' align='center'><font color='#CCCCCC'><b>Votação</b></font></td>
</tr>
<tr>
<td colspan='2' align='center'><font color='#CCCCCC'>$registo[0]</font></td>
</tr>
<tr>
<td width='36'><font color='#CCCCCC'>$registo[5]</font></td>
<td width='148'><font color='#CCCCCC'>$registo[1]</font></td>
</tr>
<tr>
<td><font color='#CCCCCC'>$registo[6]</font></td>
<td><font color='#CCCCCC'>$registo[2]</font></td>
</tr>
<tr>
<td><font color='#CCCCCC'>$registo[7]</font></td>
<td><font color='#CCCCCC'>$registo[3]</font></td>
</tr>
<tr>
<td><font color='#CCCCCC'>$registo[8]</font></td>
<td><font color='#CCCCCC'>$registo[4]</font></td>
</tr>
<tr>
<td colspan='2' align='center'><font color='#E27010'><a href='index.php'>Voltar à página principal</a></font></td>
</tr>
</table>
</form>
</body>
</html>";
}

function votar(){
$host="localhost";
$sqluser="db";
$sqlpassword="pass";
$database="db";
$connection=mysql_select_db($database) or die (mysql_error());
$ip=$_SERVER['REMOTE_ADDR'];
$getrows=mysql_query("SELECT * FROM votacao WHERE ip='$ip'") or die (mysql_error());
$numrows=mysql_numrows($getrows);
if($numrows=='0'){
$query="INSERT INTO votacao (ip) VALUES ('$ip')";
$res=mysql_query($query) or die (mysql_error());
$sel=mysql_select_db("votacao", $o_con) or die ("Erro de ligação à base de dados de Votação");
$sql="update votacao set valor". $_POST['op'] . "=valor". $_POST['op'] ."+1";
$exe=mysql_query($sql, $o_con) or die ("Erro ao interrogar a base de dados");
if (mysql_affected_rows()==1){ resultados();} else { echo "<script>alert('A sua votação não foi concluida com sucesso')</script>";}
//mysql_close($o_con);}
if(isset($_POST['2'])){votar();}elseif(isset($_POST['1'])){resultados();}}
if($numrows<>'0'){echo"erro";}
?>


mas da-me um erro quando vou votar:

Parse error: parse error, unexpected $ in /home/officer/public_html/goodfriends/votacao.php on line 91
Offline

morpheus 
Membro
Mensagens 1199 Gostos 0
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 1000 Posts

e assim?

Código: [Seleccione]
<?php 
function resultados&#40;&#41;&#123; 
$con=mysql_connect&#40;"localhost", "officer_good", "cabrao"&#41; or die &#40;"Erro de ligação ao servidor de Votação"&#41;; 
$sel=mysql_select_db&#40;"officer_good", $con&#41; or die &#40;"Erro de ligação à base de dados de Votação"&#41;; 
$sql="select * from votacao"
$exe=mysql_query&#40;$sql, $con&#41; or die &#40;"Erro ao interrogar a base de dados"&#41;; 
$registo=mysql_fetch_array&#40;$exe&#41;; 
mysql_close&#40;$con&#41;; 
echo "<html> 
<head> 
<title>Resultados da votação</title> 
<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'> 
<style type='text/css'> 
<!-- 
a&#58;link &#123; 
color&#58; #FFFFFF; 
text-decoration&#58; none; 
&#125; 
a&#58;visited &#123; 
text-decoration&#58; none; 
color&#58; #FFFFFF; 
&#125; 
a&#58;hover &#123; 
text-decoration&#58; underline; 
color&#58; #FFFFFF; 
&#125; 
a&#58;active &#123; 
text-decoration&#58; none; 
color&#58; #FFFFFF; 
&#125; 
body &#123; 
background-color&#58; #555555; 
&#125; 
--> 
</style></head> 

<body> 
<form name='form1' method='post' action='votacao.php'> 
<table width='200' border='1' align='center' bordercolor='#707070' bgcolor='#4E4E4E'> 
<tr> 
<td colspan='2' align='center'><font color='#CCCCCC'><b>Votação</b></font></td> 
</tr> 
<tr> 
<td colspan='2' align='center'><font color='#CCCCCC'>
$registo[0&#93;</font></td> 
</tr> 
<tr> 
<td width='36'><font color='#CCCCCC'>
$registo[5&#93;</font></td> 
<td width='148'><font color='#CCCCCC'>
$registo[1&#93;</font></td> 
</tr> 
<tr> 
<td><font color='#CCCCCC'>
$registo[6&#93;</font></td> 
<td><font color='#CCCCCC'>
$registo[2&#93;</font></td> 
</tr> 
<tr> 
<td><font color='#CCCCCC'>
$registo[7&#93;</font></td> 
<td><font color='#CCCCCC'>
$registo[3&#93;</font></td> 
</tr> 
<tr> 
<td><font color='#CCCCCC'>
$registo[8&#93;</font></td> 
<td><font color='#CCCCCC'>
$registo[4&#93;</font></td> 
</tr> 
<tr> 
<td colspan='2' align='center'><font color='#E27010'><a href='index.php'>Voltar à página principal</a></font></td> 
</tr> 
</table> 
</form> 
</body> 
</html>"

&
#125; 

function votar&#40;&#41;&#123; 
$host="localhost"
$sqluser="db"
$sqlpassword="pass"
$database="db"
$connection=mysql_select_db&#40;$database&#41; or die &#40;mysql_error&#40;&#41;&#41;; 
$ip=$_SERVER['REMOTE_ADDR'&#93;; 
$getrows=mysql_query&#40;"SELECT * FROM votacao WHERE ip='$ip'"&#41; or die &#40;mysql_error&#40;&#41;&#41;; 
$numrows=mysql_num_rows&#40;$getrows&#41;; 
if&#40;$numrows=='0'&#41;&#123; 
$query="INSERT INTO votacao &#40;ip&#41; VALUES &#40;'$ip'&#41;"
$res=mysql_query&#40;$query&#41; or die &#40;mysql_error&#40;&#41;&#41;; 
$sel=mysql_select_db&#40;"votacao", $o_con&#41; or die &#40;"Erro de ligação à base de dados de Votação"&#41;; 
$sql="update votacao set valor"$_POST['op'&#93; . "=valor". $_POST['op'&#93; ."+1"; 
$exe=mysql_query&#40;$sql, $o_con&#41; or die &#40;"Erro ao interrogar a base de dados"&#41;; 
if &#40;mysql_affected_rows&#40;&#41;==1&#41;&#123; resultados&#40;&#41;;&#125; else &#123; echo "<script>alert&#40;'A sua votação não foi concluida com sucesso'&#41;</script>";&#125; 
//mysql_close&#40;$o_con&#41;;
&#125; 
if&#40;isset&#40;$_POST['2'&#93;&#41;&#41;&#123;votar&#40;&#41;;&#125;elseif&#40;isset&#40;$_POST['1'&#93;&#41;&#41;&#123;resultados&#40;&#41;;&#125;&#125; 
if&#40;$numrows<>'0'&#41;&#123;echo"erro";&#125; 
?>
Offline

OFFICER 
Membro
Mensagens 2076 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

agora parece já estar bem mas..dá a mensagem de "erro" tal como está na ultima linha. Estive a verificar o campo ip e não tem nenhum ip gravado nem nada..