Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/03/2010, 14:53
pilucho
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 655
Antigüedad: 19 años, 5 meses
Puntos: 6
Ranking en PHP+SQL

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