Projets PHP : créer une application de sondage d'opinion

⚡ Résumé intelligent

Ce projet PHP crée une application de sondage d'opinion de A à Z, en intégrant les leçons précédentes dans un exemple fonctionnel. L'application est divisée en un contrôleur frontal, un modèle de logique métier et des fichiers de vue, puis elle stocke et comptabilise les votes pour un favori. JavaBibliothèque de scripts dans une MySQL base de données.

  • 🧭 Contrôleur avant : Un seul point d'entrée index.php détermine quelle vue charger, offrant ainsi à l'application un point de contrôle unique pour acheminer les requêtes.
  • 🧠 Logique métier : Une classe modèle gère toutes les opérations de base de données, conserveping Accès aux données séparé de la présentation pour une maintenance simplifiée.
  • 🖼️ Afficher les fichiers : Les fichiers de vue .html.php contiennent le formulaire de sondage et la page de résultats, mêlant HTML et petites balises de sortie PHP.
  • 🇧🇷 Tableau de la base de données : Une seule table js_libraries stocke chaque vote sous la forme d'un numéro de choix et d'un horodatage, indexés par un identifiant à incrémentation automatique.
  • ✅ Validation: Une petite JavaLa vérification du script avertit l'utilisateur lorsque le formulaire est soumis sans qu'aucune bibliothèque ne soit sélectionnée.
  • (I.e. Comptage des votes : Le contrôleur saisit le vote, puis exécute des requêtes COUNT par option pour construire le tableau des résultats.
  • 🤖 Assistance IA : Les outils d'IA peuvent transformer ce sondage en une application d'enquête complète et analyser le code pour détecter les bugs et les problèmes de sécurité.

Application de sondage d'opinion PHP

Comment créer une application de sondage d'opinion en PHP

Dans ce projet PHP, nous allons créer une application de sondage d'opinion.

Le sondage d'opinion comprendra 3 composantes principales :

Contrôleur frontal Il s'agit de la page d'index qui déterminera le code HTML à charger. Cela garantit que notre application possède un point d'entrée unique, ce qui nous offre un meilleur contrôle sur celle-ci.

Logique métier Ce fichier contiendra le code PHP permettant d'interagir avec la base de données. Cela nous permet de séparer la logique métier de la présentation, facilitant ainsi la maintenance de notre application.

Vues – ceci contiendra le code HTML. Nous aurons deux pages, à savoir :

  • opinion.html.php – celui-ci contiendra le code HTML avec la question et les options
  • results.html.php – celui-ci contiendra le code HTML qui affiche les résultats du sondage d’opinion

Hypothèses formulées

Le sondage d'opinion posera la question suivante : Quel est votre favori ? Javascénario Bibliothèque?

Les réponses seraient :

  • JQuery
  • MooTools
  • Bibliothèque YUI
  • Lueur

Voici les étapes à suivre pour créer l'application.

Étape 1) Connectivité de la base de données

Cette section suppose la connaissance de MySQL et comment l'administrer. Si vous n'êtes pas familier avec MySQL, consultez notre Tutoriels SQL .

Notre application ne comportera qu'une seule table, avec 3 champs, à savoir :

  • id – numéro généré automatiquement servant de clé primaire
  • choix – le nombre représentant le choix JavaBibliothèque de scripts
  • ts – l'horodatage du vote

Le script ci-dessous crée notre table 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`)
);

Étape 2) Codage de notre application

Créons maintenant notre couche de logique métier qui gérera la connectivité à la base de données. 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);
}
 
}
 
?>

ICI,

  • « fonction publique __construct() » est la méthode de constructeur de classe utilisée pour établir la connexion à la base de données
  • La méthode « public function execute_query(…) » permet d'exécuter des requêtes telles que les requêtes d'insertion, de mise à jour et de suppression.
  • « public function select(…) » est la méthode permettant de récupérer des données depuis le base de données et renvoyant un tableau.
  • « public function insert(…) » est la méthode d'insertion qui appelle la méthodeexecute_query.
  • « fonction publique __destruct() » est le destructeur de classe qui ferme la connexion à la base de données.

Créons maintenant le contrôleur 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';
 
?>

ICI,

  • "exiger 'opinion_poll_model.php';" charge la classe de logique métier
  • "$model = nouveau Opinion_poll_model();" crée une instance de la classe de logique métier
  • «if (count($_POST) == 1)…» effectue la validation des données et utilise JavaScript permettant d'afficher une boîte de message si aucun candidat n'a été élu.
  • La condition « if (count($_POST) > 1)… » vérifie si un vote a été sélectionné en comptant le nombre d'éléments dans le tableau $_POST. Si aucun élément n'a été sélectionné, $_POST ne contient que l'élément « submit ». Si une bibliothèque a été choisie, le tableau $_POST contient deux éléments : « submit » et « vote ». Ce code insère également un nouvel enregistrement de vote, puis affiche la page de résultats.
  • La commande « exit; » permet de mettre fin à l'exécution du script après l'affichage des résultats, afin que le formulaire de sondage d'opinion ne s'affiche pas.
  • "exiger 'opinion.html.php';" affiche le formulaire de sondage d'opinion si rien n'a été sélectionné.

Créons maintenant les vues. opinion.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>

résultats.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>

Étape 3) Tester notre application

En supposant que vous ayez enregistré les fichiers dans le dossier opinionpoll, accédez à URL http://localhost/opinionpoll/

Tester une application de sondage d'opinion

Si vous cliquez sur le bouton OK sans sélectionner de bibliothèque JS, la boîte de dialogue suivante s'affichera.

Tester une application de sondage d'opinion

Sélectionnez une bibliothèque JS, puis cliquez sur le bouton OK. Vous obtiendrez une page de résultats similaire à celle ci-dessous.

Tester une application de sondage d'opinion

Améliorations possibles de l'application de sondage d'opinion

Ce projet constitue une base solide. Pour le rendre opérationnel en production, veuillez envisager les améliorations suivantes :

  • Utilisez des déclarations préparées dans le modèle afin d'éliminer le risque d'injection SQL des requêtes concaténées.
  • Empêcher le double vote avec un cookie, un indicateur de session ou en enregistrant l'adresse IP de l'électeur avec l'horodatage.
  • Afficher les pourcentages et un graphique à barres sur la page des résultats au lieu des chiffres bruts, pour une vision plus claire du résultat.
  • Rendre le sondage dynamique en stockant la question et les options dans la base de données, ce qui vous permet de réutiliser le code pour n'importe quel sondage.

FAQ

Le contrôleur frontal achemine toutes les requêtes via un point d'entrée unique, généralement index.php, qui charge ensuite la logique et la vue appropriées. Il centralise le routage, l'authentification et la configuration partagée, et constitue la base de la plupart des frameworks PHP.

Les méthodes courantes consistent à enregistrer un cookie après le vote, à marquer la session comme ayant été utilisée ou à stocker l'adresse IP et l'horodatage du vote dans la base de données. Aucune n'est infaillible ; il est donc conseillé de combiner plusieurs méthodes ou d'exiger une connexion pour un contrôle plus strict.

Remplacez les requêtes concaténées par des requêtes préparées dans mysqli ou PDO, en liant la valeur du vote comme paramètre. Vérifiez également que le choix correspond à l'un des nombres attendus avant même qu'il ne soit exécuté dans la requête.

Oui. L'IA peut ajouter plusieurs questions, des options dynamiques issues de la base de données, des résultats en pourcentage avec un graphique et une page d'administration. Décrivez les fonctionnalités souhaitées, puis vérifiez et testez le code généré avant le déploiement.

Oui. Collez le modèle, le contrôleur et les vues, et l'IA peut repérer les variables non définies, les arguments de connexion manquants, les risques d'injection et les sorties non échappées, puis suggérer des versions corrigées et plus sûres à tester.

Résumez cet article avec :