Proyectos PHP: crear una aplicación de encuesta de opinión
⚡ Resumen inteligente
Este proyecto PHP crea una aplicación de encuestas de opinión desde cero, integrando lecciones anteriores en un ejemplo funcional. Divide la aplicación en un controlador frontal, un modelo de lógica de negocio y archivos de vista, y luego almacena y cuenta los votos para un favorito. JavaBiblioteca de scripts en una MySQL base de datos.

Cómo crear una aplicación de encuestas de opinión usando PHP
En este proyecto de PHP, vamos a crear una aplicación de encuestas de opinión.
La encuesta de opinión constará de 3 componentes principales:
Controlador frontal Esta es la página de inicio que determinará el código HTML que se cargará. Esto garantiza que nuestra aplicación tenga un único punto de entrada, lo que nos brinda mayor control sobre ella.
Lógica de negocios Este archivo contendrá el código PHP para interactuar con la base de datos. Esto nos permite separar la lógica de negocio de la presentación, facilitando así el mantenimiento de nuestra aplicación.
Vistas – Esto contendrá el código HTML. Tendremos dos páginas, a saber:
- opinion.html.php – contendrá el código HTML con la pregunta y las opciones
- results.html.php: contendrá el código HTML que muestra los resultados de la encuesta de opinión.
Suposiciones hechas
La encuesta de opinión planteará la pregunta: ¿Cuál es su favorito? JavaScript ¿Biblioteca?
Las respuestas serían:
- JQuery
- MooTools
- Biblioteca YUI
- Brillo
Aquí están los pasos para crear la aplicación.
Paso 1) Conectividad de la base de datos
Esta sección asume el conocimiento de MySQL y cómo administrarlo. Si no está familiarizado con MySQL, mira nuestro tutoriales de SQL .
Nuestra aplicación tendrá una sola tabla, con 3 campos, a saber:
- id – número generado automáticamente como clave principal
- opción: el número que representa la opción elegida JavaBiblioteca de scripts
- ts: la marca de tiempo de la votación
El siguiente script crea nuestra tabla js_libraries.
CREATE TABLE `js_libraries` ( `id` int(11) NOT NULL AUTO_INCREMENT, `choice` tinyint(4) NOT NULL DEFAULT '0', `ts` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) );
Paso 2) Codificar nuestra aplicación
Ahora vamos a crear nuestra capa de lógica de negocio que gestionará la conectividad con la base de datos. opinion_poll_model.php
<?php class Opinion_poll_model { private $db_handle; private $host = 'localhost'; private $db = 'opinion_poll'; private $uid = 'root'; private $pwd = 'melody'; public function __construct() { $this->db_handle = mysqli_connect($this->host, $this->uid, $this->pwd); // connect to MySQL server if (!$this->db_handle) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($this->db_handle, $this->db)) die("Unable to select database: " . mysqli_error($this->db_handle)); } private function execute_query($sql_stmt) { $result = mysqli_query($this->db_handle, $sql_stmt); // execute SQL statement return !$result ? FALSE : TRUE; } public function select($sql_stmt) { $result = mysqli_query($this->db_handle, $sql_stmt); if (!$result) die("Database access failed: " . mysqli_error($this->db_handle)); $rows = mysqli_num_rows($result); $data = array(); if ($rows) { while ($row = mysqli_fetch_array($result)) { $data = $row; } } return $data; } public function insert($sql_stmt) { return $this->execute_query($sql_stmt); } public function __destruct(){ mysqli_close($this->db_handle); } } ?>
AQUÍ,
- “función pública __construct()” es el método constructor de clase que se utiliza para establecer la conexión de la base de datos
- La función pública execute_query(…) es el método para ejecutar consultas como insertar, actualizar y eliminar.
- “public function select(…)” es el método para recuperar datos de la base de datos de CRISPR Medicine News y devolviendo una matriz.
- “inserción de función pública (…)” es el método de inserción que llama al método ejecutar_query.
- “función pública __destruct()” es el destructor de clase que cierra la conexión de la base de datos.
Ahora vamos a crear el controlador frontal. index.php
<?php require 'opinion_poll_model.php'; $model = new Opinion_poll_model(); if (count($_POST) == 1) { echo "<script>alert(1);</script>"; } if (count($_POST) > 1) { $ts = date("Y-m-d H:i:s"); $option = $_POST['vote'][0]; $sql_stmt = "INSERT INTO js_libraries (`choice`,`ts`) VALUES ($option,3)"; $model->insert($sql_stmt); $sql_stmt = "SELECT COUNT(choice) choices_count FROM js_libraries;"; $choices_count = $model->select($sql_stmt); $libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow"); $table_rows = ''; for ($i = 1; $i < 5; $i++) { $sql_stmt = "SELECT COUNT(choice) choices_count FROM js_libraries WHERE choice = $i;"; $result = $model->select($sql_stmt); $table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $result[0] . "</b> votes</td></tr>"; } require 'results.html.php'; exit; } require 'opinion.html.php'; ?>
AQUÍ,
- "requerir 'opinion_poll_model.php';" carga la clase de lógica de negocios
- “$modelo = nuevo Opinion_poll_model();” crea una instancia de la clase de lógica de negocios
- “if (count($_POST) == 1)…” realiza la validación de datos y utiliza JavaScript para mostrar un cuadro de mensaje si no se ha votado por ningún candidato.
- La instrucción `if (count($_POST) > 1)…` comprueba si se ha seleccionado un voto contando los elementos del array `$_POST`. Si no se ha seleccionado ningún elemento, `$_POST` solo contendrá el elemento `submit`. Si se ha seleccionado una biblioteca, el array `$_POST` tendrá dos elementos: `submit` y `vote`. Este código también inserta un nuevo registro de voto y, a continuación, muestra la página de resultados.
- La instrucción “exit;” se utiliza para finalizar la ejecución del script una vez que se hayan mostrado los resultados, de modo que no se muestre el formulario de la encuesta de opinión.
- "requerir 'opinión.html.php';" muestra el formulario de encuesta de opinión si no se ha seleccionado nada.
Ahora vamos a crear las vistas. opinión.html.php
<html> <head> <title>JavaScript Libraries - Opinion Poll</title> </head> <body> <h2>JavaScript Libraries - Opinion Poll</h2> <p><b>What is your favorite JavaScript?</b></p> <form method="POST" action="index.php"> <p> <input type="radio" name="vote" value="1" />JQuery <br /><input type="radio" name="vote" value="2" />MooTools <br /><input type="radio" name="vote" value="3" />YUI Library <br /><input type="radio" name="vote" value="4" />Glow </p> <p><input type="submit" name="submitbutton" value="OK" /></p> </form> </body> </html>
resultados.html.php
<html> <head> <title>JavaScript Libraries Poll Results</title> </head> <body> <h2>Opinion Poll Results</h2> <p><b>What is your favorite JavaScript Library?</b></p> <p><b><?php echo $choices_count[0]; ?></b> people have thus far taken part in this poll:</p> <p> <table> <?php echo($table_rows); ?> </table> </body> </html>
Paso 3) Probar nuestra aplicación
Suponiendo que haya guardado los archivos en la carpeta opinionpoll, navegue hasta la URL http://localhost/opinionpoll/
Si hace clic en el botón Aceptar sin seleccionar una biblioteca JS, recibirá el siguiente cuadro de mensaje.
Seleccione una biblioteca JS y, a continuación, haga clic en el botón Aceptar. Obtendrá una página de resultados similar a la que se muestra a continuación.
Formas de mejorar la aplicación de encuestas de opinión
Este proyecto constituye una base sólida. Para que esté listo para su producción, considere las siguientes mejoras:
- Utilice declaraciones preparadas en el modelo para eliminar el riesgo de inyección SQL de las consultas concatenadas.
- Evitar el doble voto mediante una cookie, un indicador de sesión o registrando la dirección IP del votante junto con la marca de tiempo.
- Mostrar porcentajes y un gráfico de barras En la página de resultados, en lugar de los recuentos brutos, se muestra el resultado para una visión más clara.
- Haz que la encuesta sea dinámica. Al almacenar la pregunta y las opciones en la base de datos, puedes reutilizar el código para cualquier encuesta.



