Crear un sistema de encusestas con php y MySql

Para el presente manual doy por entendido q la persona tiene un conocimineto basico de php y mysql, en caso contrario tambien puede llevarse a cavo pues paso a paso se ira explicando cada accion.

lo primero es hacer las tablas de la base de datos, necesarias para manejar nuestra encuesta. Para esto, crearemos dos tablas, que explicaré a continuación.

CREATE TABLE encuestas
(id INT not null AUTO_INCREMENT,
titulo VARCHAR (50) not null ,
fecha INT (10) not null ,
PRIMARY KEY (id));

La primera celda id, viene de identificador, y es numerico, se autoincrementa (1, luego si agregamos otra encuesta, será la numero 2) Titulo, será el nombre que llevara la encuesta en activo o que solicitemos a la SQL y Fecha, para saber la fecha, en que fué insertada.

CREATE TABLE respuestas
(id INT not null AUTO_INCREMENT,
texto VARCHAR (50) not null ,
votos INT (5) not null ,
idenc INT not null,
PRIMARY KEY (id));

Bueno, está es donde se estarán depositadas todas las respuestas…

id, hace la misma funcion, de la tabla de arriba. Texto, es el texto o donde irá la pregunta. votos, la cantidad de votos que tiene dicha respuesta e idenc, q es para enlazar la respuesta al id de la encuesta.

Bueno, listo todo esto, empezamos a la creacion de nuestra encuesta

1. Crearemos un formulario para el admin, donde nos preguntara, el nombre de la pregunta y la Cantidad de respuestas, al cual llamaremos enc1.php

enc1.php

<form name=”form1″ method=”post” action=”enc2.php”>
<p>Titulo de la encuesta:
<input type=”text” name=”titulo”>
</p>
<p>Número de respuestas:
<input type=”text” name=”respuestas”>
</p>
<p>
<input type=”submit” name=”Submit” value=”Enviar”>
</p>
</form>

Luego, que le demos a aceptar, en el formulario enc1.php, nos dirigira a esta página un segundo formulario llamado enc2.php , con la posibilidad de escribir la cantidad de respuestas que hemos puesto en enc1.php.

enc2.php

<form action=”enc3.php” method=”post”>
<table border=”0″>
<?php
for($i=1;$i<=$respuestas;$i++){
?>
<tr>
<td>respuesta <?php echo $i; ?></td>
<td><input name=”p<?php echo $i;?>” type=”text” size=”50″ maxlength=”50″></td>
</tr>
<?php } ?>
</table>
<input type=”submit” name=”Submit” value=”Enviar”></p>
<input name=”titulo” type=”hidden” value=”<?php echo $titulo;?>”>
<input type=”hidden” name=”respuestas” value=”<?php echo $respuestas;?>”>
</form>

Luego seguimos con el archivo encargado de insertar los datos a la base de datos…a que no adivinan como se llama, pue si enc3.php

enc3.php

<?php

//Conectamos con la base de datos
include(“conectbd.php”);
$enlace = mysql_connect($host, $usuario, $password);
mysql_select_db($db,$enlace);

//Obtenemos la fecha del sistema
$fecha = time();

//Insertamos la nueva encuesta
$sql = “INSERT INTO encuestas (titulo, fecha) VALUES (‘$titulo’, ‘$fecha’) “;
$sql = mysql_query($sql);

//Ahora obtenemos el ID de la encuesta que acabamos de insertar
$sql = “SELECT id FROM encuestas ORDER BY fecha DESC LIMIT 0,1”;
$sql = mysql_query($sql);
while($row = mysql_fetch_array($sql)){
$id=$row[“id”];
}

//Recorremos todas las preguntas
for($i=1; $i<=$respuestas; $i++){

//Obtenemos el texto de la pregunta
$preg = p.$i;
$texto = $$preg;

//Y lo insertamos
$sql = “INSERT INTO respuestas(texto, votos, idenc) VALUES(“$texto”, 0, $id)”;
$sql = mysql_query($sql);
}
?>
<div align=”center”><strong>Felicidades!! Si todo ha ido bien, tu encuesta ha
sido insertada!! </strong> </div>

Hacemos un archivo que se encargara de conectarnos a la BDD cada vez que necesitemos, lo llamaremos contra todo pronostico, conectadb.php

conectadb.php

<?php
$host = “miHost”;
$usuario = “miUsuario”;
$password = “miContraseña”;
$db = “miBaseDeDatos”;
?>

Bien, ahora, damos el formulario para realizar los votos
Código:

<?php
//Conectamos con la base de datos
require(‘contactabd.php’);
$enlace = mysql_connect($host,$usuario,$password);
mysql_select_db($db,$enlace);

//Seleccionamos la informacion de la última encuesta insertada
$consulta = “SELECT * FROM encuestas ORDER BY fecha DESC LIMIT 0,1”;
$consulta = mysql_query($consulta,$enlace);
while($row = mysql_fetch_array($consulta)){
$titulo=$row[“titulo”];
$fecha=$row[“fecha”];
$id=$row[‘id’];
}
?>
<body>
<form name=”form1″ method=”post” action=”votar.php”>
<table width=”350″ border=”1″>
<tr>
<td colspan=”2″><strong>Titulo</strong>: <?php echo $titulo; ?>
<input type=”hidden” name=”id” value=”<?php echo $id;?>”></td>
</tr>
<?php
$sql = “SELECT texto, id FROM respuestas WHERE idenc=”$id””;
$sql = mysql_query($sql,$enlace);
while($row = mysql_fetch_array($sql)){
$texto=$row[“texto”];
$idres=$row[“id”];
?>
<tr>
<td width=”51″><input type=”radio” name=”opcion” value=”<?php echo $idres; ?>”></td>
<td width=”283″><?php echo $texto; ?></td>
</tr>
<?php } ?>
<tr>
<td><input type=”submit” name=”Submit” value=”Enviar”></td>

<td>Esta encuesta está desde el <?php echo date(‘d-m-y’,$fecha); ?></td>
</tr>
<tr>
<td colspan=”2″><a href=”votar.php”>Ver resultados</a></td>
</tr>
</table>
</form>
</body>

Luego seguimos, con el archivo que se encargara de introducir los votos a la base de datos, llamaremos al archivo votar.php

votar.php

<?php
require(‘configuracion.inc.php’);
$enlace = mysql_connect($host, $usuario, $password);
mysql_select_db($db,$enlace);

//Obtenemos el titulo de la encuesta
$consulta = “SELECT titulo FROM encuestas ORDER BY fecha DESC LIMIT 1,0”;
$consulta = mysql_query($consulta,$enlace);
$lado=mysql_num_rows($consulta);
while($row = mysql_fetch_array($consulta)){
$titulo= $row[‘titulo’];
}

//Obtenemos el numero actual de votos para la opción elegida
//Comprobamos si $opcion no está vacío porque posteriormente este mismo
//fichero lo utilizaremos para ver resultados sin tener que votar necesariamente
if(!empty($opcion)) {
$consulta = “SELECT votos FROM respuestas WHERE id=$opcion”;
$consulta = mysql_query($consulta,$enlace);
$lado=mysql_num_rows($consulta);
while($row = mysql_fetch_array($consulta)){
$votos= $row[‘votos’];
}

//Incrementamos en uno los votos totales
$votos = $votos + 1;
//Y actualizamos la base de datos
$consulta = “UPDATE respuestas SET votos = $votos WHERE id=$opcion”;
mysql_query($consulta,$enlace);
}
?>

Bien, ahora procederemos, a crear el archivo o manera, de mostrar como va la encuesta osea, el estado de votos…

Como el el método, es creando gráfico, necesitaremos tener la LIBRERIA GD activa, para la autocreacion de la imagen.

Este codigo puede parecer complejisimo, pero solo obtiene datos de la bd, y los dibuja en el grafico….el archivo se llamara, dgrafica.php

dgrafica.php

<?php
include(“conectadb.php”);
$enlace = mysql_connect(‘tuHost’,’tuUsuario’,’tuPassword’);
mysql_select_db(‘tuBaseDeDatos’);

//Obtenemos el titulo de la última encuesta para colocarlo como título en nuestro gráfico
$consulta = “SELECT titulo, id FROM encuestas ORDER BY fecha DESC LIMIT 0,1”;
$consulta = mysql_query($consulta,$enlace);
$lado=mysql_num_rows($consulta);
while($row = mysql_fetch_array($consulta)){
$titulo= $row[‘titulo’];
$id=$row[‘id’];
}

//Obtenemos el numero de votos de cada opcion y los metemos en “votos[]”
$consulta = “SELECT votos, texto FROM respuestas WHERE idenc=$id”;
$consulta = mysql_query($consulta,$enlace);
$lado=mysql_num_rows($consulta);
while($row = mysql_fetch_array($consulta)){
//Guardamos el texto en la variable temp. Este texto nos servirá como
//índice en el array votos[]
$temp = $row[‘texto’];
$votos[$temp]= $row[‘votos’];
}

//Variables del gráfico
$width = 500; //Ancho de la imagen
$espacioCol = 30; //Espacio que habrá del principio de una columna a otra
$altoCol = 15; //El alto de las columnas
$height = 2*count($votos)*$espacioCol+45; //El alto de la imagen
$maxvoto = max($votos); //Valor de la opcion mas votada
$maxlargo = $width-50; //Largo que tendrá la opción mas votada
$coeficiente = (int)($maxlargo / $maxvoto); //Coeficiente para calcular el largo de cada opcion

//Creamos la imagen con el alto y ancho asignados anteriormente
$image = imagecreate($width,$height);

//Declaramos variables para los colores. Al ser el gris el primer color que
//declaramos, éste se quedará como color de fondo en la imagen
$gray = imagecolorallocate($image, 0xC0, 0xC0, 0xC0);
$black = imagecolorallocate($image, 0x00, 0x00, 0x00);
$blue = imagecolorallocate($image, 0x00, 0x00, 0xFF);

//Recorremos el array ‘votos’
for($i=0; list($texto, $vot) = each($votos); $i++) {

$labelfont = 2; //Fuente empleada para etiquetas
//Dibujamos las barras
//Coordenadas para definir el rectángulo
$valign = ($i+1)*$espacioCol + 15;
$halign = 30;
$valign2 = $valign + $altoCol;
$halign2 = $halign+$vot*$coeficiente;
imagefilledrectangle($image,$halign,$valign,$halign2,$valign2,$blue);

//Ponemos el índice de cada barra
//Coordenadas para colocar los indices
$indice = $i + 1;
$halign = 15;
imagestring($image, $labelfont, $halign, $valign, $indice, $black);

//Leyenda: Numero de opcion + Texto + ( votos )
//Coordenadas para colocar la leyenda
$valign = ($i+1)*$espacioCol + (count($votos)*$espacioCol)+ 15;
$halign = 30;
$leyenda = “Opcion “.$indice.”: “.$texto.” ($vot)”;
imagestring($image, $labelfont, $halign, $valign, $leyenda, $black);
}

//Asignamos tipografía y colocamos el título en la parte superior izquierda
$titlefont = 3;
imagestring($image, $titlefont, 10, 10, $titulo, $black);

//Dibujamos el recuadro que encierra el contenido
imagerectangle($image, $width – 5, 30, 5, $height – 5, $black);

//Devolvemos la imagen
header(“(anti-spam-content-type:) image/png”);
imagepng($image);
imagedestroy($image);
?>

Para visualizar los resultados de la Encuesta, simplemente debes de poner el siguiente codigo en la parte que quieras que se vean las imagenes:

<img src=”dgrafica.php”>

Ejemplos tomados de programacion.com, con el fin de explicar el funcionamiento basico de un sistema de encuestas, y dar las bases para q cada uno cree su propio sistema.

Anuncios

3 comments so far

  1. juper on

    hola bueno tiene errores los enc los corregi pero la grafica no hace nada…. ni asi como segun se debe poner en el img ya lo notaron? si lo resuelven me daria gusto q respondieran gracias

  2. hugo on

    oye no le entiendo muy bien a cuando hace el arreglo de p algien me puede auxiliar

  3. chat on

    muy bueno pero medio p1j4


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: