8.Abr.2007
Recomienda este artículo Versión imprimible

Publicado por MijT en PHP y MySQL | 1560 Lecturas | 1 comentarios

(6.95 ptos. de 20 votos.)

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.

Enlaces relacionados

Avatar de JaviK 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'];

Guía BBCode

Comentar este artículo


COMPÁRTELO

Enviar a Del.icio.us Enviar a Technorati Enviar a Barrapunto Floréalo Menéalo Enviar a Webéame Enviar a Digg Enviar a Fresqui Enviar a Blogmemes Enviar a Furl Enviar a NeoDiario Enviar a LinkRoll

VALORARARTÍCULO

VEATAMBIÉN






PRONTO EN CANALPERU

Si deseas saber más, entra a CanalPeru.NET

Suscríbete y recibe nuestras noticias en tu Email:

Delivered by FeedBurner

Feedburner

BÚSQUEDAS

GALERÍA

Censurado en la China... What!! DJ Tiesto Gustavo Cerati. El Último concierto. Soda Stereo.
Soda Stereo "Me verás volver" Aguante Soda!! Mi compu y otros cachibaches xD Evanescence en París 2004

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

Agrégame en Twitter

CATEGORÍAS


ENCUESTAS

¿Quién crees que fue o es el "Rey del Rock" a nivel mundial?
Elvis Presley
Freddy Mercury(Queen)
Mick Jagger(Rolling Stones)
Steven Tyler(Aerosmith)
Bono(U2)
Jon Bon Jovi(Bon Jovi)
Jimi Hendrix
Ozzy Osborne
Eric Clapton
David Bowie
Jimmy Page(Led Zeppelin)

VIDEO MÁS VISTO EN CANALPERÚ


PUBLICIDAD


DIRECTORIO

VISITAS

Estadísticas de visitas

USUARIOSONLINE

Registrados: 0
Invitados: 10
Total: 10

ENLACES

Monetize your web site

SINDICACIÓN

  • Sindicación RSS
  • Suscribir con Bloglines
  • Agregar a Mi Yahoo!
  • Agregar a Google
  • Agregar a Live.com
  • Agregar a Netvibes
  • Agregar a My AOL
  • Agregar a tus favoritos de Technorati


Últimos comentarios

  • MijT: [cita]A pesar de la rica publidad me ked
  • lois : A pesar de la rica publidad me kedo con
  • luisraygoza: por favor!!! Se los ruego diganme con qu
  • JAY: hola, ojala puedan ayudarme por favor..
  • tribilin: Muy bonita la chica lastima que le guste
  • CARITO: soy orgullosa de ser peruana hasta la mu
  • juan: Karen eres de la puta yo quiera tenerte
  • Arielie : shakitra es la mejor, nadie la puede igu
  • cristian palom: hola karen eres la mujer mas que m
  • Maria Antonieta: LA HERMOSA BANDERA PERUANA REPRESENTA AL


Top
© 2007 CélulaWeb.NET | Desarrollado por César Aquino(MijT) | Agradecimiento a PHP-Hispano.NET