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.

  • 🧭 Controlador frontal: Un Ćŗnico punto de entrada index.php decide quĆ© vista cargar, lo que proporciona a la aplicación un lugar controlado para enrutar las solicitudes.
  • 🧠 Lógica de negocios: Una clase modelo maneja todo el trabajo de la base de datos, keeping El acceso a los datos se realiza de forma independiente de la presentación para facilitar el mantenimiento.
  • šŸ–¼ļø Ver archivos: Los archivos de vista .html.php contienen el formulario de la encuesta y la pĆ”gina de resultados, mezclando HTML con pequeƱas etiquetas de salida PHP.
  • šŸ—ƒļø Tabla de base de datos: Una Ćŗnica tabla js_libraries almacena cada voto como un nĆŗmero de opción y una marca de tiempo, identificados mediante un ID de autoincremento.
  • āœ… Validación: Una pequeƱa JavaLa comprobación del script advierte al usuario cuando se envĆ­a el formulario sin seleccionar ninguna biblioteca.
  • šŸ“Š Recuento de votos: El controlador inserta el voto y luego ejecuta consultas COUNT por cada opción para construir la tabla de resultados.
  • šŸ¤– Asistencia de IA: Las herramientas de IA pueden convertir esta encuesta en una aplicación de encuestas completa y revisar el código en busca de errores y problemas de seguridad.

Aplicación de encuestas de opinión en PHP

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/

Probar una aplicación de encuesta de opinión

Si hace clic en el botón Aceptar sin seleccionar una biblioteca JS, recibirÔ el siguiente cuadro de mensaje.

Probar una aplicación de encuesta de opinión

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.

Probar una aplicación de encuesta de opinió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.

Preguntas Frecuentes

El controlador frontal dirige todas las solicitudes a través de un único punto de entrada, generalmente index.php, que luego carga la lógica y la vista correspondientes. Centraliza el enrutamiento, la autenticación y la configuración compartida, y es la base de la mayoría de los frameworks de PHP.

Los métodos habituales incluyen establecer una cookie después de votar, marcar la sesión como votada o almacenar la dirección IP y la fecha y hora del votante en la base de datos. Ninguno es infalible, por lo que se recomienda combinar métodos o exigir el inicio de sesión para un control mÔs estricto.

Reemplace las consultas concatenadas con sentencias preparadas en mysqli o PDO, vinculando el valor del voto como parÔmetro. AdemÔs, verifique que la opción sea uno de los números esperados antes de que llegue a la consulta.

Sí. La IA puede añadir varias preguntas, opciones dinÔmicas de la base de datos, resultados porcentuales con un grÔfico y una pÔgina de administración. Describe las funciones que necesitas y, a continuación, revisa y prueba el código generado antes de implementarlo.

Sí. Pega el modelo, el controlador y las vistas, y la IA podrÔ detectar variables indefinidas, argumentos de conexión faltantes, riesgos de inyección y salida sin escape, y luego sugerir versiones corregidas y mÔs seguras para probar.

Resumir este post con: