Sistema de encuestas orientado a objetos utilizando PHP

La programación orientada a objetos se utiliza para diseñar, desarrollar e implementar muchas aplicaciones tanto simples, como complejas. En otros tutoriales ya hemos visto aspectos básicos de la programación orientada a objetos. En este tutorial veremos cómo crear un sistema de encuestas en PHP con programación orientada a objetos.

En este sistema de encuestas el usuario votara sus cursos favoritos. Así mismo, el usuario seleccionará su curso favorito utilizando los botones de radio de un formulario HTML. Al enviar el curso seleccionado, el código PHP llamará a las funciones de la clase modelo que nos ayudarán a gestionar la encuesta.

Tablas necesarias en la base de datos

Los cursos favoritos se almacenarán en la tabla tbl_courses. Utilizaremos el ID del curso en la tabla tbl_course_vote con una relación 1=N. Ejecuta el sql de más abajo para crear las tablas que utilizaremos en este ejemplo y sus datos.

CREATE TABLE `tbl_course` (
  `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;

INSERT INTO `tbl_course` (`id`, `name`, `date`) VALUES
(1, 'Artificial Intelligence', '2018-03-27 08:53:59'),
(2, 'Network Security', '2018-03-27 08:54:27'),
(3, 'Information Retrieval', '2018-03-27 08:54:54'),
(4, 'Global Positioning System', '2018-03-27 08:56:53');

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

CREATE TABLE `tbl_course_vote` (
  `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;

Enviar los datos de la encuesta mediante los botones de radio

Este formulario HTML mostrará un listado de cursos extraidos de la base de datos junto a unos botones de radio. El usuario podrá seleccionar sus favoritos utilizando este elemento. Al enviar el curso seleccionado, el código PHP gestionará todo lo relacionado con la encuesta mediante las funciones de la clase modelo. Después de procesar la votación, mostraremos el número de votos de cada uno de los cursos.

<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="Submit" />
    </form>
    <div></div>
    <?php
            } else {
                $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> votes
    </div>

    <?php 
		}
    } 
    ?>
</div>

Poll.php

Esta clase cuenta con las funciones necesarias para insertar un nuevo votos y obtener los cursos y correspondientes votos de nuestra base de datos. Al enviar un nuevo voto, crearemos un nuevo objeto de la clase Poll y llamaremos a su función addVote(). En esta función, crearemos la query del insert basándonos en los datos enviados por el usuario.

<?php
require_once 'Dao.php';
 
class Poll{
      
    public function addVote($subjectOption)
    {
       $daoObject = new Dao();
       $sql = "INSERT INTO tbl_subject_vote (subject_id) VALUES ('".$subjectOption."')";
       $daoObject->insert($sql); 

    }
    
    public function getCource()
    {
        $daoObject = new Dao();
        $sql = "SELECT * FROM tbl_course order by id";
        $result = $daoObject->select($sql);
        return $result;
    }
    
    
    
    public function getCourcewithVote()
    {
        $daoObject = new Dao();
        $sql = "SELECT * FROM tbl_course 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_course_vote 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;
    }
}

?>

Dao.php

En esta clase se realizarán las funciones relacionadas con la base de datos, como las operaciones de creación y lectura. Al usar estas funciones, los datos de la encuesta se actualizarán en la base de datos. Las datos de la base de datos se definen como propiedades de la clase. La conexión se establece en el constructor de la clase y se cierra en el destructor.

<?php

class Dao {

 private $db_handle;
 
 private $host = 'localhost';
 private $database = 'ejemplo';
 private $userid = 'root'; 
 private $password = 'test';


    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);

    }

}

?>

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP