Valoración de artículos con restricción de IP

Recomienda este artículo Versión imprimible
Publicado por MijT el 8/Abr/2007 en PHP y MySQL | 2338 Lecturas | 1 comentarios
Muchas veces cuando desarrollamos un script ya sea para publicar artículos para un blog, noticias, tutoriales, etc. lo que deseamos es que nuestros lectores califiquen cada uno de estas publicaciones según su punto de vista. Pues bien, en esta ocación voy a explicar como hacer un sencillo script que permita a nuestros lectores a validar nuestros artículos, aunque siempre se nos viene a la cabeza la pregunta: Sólo quiero que el usuario vote una sola vez a cada artículo, ¿Cómo hago esto?, muy fácil. El script que mostraré a continuación es una modificación de uno existente en la web Desarrolloweb.com y que como repito, he modificado para que nos permita votar una sola vez restringiendo nuestra IP.

Lo primero que haremos será entrar en nuestra base de datos y añadir dos campos a nuestra tabla de artículos:

num_votos del tipo INT(10) // cantidad modificable
ptos del tipo INT(10) // cantidad modificable

Lo siguiente será crear la tabla que almacenará la IP del votante y la ID del artículo a la que está votando.

CREATE TABLE `valoraciones` (
  `id_val` int(10) NOT NULL auto_increment,
  `id_news` int(9) NOT NULL default '0',
  `ipvoto` varchar(15) NOT NULL default '',
  PRIMARY KEY  (`id_val`)
)


A continuación pasaremos a crear los script que emitirán los votos y validarán que la IP desde donde se enviara el voto no exosta ya en la BD. El primer script será el que validará la IP

<?php
    
// a este archivo lo llamaremos valoraciones.php
    
include('datosconex.php'); // este archivo contiene los datos de conexión a la BD
    
$SSQL mysql_query("SELECT * FROM valoraciones WHERE id_news='$id_news'")or die(mysql_error());
    
$votadas mysql_fetch_array($SSQL);
    if(
$votadas['ipvoto'] != $_SERVER['REMOTE_ADDR']) {
?>    
        <form action="votar.php" method="post">
            <input type="hidden" name="id_news" value="<?=$id_news?>" />
            <strong>Nueva valoración:</strong><br />
            <select name="valor" id="valor" style="width: 50px;">
                <?  for ($i=1$i<=10 $i++) echo '<option value="'.$i.'">'.$i.'</option>';?>
            </select>
            <input type="submit" name="enviar" value="Enviar votación" style="background: #2d2d2d; color: #fff;" />
        </form><br />
<?php
    
}else {
?>
        <div style="border: 1px solid #FF0000; padding: 7px; color: #FF0000; background: #F9B8B3;">Tu voto en esta noticia ya se ha contabilizado.</div>
<?php
    
}
?>


Ahora pasamos a crear el script que será el que guarde los votos en la tabla valoraciones y a su vez actualise en la tabla noticias el número de votos y puntos obtenidos.

<?php
    
// a este archivo lo llamamos votar.php
    
if(isset($_POST['enviar'])){
        include(
'datosconex.php');
        
mysql_query("INSERT INTO valoraciones (id_news,ipvoto) VALUES('".$_POST[id_news]."','$REMOTE_ADDR')");
        
$resp mysql_query("SELECT * FROM noticias WHERE id_news='$id_news'");
        
$datos mysql_fetch_array($resp);
        
$suma $datos["num_votos"]+1;
        
mysql_query("UPDATE noticias SET num_votos='$suma',ptos=ptos+".$_POST[valor]." WHERE id_news='$id_news'");
        
$redirigir $_SERVER['HTTP_REFERER'];
        
header("Location: $redirigir");
    }else {
?>
    <center><div style="border: 1px solid #FF0000; width: 450px; padding: 7px; color: #FF0000; background: #F9B8B3; font:Verdana, Arial, Helvetica, sans-serif; font-size: 9pt;">Estás realizando una operación incorrecta.<br /><a href="javascript:history.back()"><strong>Regresar</strong></a></div></center>
<?php
    
}
?>


Luego incluimos el script valoraciones.php dentro de nuestro archivo que muestra la noticia usando la función include() y mostramos los datos de puntuación y número de votos que va recibiendo la noticia conforme se vayan emitiendo las votaciones de la siguiente manera:

<?php
    
// por aquí hacemos la consulta a la tabla de noticias
    
$total_val = @round($datos[ptos]/$datos[num_votos],2); // obtenemos la valoración total y hacemos uso de la función round() para tomar sólo dos decimales
    
$porcentaje $total_val 10;
    
// mostramos los votos totales, los puntos obtenidos y dibujamos una pequeña gráfica que irá señalando la puntuación recibida teniendo como base 10 ptos.
    
<div style="background-color:#EFEFEF; width: 100px; text-align: left; float: left; margin-right: 5px; border: 1px solid #000; padding: 1px;">
        <
div style="width: <?=$porcentaje?>px; height: 7px; background: #000099;"></div>
    </
div>
?>


Explicando a grandes rasgos ambos scripts lo que hemos hecho en el primer script(valoraciones.php) es hacer una consulta a la tabla valoraciones para saber si la IP del usuario que va a votar en dicha noticia ya está registrada de lo contrario no le permitirá hacer el voto, si no fuera ese el caso le mostrará un pequeño formulario con los valores que desea darle a dicho artículo.

El segundo script(votar.php) recoge los datos del formulario y los guarda en la tabla valoraciones y a su vez actualiza los campos num_votos y ptos de la tabla noticias.

Este script es modificable, así como lo modifiqué para que restrinja los votos por IP, se le pueden hacer otras mejoras, esto puede servir como base para aquellos que requieran de un sistema de votaciones para sus artículos, noticias, etc.
Etiquetas:
Compártelo:
Enviar a Del.icio.us Enviar a Technorati Enviar a Barrapunto Floréalo Enviar a Menéame Enviar a Facebook Enviar a Google Bookmarks Enviar a Yahoo! Enviar a Bitacoras Enviar a Webéame Enviar a Digg Enviar a Fresqui Enviar a Furl Enviar a NeoDiario Enviar a Wikio

Artículos Relacionados

No hay post relacionados
1 Comentarios a: Valoración de artículos con restricción de IP
JaviK comentó:
El 31 de Ago. del 2007 a las 19:34
Simplemente, darte las gracias, comentar que me ha sido de mucha ayuda y que yo he hecho una pequeña modificación para que actualice la puntuación directamente en la tabla, para que no se vayan sumando los puntos infinitamente, por optimizar:

$suma = $datos["num_votos"]+1;
$nota = (($datos[Nota] + $valor)/2);
$notar = round($nota,2);
$query="UPDATE acorde SET NumVotos=".$suma.",Nota=".$notar." WHERE IDAcorde=".$id_acorde;
mysql_query($query);
echo($query);
$redirigir = $_SERVER['HTTP_REFERER'];

Comenta este artículo

Nos encantaría que dejaras tu comentario acerca de esta entrada, pero para ello debes tener en cuenta lo siguiente:

  • No escribas todo el texto en mayúsculas.
  • Procura que tus comentarios estén relacionados con lo que se ha publicado en esta entrada.
  • Respeta a los demás lectores de este blog. Si hay algún comentario que no es de tu agrado, expón tus ideas de forma alturada.
  • No utilices groserías en tus comentarios.

Los comentarios que incumplan los puntos mencionados serán eliminados inmediatamente.

Para escribir tu comentario dispones de un editor de texto para agregar negrita, cursiva, subrayado, links, etc. Si no sabes cómo usarlo, entra aquí