Está usted en Indice > Construcción > Lenguajes > PHP > Lecciones y Paso a Paso > Valoraciones de los usuarios en PHP
Construcción
Maletín
Utilidades
Cursos
Promoción
Rentabilidad
Zona Novatos
Foros
Acceso a tu cuenta

Valoraciones de los usuarios en PHP

Valoraciones de los usuarios en PHP

Sistema de valoraciones, muy funcional y sin duda alguna de gran utilidad.

El proceso es similar o mejor dicho el mismo empleado para sacar cualquier promedio, por ejemplo (El promedio de notas de un estudiante).

PTOS ACUMULADOS / TOTAL DE ACUMULACIONES

Para ello utilizaremos una tabla de datos:

<? CREATE TABLE `valoraciones` (
`id_noticia` int(9) NOT NULL default '0',
`num_votos` int(20) NOT NULL default '0',
`ptos` int(20) NOT NULL default '0'
) TYPE=MyISAM;
?>

Cabe destacar que no es necesario utilizar una tabla de datos individual, siempre y cuando se cuente con una tabla general de artículos o contenidos y obviamente se dispongan al menos de los dos últimos campos de esta tabla, para el funcionamiento del script.

Este sistema trabaja con 1 solo registro por artículo o contenido, donde el campo id_noticia, se refiere al identificador de nuestra noticia o contenido, num_votos; el total de votos realizados entorno a ese contenido y ptos la suma de todos los votos:

Por ejemplo:

id_noticia= 00001 - nuestra primera noticia
num_votos= 3 - solo tres votos en esta noticia.
Ptos= 15 - es probable que los tres hayan votado por 5 puntos.

Entonces lógicamente la valoración media es de 5 ptos.

Código Fuente:

<?
#####CONEXIÓN A MYSQL
@mysql_connect('localhost','usuario','pass')or die ('Ha fallado la conexión: '.mysql_error());
@mysql_select_db('base_de_datos')or die ('Error al seleccionar la BD: '.mysql_error());
////end conexión
$SSQL_=mysql_query("SELECT * FROM valoraciones WHERE id_noticia='".$_GET[id]."'")or die(mysql_error());
$array_d=mysql_fetch_array($SSQL_);
$valoracioN_total=@round($array_d[ptos]/$array_d[num_votos],2);

if(isset($_POST[valor])){
if(mysql_num_rows($SSQL_)==0){
@mysql_query("INSERT INTO valoraciones VALUES('".$_GET[id]."','1','".$_POST[valor]."')")or die ('ERROR AL INSERTAR REGISTRO: '.mysql_error());
}else{
@mysql_query("UPDATE valoraciones SET num_votos=num_votos+1,ptos=ptos+".$_POST[valor]." WHERE id_noticia='".$_GET[id]."'")or die ('ERROR AL MODIFICAR REGISTRO: '.mysql_error());
}
header('Location:'.$REQUEST_URI);
exit;
}

echo '<strong>Valoración Media : '.$valoracioN_total.'</strong> <div style="background-color:#EFEFEF; width:50px"><img width="'.($valoracioN_total*5).'" height="6" style="background-color: #000099"></div> <br>Total de votos: '.$array_d[num_votos];

?><hr>
<form action="<? echo $REQUEST_URI;?>" method="post">
Nueva valoración:
<select name="valor" id="valor">
<? for ($i=1; $i<=10 ; $i++) echo '<option value="'.$i.'">'.$i.'</option>';?>
</select>
<input type="submit" value="Votar por este artículo">
</form>

Explicando:

Primero que nada, como de costumbre creamos la conexión al servidor de mysql; donde debemos aportar nuestros datos de acceso reales.

Seleccionamos la base de datos sobre la cual trabaremos.

Y generamos una petición al servidor Mysql mysql_query(); donde solicitamos los registros almacenados previamente por cada contenido o artículo.

Le asignamos a la variable $array_d, la matriz devuelta por mysql_fetch_array(), para luego agrupar en la variable $valoracioN_total; el valor devuelto por la división entre $array_d[ptos] y $array_d[num_votos], redondeamos el valor con 2 decimales round(), le colocamos el @ al comienzo de la función para evitar que se muestren posibles errores por si acaso la división es entre 0 (cero).

Finalmente iniciamos una condición para comprobar si ($_POST[valor]) esta definida, es decir si se esta procesando el formulario para insertar nuevas valoraciones. Si la condición evalúa TRUE entonces ejecutamos una serie de instrucciones, siendo la primera una nueva condición:

if(mysql_num_rows($SSQL_)==0):

Para comprobar si aún no hay ningún registro o valoración e insertar uno nuevo.
@mysql_query("INSERT INTO…

De lo contrario ( else) quiere decir en esta ocasión que ya ha votado al menos 1 persona y por ende no podemos hacer un nuevo registro, si no más bien una modificación del ya existente.

@mysql_query("UPDATE valoraciones…

Posteriormente sin importar cual de las dos rutinas halla seleccionado el script, realiza una redirección header(Location: … ) a .$REQUEST_URI, que es exactamente la misma URL , para que el usuario vea los datos actualizados. Es decir su voto agregado a la lista.

Finalmente imprimimos el resultado, con un grafico y agregamos el formulario que se utilizara para una próxima votación.

Ya quedaría de parte de ustedes modificarlo un poco (si desean) para que el usuario pueda votar solo 1 vez.

Autor: Emmanuel García De Caro
http://www.blasten.com/contenidos/19071



Usuarios que han visto este tema también han visto...

- Comprimir página PHP
- ¿De donde vienen las variables ? en PHP
- Frases aleatorias con PHP
- Obteniendo rutas en PHP
- Comprobar si un usuario es válido con Ajax y PHP


Versión imprimible - Versión imprimible de este documento
Enviar e-mail - Enviar por e-mail este documento
Publicidad






Cursos de Community Manager

Información legal | Política de Privacidad | Contacte con nosotros

Otro proyecto de Factoría de Internet. Copyright© 2003-2011 Factoría de Internet S.L.. Todos los derechos reservados.


Página generada el 26-05-2012 a las 09:35:06