¿Supiste lo que acaba de lanzar LagriHost? Sí, como lo estabas esperando, ahora vendemos Web Hosting y Dominios. Conoce más :)


Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
TUTORIAL Crear un sistema de encuesta [Part 2/2]
#1
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:

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> 
Y nos quedaría algo así:
[Imagen: encuestas_index.jpg]
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">&larr; Volver</a>';
 
    
    ?>
     
    </form>
    </div>
     
    </body>
    </html> 
Si todo salio bien, nos quedará algo así
[Imagen: encuestas_encuesta.jpg]
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][Imagen: encuestas_resultado.jpg]
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í:
[Imagen: encuestas_agregar1.jpg]
[Imagen: encuestas_agregar2.jpg]
Y listo, tendrán su sistema de encuestas.

Fuente | Demo | Descarga



Posibles temas similares...
Tema Autor Respuestas Vistas Último mensaje
  Tutorial Como hacer chat con el símbolo del sistema (CMD) Diringax 0 311 10-07-2017, 06:07 PM
Último mensaje: Diringax
  Crear un PopUp torgar22 0 519 18-06-2015, 01:00 PM
Último mensaje: torgar22
  Crear un link para download torgar22 0 443 18-06-2015, 12:49 PM
Último mensaje: torgar22
  Crear un Título que cambia de colores torgar22 0 406 18-06-2015, 12:36 PM
Último mensaje: torgar22
  Crear un Formulario o Libro de Visitas torgar22 0 529 18-06-2015, 12:27 PM
Último mensaje: torgar22



Usuarios navegando en este tema:
1 invitado(s)


Forum software by © MyBB Theme © Kevinex & iAndrew 2018