PHP-projekt: Skapa en applikation för opinionsundersökningar
I detta PHP-projekt, vi ska skapa en opinionsundersökningsansökan.
Opinionsundersökningen kommer att bestå av 3 huvudkomponenter;
Främre kontroller – det här är indexsidan som kommer att bestämma HTML-koden som ska laddas. Detta kommer att säkerställa att vår applikation har en enda ingångspunkt. Detta kommer att ge oss mer kontroll över applikationen.
Företagslogik – detta kommer att innehålla PHP-koden för att interagera med databasen. Detta gör att vi kan separera affärslogiken från presentationen vilket gör vår applikation lätt att underhålla
Visningar – detta kommer att innehålla HTML-koden. Vi kommer att ha två sidor nämligen;
- opinion.html.php – detta kommer att innehålla HTML-koden med frågan och alternativen
- results.html.php – detta kommer att innehålla HTML-koden som visar opinionsundersökningens resultat
Gjorda antaganden
Opinionsundersökningen kommer att ställa frågan –
Vad är din favorit JavaScript Bibliotek?
Svar skulle vara
- JQuery
- MooTools
- YUI-biblioteket
- Glöd
Här är stegen för att skapa applikationen-
Steg 1) Databasanslutning
Detta avsnitt förutsätter kunskap om MySQL och hur man administrerar det, om du inte är bekant med dessa MySQL, kolla vår SQL tutorials sektion.
Vår applikation kommer att ha endast en tabell med 3 fält nämligen;
- id – autogenerera nummer som primärnyckel
- val – numret som representerar en presidentkandidat
- ts – tidsstämpeln för omröstningen
Skriptet nedan skapar vår js_libraries-tabell.
<?php 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`) ); ?>
Steg 2) Koda vår applikation
Låt oss nu skapa vårt affärslogiklager som kommer att hantera databasanslutningen. '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_error()); if (!mysqli_select_db($this->db_handle,$this->db)) die("Unable to select database: " . mysqli_error()); } private function execute_query($sql_stmt) { $result = mysqli_query($db_handle,$sql_stmt); //execute SQL statement return !$result ? FALSE : TRUE; } public function select($sql_stmt) { $result = mysqli_query($db_handle,$sql_stmt); if (!$result) die("Database access failed: " . mysqli_error()); $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); } } ?>
HÄR,
- "public function __construct()" är klasskonstruktormetoden som används för att upprätta databasanslutningen
- "public function execute_query(...)" är metoden för att exekvera frågor som infoga, uppdatera och ta bort
- "public function select" är metoden för att hämta data från databas och returnera en numerisk matris.
- "public function insert(...)" är insertmetoden som anropar metoden execute_query.
- "public function __destruct()" är klassförstöraren som stänger databasanslutningen.
Låt oss nu skapa den främre kontrollern index.php
<?php require 'opinion_poll_model.php'; $model = new Opinion_poll_model(); if (count($_POST) == 1) { echo "<script>alert('You did not vote!');</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,'$ts')"; $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'; ?>
HÄR,
- "kräv 'opinion_poll_model.php';" laddar affärslogikklassen
- "$model = new Opinion_poll_model();" skapar en instans av affärslogikklassen
- "if (count($_POST) == 1)..." utför datavalideringen och använder JavaSkript för att visa en meddelanderuta om ingen kandidat har röstats fram.
- "if (count($_POST) > 1)..." kontrollerar om en röst har valts genom att räkna antalet poster i $_POST-matrisen. Om inget objekt har valts, kommer $_POST endast att innehålla det skickade objektet. Om en kandidat har valts, kommer $_POST-arrayen att bestå av två element, submit och vote item. Denna kod används också för att infoga ett nytt röstrekord och sedan visa resultatsidan
- "utgång;" används för att avsluta skriptkörningen efter att resultaten har visats så att opinionsundersökningsformuläret inte visas.
- "kräv 'opinion.html.php';" visar opinionsundersökningsformuläret om inget har valts.
Låt oss nu skapa vyerna. 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" />MooToolsl <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>
results.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>
Steg 3) Testa vår applikation
Förutsatt att du har sparat filerna i opinionpoll-mappen, bläddra till URL:en http://localhost/opinionpoll/
Om du klickar på OK-knappen utan att välja ett JS-bibliotek får du följande meddelanderuta.
Välj ett JS-bibliotek och klicka sedan på OK-knappen. Du kommer att få en resultatsida som liknar den som visas nedan.
Sammanfattning
- Att dela upp din applikation i affärslogik är en bra applikationsdesignpraxis
- JavaSkriptet är användbart för att utföra validering på klientsidan
- Det är en bra programmeringspraxis att använda file.html.php för filer som innehåller både HTML och PHP-koder
- Opinionsundersökningsapplikationen visar hur kunskapen från de tidigare lektionerna kan sättas samman för att utveckla en fungerande applikation med en databasbackend.