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.

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/
Si vous cliquez sur le bouton OK sans sélectionner de bibliothèque JS, la boîte de dialogue suivante s'affichera.
Sélectionnez une bibliothèque JS, puis cliquez sur le bouton OK. Vous obtiendrez une page de résultats similaire à celle ci-dessous.
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.



