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: