06-11-2014, 11:07 AM
0
Ahora, pasaremos a crear un archivo llamado: index.php
Lo primero sera incluir al fichero de conexión, luego haremos una consulta a la base datos para que nos muestren los títulos de la tabla ‘encuestas’ los mismos que mostraremos como enlaces hacia las encuestas, estos enlaces llevaran el id de la encuestas en cuestión mediante GET (encuestas.php?id=x).
Adentro del archivo index.php pondremos esto:
Y nos quedaría algo así:
Vale, ahora pasaremos a crear el archivo encuesta.php
Linea 04: Si no existe la variable de URL se regresara a la pagina principal.
Linea 11: Si le dan a votar (el form de votación ira abajo) y si han seleccionado una opción se va a actualizar los datos del campo ‘valor’ de la tabla ‘opciones’:
En el archivo creado pondrán lo siguiente:
Si todo salio bien, nos quedará algo así
Ahora crearemos un archivo para mostrar los resultados. resultado.php
Esta archivo es mas simple, aqui mostraremos los resultados de las encuestas de acuerdo al id obtenido por GET (resultado.php?id=x):
Linea 11: Para obtener el valor usamos SUM() para que nos resulte la suma total del valor en un solo numero:
Luego mostramos los resultados con el mismo query con INNER JOIN que ya hemos usado anteriormente, esto nos mostrara cada opción en forma de div (.barra) al que le definimos el ancho en porcentaje usando una operación matemática
[b]Y si van bien, tendrán algo como esto:
[/b]
Ahora vamos a crear un archivo para poder agregar encuestas sin tener que entrar a la base de datos.
Creamos un archivo llamado agregar.php
En este fichero es probablemente el mas complejo de todos, manejaremos el proceso PHP arriba y el formulario abajo, por ello para entender esta parte es necesario ver el código completo (leer comentarios):
Y nos debería de quedar algo así:
Y listo, tendrán su sistema de encuestas.
Fuente | Demo | Descarga
Lo primero sera incluir al fichero de conexión, luego haremos una consulta a la base datos para que nos muestren los títulos de la tabla ‘encuestas’ los mismos que mostraremos como enlaces hacia las encuestas, estos enlaces llevaran el id de la encuestas en cuestión mediante GET (encuestas.php?id=x).
Adentro del archivo index.php pondremos esto:
Código PHP:
<?php
require('conexion.php');
$sql = "SELECT * FROM encuestas ORDER BY id DESC";
$req = mysql_query($sql);
?>
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>Sistema de encuestas</title>
<link rel="stylesheet" href="estilos.css">
</head>
<body>
<div class="wrap">
<h1>Encuestas</h1>
<ul class="votacion index">
<?php
while($result = mysql_fetch_object($req)){
echo '<li><a href="encuesta.php?id='.$result->id.'">'.$result->titulo.'</a></li>';
}
?>
</ul>
<a href="agregar.php">+ Agregar nueva encuesta</a>
</div>
</body>
</html>
Vale, ahora pasaremos a crear el archivo encuesta.php
Linea 04: Si no existe la variable de URL se regresara a la pagina principal.
Linea 11: Si le dan a votar (el form de votación ira abajo) y si han seleccionado una opción se va a actualizar los datos del campo ‘valor’ de la tabla ‘opciones’:
En el archivo creado pondrán lo siguiente:
Código PHP:
<?php
require('conexion.php');
$id = $_GET['id'];
if(!isset($_GET['id'])){
header('location: index.php');
}
if(isset($_POST['votar']))
{
if(isset($_POST['valor'])){
$opciones = $_POST['valor'];
$mod = mysql_query("SELECT * FROM opciones WHERE id = ".$opciones);
while($result = mysql_fetch_object($mod)){
$valor = $result->valor + 1; // obtenemos el valor de 'valor' y le añadimos 1 unidad
mysql_query("UPDATE opciones SET valor = '".$valor."' WHERE id = ".$opciones); // luego ejecutamos el query SQL
}
header('location: resultado.php?id='.$id); // Por ultimo lo redireccionamos a la encuestas mostrando los resultados.
}
}
?>
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>Sistema de encuestas</title>
<link rel="stylesheet" href="estilos.css">
</head>
<body>
<div class="wrap">
<form action="" method="post">
<?php
$aux = 0;
$sql = "SELECT a.titulo as titulo, a.fecha as fecha, b.id as id, b.nombre as nombre, b.valor as valor FROM encuestas a INNER JOIN opciones b ON a.id = b.id_encuesta WHERE a.id = ".$id;
$req = mysql_query($sql);
while($result = mysql_fetch_object($req)){
if($aux == 0){
echo '<h1>'.$result->titulo.'</h1>';
echo '<ul>';
$aux = 1;
}
echo '<li><input name="valor" type="radio" value="'.$result->id.'"><span>'.$result->nombre.'</span></li>';
}
echo '</ul>';
if(!isset($_POST['valor'])){
echo "<div class='error'>Selecciona una opcion.</div>";
}
echo '<input name="votar" type="submit" value="Votar">';
echo '<a href="resultado.php?id='.$id.'" class="resultado">Ver Resultados</a>';
echo '<a href="index.php" class="volver">← Volver</a>';
?>
</form>
</div>
</body>
</html>
Ahora crearemos un archivo para mostrar los resultados. resultado.php
Esta archivo es mas simple, aqui mostraremos los resultados de las encuestas de acuerdo al id obtenido por GET (resultado.php?id=x):
Linea 11: Para obtener el valor usamos SUM() para que nos resulte la suma total del valor en un solo numero:
Código PHP:
<?php
require('conexion.php');
if(!isset($_GET['id'])){
header('location: index.php');
}
$suma = 0;
$id = $_GET['id'];
$mod = @mysql_query("SELECT SUM(valor) as valor FROM opciones WHERE id_encuesta = ".$id);
while($result = @mysql_fetch_object($mod)){
$suma = $result->valor;
}
?>
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>Sistema de Encuestas</title>
<link rel="stylesheet" href="estilos.css">
</head>
<body>
<div class="wrap">
<form action="" method="post">
<?php
$aux = 0;
$sql = "SELECT a.titulo as titulo, a.fecha as fecha, b.id as id, b.nombre as nombre, b.valor as valor FROM encuestas a INNER JOIN opciones b ON a.id = b.id_encuesta WHERE a.id = ".$id;
$req = @mysql_query($sql);
while($result = @mysql_fetch_object($req)){
if($aux == 0){
echo "<h1>".$result->titulo."</h1>";
echo "<ul class='votacion'>";
$aux = 1;
}
echo '<li><div class="fl">'.$result->nombre.'</div><div class="fr">Votos: '.$result->valor.'</div>';
if($suma == 0){
echo '<div class="barra cero" style="width:0%;"></div></li>';
}else{
echo '<div class="barra" style="width:'.($result->valor*100/$suma).'%;">'.round($result->valor*100/$suma).'%</div></li>';
}
}
echo '</ul>';
if(isset($aux)){
echo '<span class="fr">Total: '.$suma.'</span>';
echo '<a href="encuesta.php?id='.$id.'"" class="volver">← Volver</a>';
}
?>
</ul>
</form>
</div>
</body>
</html>
Luego mostramos los resultados con el mismo query con INNER JOIN que ya hemos usado anteriormente, esto nos mostrara cada opción en forma de div (.barra) al que le definimos el ancho en porcentaje usando una operación matemática
[b]Y si van bien, tendrán algo como esto:
[/b]
Ahora vamos a crear un archivo para poder agregar encuestas sin tener que entrar a la base de datos.
Creamos un archivo llamado agregar.php
En este fichero es probablemente el mas complejo de todos, manejaremos el proceso PHP arriba y el formulario abajo, por ello para entender esta parte es necesario ver el código completo (leer comentarios):
Código PHP:
<?php require('conexion.php');
$cont = 0;
$titulo = ''; if(isset($_POST['titulo'])){ $titulo = trim($_POST['titulo']); } // definimos $titulo para evitar errores, y guardamos su valor por el ingresado.
if(isset($_POST['enviar'])){
if($titulo != ""){
$num = $_POST['opciones']; // este valor lo vamos a obtener de lo que el usuario ingrese como numero de opciones al crear la encuesta
$fecha = date('Y-m-d');
$sql= "INSERT INTO `encuestas` (`id` ,`titulo` ,`fecha`) VALUES (NULL , '$titulo', '$fecha');"; // si han ingresado si quiera un titulo insertamos esta encuesta en la tabla
mysql_query($sql);
$sql = "SELECT MAX(id) as id FROM encuestas"; // ahora obtenemos el id de la ultima fila,
// la que acabamos de ingresar,
// esto lo hacemos para poder asociarle las opciones
$req = mysql_query($sql);
while($result = mysql_fetch_object($req)){
$id_encuesta = $result->id; // con el resultado obtenido hacemos un bucle y definimos los resultados como id_encuesta.
}
$sql = "INSERT INTO `opciones` (`id` ,`id_encuesta` ,`nombre` ,`valor`) VALUES "; // En esta parte estamos armando un query SQL dinamico el cual sera modificado de acuerdo a lo que el usuario ingrese en el formulario.
for($i=1;$i<=$num;$i++){
$opcnativa = trim($_POST['opc'.$i]); // obtenemos el nombre de cada opcion indivudalmente.
if($opcnativa != ""){
$sql .= "(NULL , '$id_encuesta', '$opcnativa', '0')"; // el id de la opcion ira null para que se ponga automaticamente, en id_encuesta pues ira el id de la encuesta que acabamos de crear, en 'nombre' ira el nombre de la opcion y valor ira 0, puesto que es una nueva opcion sin votos, esto se repetira con todas las opciones que el usuario haya definido.
$cont++;
}
if($i == $num){
$sql .= ";"; // si es que se llega al final, termina la consulta
}else{
$sql .= ", "; // sino se pone una , y se continua.
}
}
if($cont < 2){ // si el usuario no definio ninguna opcion, se elimina la encuesta recien creada, esto es poco probable que suceda ya que la definicion de opciones la haremos con un select, y aqui se seleccionara el valor de 2 por defecto.
$sql = "DELETE FROM `encuestas` WHERE id = ".$id_encuesta;
echo "<div class='error'>Tiene que llevar por lo menos 2 opciones.</div>";
}else{
header('location: index.php'); // por ultimo si todo salio bien, redireccionamos al index para que el usuario vea su encuesta recien creada.
}
mysql_query($sql); // y ejecutamos el query
}
}
?>
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>Sistema de Encuestas</title>
<link rel="stylesheet" href="estilos.css">
</head>
<body>
<div class="wrap">
<h1>Agregar Encuesta</h1>
<form action="" method="post">
<div class="fl titulo">
<label>Titulo:</label>
<input name="titulo" type="text" value="<?php echo $titulo; ?>" size="26">
</div>
<?php
// esto es simplemente un formulario, pero aqui hacemos una condicion, identificamos si se ha definido un numero de opciones, si es si hacemos un bucle, si es no mostramos el select para definir un numero de opciones, como es obvio por defecto se mostrara el bucle:
if(isset($_POST['opc'])){
$num = $_POST['opciones']; // guardamos el valor del numero de opciones
for($i=1;$i<=$num;$i++){ // hacemos el bucle mostrando los campos respectivos.
?>
<div class="cf">
<label>Opcion <?php echo $i; ?>: </label>
<input name="opc<?php echo $i; ?>" type="text" size="43">
</div>
<?php } // aqui termina el bucle ?>
<div class="cf">
<input name="enviar" type="submit" value="Enviar">
<input name="opciones" type="hidden" value="<?php echo $num; // le pasamos el valor de num al proceso del formulario mediante un campo oculto. ?>">
<input name="cont" type="hidden" value="<?php echo cont; ?>">
</div>
<?php }else{ // sino se ha definido nro de opciones: ?>
<div class="fl">
<label>Nº de opciones:</label>
<select name="opciones">
<?php for($i=2;$i<=20;$i++){ // esto es un loop simple, solo para ahorrarnos trabajo, este select tendra de 2 a 20 opciones, si deseas cambiarlo lo puedes hacer aqui. ?>
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
<?php } ?>
</select>
</div>
<div class="cf">
<input name="opc" type="submit" value="Continuar">
</div>
<?php } // Sino se han definido opciones, que en vez de salir el boton de Enviar, salga uno que sea Continuar. ?>
<a href="index.php" class="volver">← Volver</a>
</form>
</div>
</body>
</html>
Y nos debería de quedar algo así:
Y listo, tendrán su sistema de encuestas.
Fuente | Demo | Descarga