Ya que usas Base de datos .. se trata de que tengas una tabla más en tu BD .. donde registres la IP del cliente:
Con:
$_SERVER['REMOTE_ADDR']
Obtienes la IP de tu cliente (el que está visitando o intentando votar).
La registras en tu BD si no existe .. para eso:
Código PHP:
<?
// conectas a tu BD .. etc ...
// cuantas el n° de ocurrencias de la IP del cliente ..
$sql="SELECT COUNT(*) WHERE ip='".$_SERVER['REMOTE_ADDR']."
'";
$result=mysql_query($sql) or die (mysql_error());
// Si es 0 .. no existe .. la insertas en tu BD y dejas votar ...
if (mysql_result($result,0) == 0){
$sql="INSERT INTO ips (ip) VALUES ('".$_SERVER['REMOTE_ADDR']."')";
mysql_query($sql);
// Aquí iría tu actual código de registro de la votación.
} else {
// Si existe la IP .. sueltas el mensaje de erro Y no dejas votar.
echo "Su IP: ".$_SERVER['REMOTE_ADDR']." ya realizó una votación.";
}
?>
Y la tabla sería algo tipo:
Código PHP:
CREATE TABLE `ips` (
`ip` varchar(11) default NOT NULL,
PRIMARY KEY (`ip`)
) TYPE=MyISAM;
Podrías registrar en que fecha votó tal IP, ... así podrías quitar el desbloqueo a dicha IP por tiempo.
Recuerda también y no discrimienes a las personas que votan pero su conexión pasa por un proxy (tomandos todos la misma IP) .. com proxys de empresas .. o de algunos ISP's que pasan a todos sus usuarios por una misma IP .. Eso te va a dar problemas. Realmente lo único seguro para evitar que vote una persona dos veces es obligar a un registro (con su usuario/password) y marcar a ese usuario cuando vote.
Un saludo,