Valoración de artículos con restricción de 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.


























