8.Abr.2007
Publicado por MijT en PHP y MySQL | 1560 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.
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
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.
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:
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.
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.
Enlaces relacionados
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'];
Guía BBCode
Comentar este artículo
PRONTO EN CANALPERU
Si deseas saber más, entra a CanalPeru.NET
BÚSQUEDAS
GALERÍA
|
|
|
|
|
|
|
|
|
|
SÍGUEME EN TWITTER
Cuando un geek muere, su tumba -obviamente- se debe diferenciar de las otras http://www.rarurl.com/tumbageek xD
@TheGhost 2 semanas desconectado del mundo y me vuelvo a enfermar, creo que el internet me afecta, habrá "Kaspersky" en pastillas? xD
Por enésima vez... agripado!!!
Firefox 3... un desastre!! http://rarurl.com/jEYIwL
Nuestra bandera ya está en 1er lugar, a seguir votando!! http://www.rarurl.com/9UOzz
que rico estuvo el estofado!
@TheGhost amén
@TheGhost admiro tu fé en esa tira de inútiles xD
Nace RarURL, otra alternativa para comprimir URLs extensas http://www.rarurl.com/q0GQ
TwitterCounter, cuántos te siguen en Twitter http://www.rarurl.com/ZwU6Lh
CATEGORÍAS
- Actualidad (11)
- AJAX (0)
- CelulaWeb.NET (7)
- Cine y TV (40)
- CSS (2)
- Deportes (63)
- Descargas (16)
- Diseño (7)
- Eventos (7)
- Gadgets (74)
- Informática (105)
- Internet (173)
- Juegos y Consolas (19)
- Multimedia (2)
- Música (22)
- Off Topic (28)
- PHP y MySQL (6)
- Seguridad (37)
- Software Libre (19)
- XHTML (1)
BLOGROLL
ENCUESTAS
¿Quién crees que fue o es el "Rey del Rock" a nivel mundial?
VIDEO MÁS VISTO EN CANALPERÚ
- Título: Telekinesis
- Álbum: Soda Stereo
- Intérprete: Soda Stereo
- 2614 visitas | 0 comentarios
- 98 votos recibidos | 912 puntos























