| Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales | RSS | ||||
23/5/05 -
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ía, licencia y acciones sobre este artículo | ||||||
|
Informe de Emmanuel García De Caro*
Webmaster de Blasten.com URL: http://www.blasten.com Atención: Copyright. Este artículo no se puede reproducir sin la autorización expresa del autor. * Para consultas técnicas utilizar la lista de correo.
|
| Comentarios sin revisar |
| Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente. |
| Ver los comentarios no revisados |
| Añadir un comentario del artículo |
| Enlaces: |
| Maestrosdelweb |
Lectura recomendada + PHP 5 Compra este libro en Agapea, la librería urgente a domicilio. |
||||||||
Tienda DesarrolloWeb