Portada » Lenguaje PHP » Sistema de encuesta con PHP POO y MySQL

Sistema de encuesta con PHP POO y MySQL

Sistema de encuesta con PHP POO y MySQL. La programación orientada a objetos (POO), se utiliza para diseñar, desarrollar e implementar muchas aplicaciones y/o plataformas web, así como las más completas. En este artículo explicaremos muy a detalle el funcionamiento de este sistema de calificación de encuestas.

He creado un sistema de encuestas para que el usuario vote por sus cursos favoritos. El usuario elegirá su curso favorito usando las opciones de radio del formulario HTML. Al enviar el curso seleccionado, el código PHP llamará a las funciones de clase de modelo para realizar acciones de sondeo.

Sistema de encuesta con PHP POO y MySQL

¿Cómo funciona el sistema encuestas?

  • Al cargar la página principal nos mostrara un formulario HTML con varias opciones extraídas de una base de datos y mostrados en varias etiquetas tipo RADIO.
  • Por lo tanto, solo basta que el usuario final seleccione una opción de una lista y presione el botón enviar. para generar la primera votación que será almacenada en la base de datos MySQL.
  • Una vez guardada el script automáticamente mostrara los resultados de dicho evento. Mostrando valores numéricos de cada opción.
Encuestas POO PHP
Encuestas POO PHP

¿Cómo esta estructurado este sistema?

Utilizamos varios ficheros PHP que a continuación detallaremos.

  • dbconect.php
  • Encuesta.php
  • index.php
  • php_pooencuestas.sql

Importar tablas de base de datos

Este sistema necesita de una base de datos para almacenar las encuestas que los usuarios eligen. Por lo tanto, la base de datos será llamado php_pooencuestas y dos tablas:

  1. La tabla llamada tbl_carreras , para almacenar la cantidad de registros, que será las opciones que el usuario elige.
  2. Una tabla llamada tbl_carreras_votos  que será encargada de registrar las votaciones de los usuarios que interactúan con el sistema.
CREATE TABLE `tbl_carreras` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;


INSERT INTO `tbl_carreras` (`id`, `name`, `date`) VALUES
(1, 'Desarrollo JavaScript', '2018-08-01 04:39:10'),
(2, 'Big Data', '2018-08-01 04:38:49'),
(3, 'Marketing digital', '2018-08-01 04:38:38'),
(4, 'Desarrollo web', '2018-08-01 04:38:29');


CREATE TABLE `tbl_carreras_votos` (
  `id` int(11) NOT NULL,
  `course_id` int(20) NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;


ALTER TABLE `tbl_carreras`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `tbl_carreras_votos`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `tbl_carreras`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

ALTER TABLE `tbl_carreras_votos`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;

Index.php

Envia datos de encuestas a través de opciones de radio

La información será mostrada al usuario mediante un formulario HTML y mostrara una lista de carreras que son extraídas de la base de datos con las opciones de radio.

El usuario puede seleccionar su carrera que más le fascine usando las etiquetas de radio. Al enviar el curso seleccionado, el código almacenara la información en la tabla tbl_carreras_votos. Después de procesar los datos de las encuestas, muestra resultados generales de la encuesta.

      <p> <b>Selecciones su carrera favorita </b> </p>
      <div class="poll-container">
        <?php
            if (empty($_POST["submit"])) {
                $result = $pollObject->getCource();
                ?>
        <form method="POST" action="">
          <?php
                foreach ($result as $k => $v) {
                    ?>
          <div class='option-row'>
            <input class='radio-input' type='radio' name='vote'
                    value='<?php echo $result[$k]["id"]; ?>' />
            <?php echo $result[$k]["name"]; ?> </div>
          <?php } ?>
          <input id="btnSubmit" type="submit" name="submit"
                value="Enviar" />
        </form>
        <div> </div>
        <?php
            } else {
		$subjectId=$_POST["vote"];
                $pollObject->addVote($subjectId);
                $result = $pollObject->getCourcewithVote();
                foreach ($result as $k => $v) {
                ?>
        <div class='poll'><?php echo $result[$k]["name"]; ?> <b><?php echo $result[$k]["vote_count"]; ?></b> votos </div>
        <?php }
            } ?>
      </div>

Encuesta.php

Esta clase incluye funciones para agregar nueva entrada de voto y para obtener las carreras y su cuenta de votos existente de la base de datos. Al enviar los datos, se creará el objeto de la clase Poll para invocar su función addVote(). En esta función, la consulta INSERT se crea mediante los datos  enviados por el usuario.

class Poll{
      
    public function addVote($subjectOption)
    {
       $daoObject = new encuestas();
       $sql = "INSERT INTO tbl_carreras_votos (course_id) VALUES ('".$subjectOption."')";
       $daoObject->insert($sql); 

    }
    
    public function getCource()
    {
        $daoObject = new encuestas();
        $sql = "SELECT * FROM tbl_carreras order by id";
        $result = $daoObject->select($sql);
        return $result;
    }

    public function getCourcewithVote()
    {
        $daoObject = new encuestas();
        $sql = "SELECT * FROM tbl_carreras order by id";
        $result = $daoObject->select($sql);
        if(!empty($result)) {
            foreach ($result as $k => $v) {
                $result[$k]["vote_count"] = 0;
                $sql_stmt = "SELECT COUNT(course_id) as vote_count FROM tbl_carreras_votos WHERE course_id = ". $result[$k]["id"];
                $voteResult = $daoObject->select($sql_stmt);
                if(!empty($voteResult[0]["vote_count"])) {
                    $result[$k]["vote_count"] = $voteResult[0]["vote_count"];
                }
            }
        }
        
        return $result;
    }
}

dbconect. php

En esta clase, se realizarán las operaciones relacionadas con la base de datos, como ser:

  • La operación de crear
  • También de leer

Al utilizar estas funciones, los datos de las encuestas se actualizarán en la base de datos con nuevos valores de manera dinámica. Se declara la conexión y se establece en el constructor de clase y se cierra en el destructor.

    public function __construct() {
       
        $this->db_handle = mysqli_connect($this->host, $this->userid, $this->password, $this->database); 

        if (!$this->db_handle)
        {
            die("Connection not established: " . mysqli_error());
        }

        if (!mysqli_select_db($this->db_handle,$this->database))
        {
                die("Unable to select database: " . mysqli_error());
        }

    }

 public function select($sql) {

        $result = mysqli_query($this->db_handle,$sql);

        if (!$result)
        {
            die("Unable to access database: " . mysqli_connect_error());
        }

        $rows = mysqli_num_rows($result);

        $rowdata = array();

        if ($rows)
        {
            while ($row = mysqli_fetch_assoc($result))
            {
                $rowdata[] = $row;
            }
        }

        return $rowdata;

    }
   

    public function insert($sql)
    {
        $result = mysqli_query($this->db_handle,$sql);
        
        return $result;
    }

    public function __destruct()
    {
        mysqli_close($this->db_handle);

    }
Sistema de encuesta con PHP POO y MySQL
Sistema de encuesta con PHP POO y MySQL

CONCLUSION

  • El sistema de encuesta es muy usado para poder tomar decisiones en varios factores de preferencias. También, podemos saber con exactitud la preferencia de los usuarios, alumnos, clientes, etc.
  • Este sistema usa POO que es muy recomendado en el desarrollo de sistemas seguros y confiables.
  • A continuación, les dejare la descarga completa de este sistema de encuestas.

DESCARGA

Descargar Código Fuente

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Privacidad