Básico. Cómo hacer una encuesta en PHP

Desarrollo web, Programación 6 Comments

Ya tiene algo de tiempo desde que empecé a programar en PHP, desde luego, nada serio. Actualmente estoy tomando un curso de PHP en la universidad (no forma parte de alguna materia xD), ya más serio, lleva algo de CSS, MySQL, POO. Así que bueno, ahora estaré escribiendo en una nueva categoría, Desarrollo Web.

Ya que este viernes pasado no asistimos, nos dejaron algunos ejercicios para hacer, de los cuales uno es hacer una pequeña encuesta. Veamos, a simple vista necesitamos:

  • La pregunta.
  • Las opciones.
  • Algunas estadísticas.
  • Manejo de Base da Datos.

Para empezar, hacemos el formulario con la pregunta y las opciones:


¿América ganará su próximo partido? 
Si No Número de votantes: Si: No:

La página se llamará así misma al momento de hacer el voto, entonces, procesará la información a la base de datos para almacenar los valores. Además, si observan, hay que mostrar el número de votantes y el porcentaje de votos para las dos diferentes opciones (si y no).

La base de datos se llamará encuesta1 y es la siguiente (Ojo, por prisa lo hice de la forma menos apropiada xD):

-- phpMyAdmin SQL Dump
-- version 2.8.2.4
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generación: 25-04-2008 a las 18:43:50
-- Versión del servidor: 5.0.24
-- Versión de PHP: 5.1.6
--
-- Base de datos: `ENCUESTA1`
-- 

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `opciones`
-- 

CREATE TABLE `opciones` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `nombre` char(30) NOT NULL,
  `valor` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Volcar la base de datos para la tabla `opciones`
-- 

INSERT INTO `opciones` (`id`, `nombre`, `valor`) VALUES (1, 'Si', 0),
(2, 'No', 0);

Como ven, registramos las dos opciones de la encuesta: Si y No, estableciendo las dos con un valor inicial de cero (ya que nadie ha votado todavía). Una vez teniendo la base de datos tenemos que hacer varias cosas (empezar a armar el funcionamiento de la página web):

1) Conexión con la base de datos:

< ?php
	$link=mysql_connect     ("localhost","admin","*****") or die ("Error en la conexion");
	//se selecciona la base
	mysql_select_db("ENCUESTA1",$link);
?>

2) Registrar el voto del usuario:

< ?php
if($_POST['opc']=='si'){
	$valor[0]++;
	$sql="update opciones set valor=$valor[0] where id='1';";
	mysql_query($sql) or die('Lo sentimos, hay un error en la BD');
	}
elseif($_POST['opc']=='no'){
	$valor[1]++;
	$sql="update opciones set valor=$valor[1] where id='2';";
	mysql_query($sql) or die('Lo sentimos, hay un error en la BD');
	}
?>

$valor[], es un array que contiene las veces que el usuario a votado por dicha opción. $valor[0] para la opción Si, $valor[1] para la opción No. Estos valores junto con el total de votos los sacamos en la siguiente parte:

< ?php
$sql="select * from opciones";
$res=mysql_query($sql);
$total=0;
$indice=0;
while($fila=mysql_fetch_object($res)){
    $total += $fila->valor;
    $valor[$indice]=$fila->valor;
    $indice++;
}
?>

Para obtener el porcentaje de votos de cada opción respecto al total de los mismo, necesitamos, una pequeña operación aritmética (la clásica regla de 3):

< ?php
	$porcentaje[0]=intval(($valor[0]*100)/$total);
	$porcentaje[1]=intval(($valor[1]*100)/$total);
?>

Nota: la función intval() regresa el valor entero de una variable.

3) Lo único que hace falta es agregar las estadísticas (mostrar a los usuarios como va la votación), eso lo he puesto abajo de la encuesta (mirar el código html al principio). Entonces, falta sólo agregar el código PHP que haga lo descrito anteriormente.


 Número de votantes: < ?php echo " ".$total; ?>  


		Si:
		< ?php
			for ( $i = intval($porcentaje[0]/10); $i>0; $i-=2){ ?>
				porcentaje
		< ?php } ?>
		Porcentaje: < ?php echo " " . $porcentaje[0] . " % con " . $valor[0] . " votos"; ?>
	


		No:
		< ?php
			for ( $i = intval($porcentaje[1]/10); $i>0; $i-=2){ ?>
				porcentaje
		< ?php } ?>
		Porcentaje: < ?php echo " " . $porcentaje[1] . " % con " . $valor[1] . " votos"; ?>
	

Si se dan cuenta, debes tener la imagen palomita.gif en el directorio images (me quebré mucho la cabeza buscando-la, que tardé ~1/2 min. en obtenerla de google). Ésta imagen sirve como un pequeño histograma del porcentaje que ocupa la opción en comparación con el total de votos emitidos (que ya calculamos antes).

Una forma de hacer el histograma es de una escala de 20%, osea, quedaría:

1 Palomita: 20%
2 Palomitas: 40%
3 Palomitas: 60%
4 Palomitas: 80%
5 Palomitas: 100%

Por ejemplo, si el porcentaje de la opción Si es 40.5%, divididos sobre 10, es igual a 4 (el resultado lo deja sin decimales por la función intval()). El for toma este 4 y en cada ciclo le resta 2 y coloca una palomita; hasta que este 4 sea menor que cero. En el ejemplo del 40%, realizará 2 ciclos y por lo tanto, dibujará la palomita dos veces :P .

La página final queda de esta manera:

Código:

< ?php
	$link=mysql_connect     ("localhost","admin","******") or die ("Error en la conexion");
	//se selecciona la base
	mysql_select_db("ENCUESTA1",$link);

	//consulta
	$sql="select * from opciones";
	$res=mysql_query($sql);
	$total=0;
	$indice=0;
	while($fila=mysql_fetch_object($res)){
	    $total += $fila->valor;
	    $valor[$indice]=$fila->valor;
	    $indice++;
	}

	$porcentaje[0]=intval(($valor[0]*100)/$total);
	$porcentaje[1]=intval(($valor[1]*100)/$total);

	if($_POST['opc']=='si'){
	$valor[0]++;
	$sql="update opciones set valor=$valor[0] where id='1';";
	mysql_query($sql) or die('Lo sentimos, hay un error en la BD');
	}
	elseif($_POST['opc']=='no'){
	$valor[1]++;
	$sql="update opciones set valor=$valor[1] where id='2';";
	mysql_query($sql) or die('Lo sentimos, hay un error en la BD');
	}

	/*
	elseif(!$_POST['opc']){
	echo "

No se ha seleccionado nada!.

";
	}*/
?>

¿América ganará su próximo partido? 
Si No Número de votantes: < ?php echo " ".$total; ?> Si: < ?php for ( $i = intval($porcentaje[0]/10); $i>0; $i-=2){ ?> porcentaje < ?php } ?> Porcentaje: < ?php echo " " . $porcentaje[0] . " % con " . $valor[0] . " votos"; ?> No: < ?php for ( $i = intval($porcentaje[1]/10); $i>0; $i-=2){ ?> porcentaje < ?php } ?> Porcentaje: < ?php echo " " . $porcentaje[1] . " % con " . $valor[1] . " votos"; ?>
< ?php mysql_close($link); ?>

Obviamente se puede mejor bastante, agregando CSS, Ajax y cualquier cosa que se nos ocurra (hasta llegar a crear un sistema que cree encuestas).

Califica el tema:
1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5 out of 5)
Loading ... Loading ...

Next Entries »