Progetti PHP: crea un'applicazione per sondaggi d'opinione
โก Riepilogo intelligente
Questo progetto PHP crea da zero un'applicazione per sondaggi d'opinione, unendo le lezioni precedenti in un unico esempio funzionante. L'applicazione รจ suddivisa in un front controller, un modello di logica di business e file di visualizzazione, quindi memorizza e conta i voti per un candidato preferito. JavaLibreria di script in un MySQL Banca dati.

Come creare un'applicazione per sondaggi d'opinione utilizzando PHP
In questo progetto PHP, creeremo un'applicazione per sondaggi d'opinione.
Il sondaggio d'opinione sarร composto da 3 componenti principali:
Controllore anteriore โ Questa รจ la pagina indice che determina il codice HTML da caricare. Ciรฒ garantisce che la nostra applicazione abbia un unico punto di ingresso, il che ci offre un maggiore controllo sull'applicazione.
Logica di business โ questa sezione conterrร il codice PHP per l'interazione con il database. Ciรฒ ci consente di separare la logica di business dalla presentazione, rendendo la nostra applicazione di facile manutenzione.
Visualizzazioni โ questa conterrร il codice HTML. Avremo due pagine, ovvero:
- opinion.html.php โ conterrร il codice HTML con la domanda e le opzioni
- results.html.php โ conterrร il codice HTML che visualizza i risultati del sondaggio di opinione
Supposizioni fatte
Il sondaggio d'opinione porrร la domanda: Qual รจ il tuo preferito? JavaCopione Biblioteca?
Le risposte sarebbero:
- JQuery
- MooTools
- Libreria YUI
- Splendore
Ecco i passaggi per creare l'applicazione.
Passaggio 1) Connettivitร al database
Questa sezione presuppone la conoscenza di MySQL e come somministrarlo. Se non hai familiaritร con MySQL, controlla il nostro Tutorial sull'SQL .
La nostra applicazione avrร una sola tabella, con 3 campi, ovvero:
- id โ numero generato automaticamente come chiave primaria
- scelta โ il numero che rappresenta il scelto JavaLibreria di script
- ts โ il timestamp del voto
Lo script seguente crea la nostra tabella 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`) );
Passaggio 2) Codifica della nostra applicazione
Creiamo ora il livello di logica di business che gestirร la connettivitร al database. 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); } } ?>
QUI,
- "funzione pubblica __construct()" รจ il metodo di costruzione della classe utilizzato per stabilire la connessione al database
- โpublic function execute_query(โฆ)โ รจ il metodo per eseguire query come insert, update e delete
- โpublic function select(โฆ)โ รจ il metodo per recuperare i dati da banca dati e restituendo un array.
- "public function insert(...)" รจ il metodo di inserimento che chiama il metodoexecute_query.
- "funzione pubblica __destruct()" รจ il distruttore di classe che chiude la connessione al database.
Creiamo ora il controller frontale. 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'; ?>
QUI,
- โrichiedi 'opinion_poll_model.php';โ carica la classe della logica aziendale
- โ$modello = nuovo Opinion_poll_model();โ crea un'istanza della classe di logica aziendale
- "if (count($_POST) == 1)โฆ" esegue la convalida dei dati e utilizza JavaScript per visualizzare una finestra di messaggio se nessun candidato รจ stato votato.
- โif (count($_POST) > 1)โฆโ verifica se รจ stato selezionato un voto contando il numero di elementi nell'array $_POST. Se non รจ stato selezionato alcun elemento, $_POST conterrร solo l'elemento di invio. Se รจ stata scelta una biblioteca, l'array $_POST conterrร due elementi: l'elemento di invio e l'elemento di voto. Questo codice inserisce anche un nuovo record di voto e quindi visualizza la pagina dei risultati.
- Il comando โexit;โ viene utilizzato per terminare lโesecuzione dello script dopo la visualizzazione dei risultati, in modo che il modulo del sondaggio di opinione non venga visualizzato.
- โrichiede 'opinion.html.php';โ visualizza il modulo del sondaggio d'opinione se non รจ stato selezionato nulla.
Procediamo ora a creare le viste. opinione.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>
risultati.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>
Passaggio 3) Testare la nostra applicazione
Supponendo che tu abbia salvato i file nella cartella opinionpoll, vai alla cartella URL http://localhost/opinionpoll/
Se fai clic sul pulsante OK senza selezionare una libreria JS, visualizzerai il seguente messaggio.
Seleziona una libreria JS, quindi fai clic sul pulsante OK. Otterrai una pagina di risultati simile a quella mostrata di seguito.
Modi per migliorare l'app per i sondaggi d'opinione
Questo progetto ha una solida base. Per renderlo pronto per la produzione, si consiglia di valutare i seguenti miglioramenti:
- Usa dichiarazioni preparate nel modello per eliminare il rischio di SQL injection dalle query concatenate.
- Prevenire il doppio voto tramite un cookie, un flag di sessione o registrando l'indirizzo IP dell'elettore insieme al timestamp.
- Mostra le percentuali e un grafico a barre nella pagina dei risultati, anzichรฉ i conteggi grezzi, per una visione piรน chiara dell'esito.
- Rendi dinamico il sondaggio memorizzando la domanda e le opzioni nel database, รจ possibile riutilizzare il codice per qualsiasi sondaggio.



