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.



