Tengo el siguiente codigo que funciona muy bien.
Archivo css (rank.css)
Código HTML:
.rank ul {
list-style: none;
margin: 3px;
padding: 0px;
width: 125px;
height: 25px;
position: relative;
background: url(rating.gif) top left repeat-x;
margin-left:0px;
}
.rank li {
padding: 0px;
margin: 0px;
float: left;
}
.rank li.current-rating {
background: url(rating.gif) left bottom;
position: absolute;
height: 25px;
display: block;
text-indent: -9000px;
z-index: 1;
}
.rank li a {
display: block;
width: 25px;
height: 25px;
text-decoration: none;
text-indent: -9000px;
z-index: 20;
position: absolute;
padding: 0px;
background-image: none;
}
.rank li a:hover {
background: url(rating.gif) left center;
z-index: 1;
left: 0px;
}
.rank a.star-1 {left: 0px;}
.rank a.star-1:hover {width: 25px;}
.rank a.star-2 {left: 25px;}
.rank a.star-2:hover {width: 50px;}
.rank a.star-3 {left: 50px;}
.rank a.star-3:hover {width: 75px;}
.rank a.star-4 {left: 75px;}
.rank a.star-4:hover {width: 100px;}
.rank a.star-5 {left: 100px;}
.rank a.star-5:hover {width: 125px;}
Código HTML:
CREATE TABLE `votos_usuarios` (
`id` INT NOT NULL default '0',
`ip` char(15) NOT NULL default '',
`dataCreate` date NOT NULL default '0000-00-00'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `rank` (
`id` INT NOT NULL default '0',
`media` FLOAT NOT NULL default '0',
`votos` INT NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
ranking (rank.php)
Código PHP:
<?php
//funcion para conectar con la base de datos
function conectar(){
// Conexión a la base de datos
$dbhost='localhost';
$dbusername='user'; //nombre del usuario
$dbuserpass='clave'; //password o contraseña del usuario
$dbname='myDB';//nombre de la base de datos
$link = mysql_connect($dbhost, $dbusername,$dbuserpass);
mysql_select_db($dbname, $link);
return $link;
}
$id = $_GET['id_pagina'];//pagina, apartado o noticia que se quiere votar
if($id!=""){
$link = conectar();//conectamos a la base de datos
$voto = $_GET['v'];//voto del usuario
//obtenemos la IP del usuario
if($_SERVER){
if($_SERVER[HTTP_X_FORWARDED_FOR]){
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}elseif($_SERVER["HTTP_CLIENT_IP"]){
$realip = $_SERVER["HTTP_CLIENT_IP"];
}else{
$realip = $_SERVER["REMOTE_ADDR"];
}
}else{
if(getenv( "HTTP_X_FORWARDED_FOR")){
$realip = getenv( "HTTP_X_FORWARDED_FOR");
}elseif(getenv( "HTTP_CLIENT_IP")){
$realip = getenv( "HTTP_CLIENT_IP" );
}else{
$realip = getenv( "REMOTE_ADDR" );
}
}
$fecha = date('Y-m-d');
//actualizamos la tabla de votos realizadas por los usuarios y borramos lo que sean del dia anterior
$result = mysql_query("DELETE FROM votos_usuarios WHERE dataCreate <> '".$fecha."'",$link);
//comprobamos que este usuario ya no haya realizado un voto (identificacion por IP)
$result = mysql_query("SELECT *FROM votos_usuarios WHERE ip = '".$realip."' and id = $id",$link);
$row = mysql_fetch_row($result);
//el usuario no ha votado para este apartado
if($row[0]==""){
$result = mysql_query("SELECT votos,media FROM ".$tabla[$tipo]." WHERE id =$id",$link);
$row = mysql_fetch_row($result);
$auxmedia = $row[1];
$votos =$row[0] + 1;
$media = (($row[0] * $auxmedia) + $voto)/ $votos;
//actualizamos el voto
$result = mysql_query("UPDATE rank SET votos= $votos, media= $media WHERE id= $id",$link);
mysql_query("INSERT INTO rank(id,ip,dataCreate)VALUES($id,'".$realip."','".$fecha."')",$link);
echo "voto realizado";
}else{ //el usuario ya ha votado para este apartado
echo "Usted ya ha votado";
}
}
?>
votos(rank.js)
Código HTML:
function objetoAjax(){
var xmlhttp=false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(E){
xmlhttp = false;
}
}
if(!xmlhttp && typeof XMLHttpRequest!='undefined'){
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
function sendDatos(datos, resultado,borrar){
divResultado = document.getElementById(resultado);
if(divResultado.innerHTML=='' || borrar){
ajax = objetoAjax();
if(datos!=""){
divResultado.innerHTML = "<span style='color:#ff0000;'>Loading...</span>";
ajax.open("GET", datos);
ajax.onreadystatechange=function(){
if(ajax.readyState==4){
divResultado.innerHTML = ajax.responseText
}
}
ajax.send(null);
}else divResultado.innerHTML ="";
}
}
(index.php)
Código PHP:
<?php
include("rank/rank.php");
$link = conectar();
$result = mysql_query("SELECT id,votos,media FROM rank where id=1",$link);
$row = mysql_fetch_row($result);
if($row){
echo '<div class="rank">';
echo '<ul>';
echo '<li class="current-rating" style="width:'.($row[2] * 25).'px;">Currently '.$row[2].'/5 Stars.</li>';
echo '<li><a href="javascript:sendDatos(\'rank/rank.php?id='.$row[0].'&v=1\',\'page'.$row[0].'\',true)" title="dar 1 estrella de 5" class="star-1">1</a></li>';
echo '<li><a href="javascript:sendDatos(\'rank/rank.php?id='.$row[0].'&v=2\',\'page'.$row[0].'\',true)" title="dar 2 estrellas de 5" class="star-2">2</a></li>';
echo '<li><a href="javascript:sendDatos(\'rank/rank.php?id='.$row[0].'&v=3\',\'page'.$row[0].'\',true)" title="dar 3 estrellas de 5" class="star-3">3</a></li>';
echo '<li><a href="javascript:sendDatos(\'rank/rank.php?id='.$row[0].'&v=4\',\'page'.$row[0].'\',true)" title="dar 4 estrellas de 5" class="star-4">4</a></li>';
echo '<li><a href="javascript:sendDatos(\'rank/rank.php?id='.$row[0].'&v=5\',\'page'.$row[0].'\',true)" title="dar 5 estrellas de 5" class="star-5">5</a></li>';
echo '</ul>';
echo 'Rated <strong>'.$row[2].'</strong>/5 estrellas ('.$row[1].' votos)';
echo '<span id="page'.$row[0].'" style="color:#ff0000;"></span>';
echo '</div>';
}
?>
Descargar Mi pregunta es la siguiente
Ejemplo:
Tengo en mi web donde pasan por el catalogo hacen clic a la foto que le agrada y hacer el voto, "fotos.php" ejemplo:
misfotosweb.com/fotos.php?id=1
y cuando quiero hacer una votacion de la foto me dice que ya he votado /fotos.php?id=1
como hago para que cuando yo haga clic a la estrella recien pueda votar
Algo asi sale
aqui esta el ejemplo pero esta con rank.php
sistema de votos
pero yo estoy usando de esta forma:
misfotosweb.com/fotos.php?id=1