PHP-projekter: Opret en applikation til meningsmåling
I dette PHP-projekt, vi skal lave en meningsmålingsansøgning.
Meningsmålingen vil bestå af 3 hovedkomponenter;
Front controller – dette er indekssiden, der bestemmer HTML-koden, der skal indlæses. Dette vil sikre, at vores applikation har et enkelt indgangspunkt. Dette vil give os mere kontrol over applikationen.
Forretningslogik – dette vil indeholde PHP-koden til at interagere med databasen. Dette vil give os mulighed for at adskille forretningslogikken fra præsentationen, hvilket gør vores applikation nem at vedligeholde
Views – dette vil indeholde HTML-koden. Vi vil have to sider nemlig;
- opinion.html.php – dette vil indeholde HTML-koden med spørgsmålet og mulighederne
- results.html.php – dette vil indeholde HTML-koden, der viser meningsmålingsresultaterne
Forudsætninger lavet
Meningsmålingen vil stille spørgsmålet –
Hvad er din favorit JavaScript Bibliotek?
Svarene ville være
- JQuery
- MooTools
- YUI-bibliotek
- Glow
Her er trinene til at oprette applikationen -
Trin 1) Databaseforbindelse
Dette afsnit forudsætter kendskab til MySQL og hvordan man administrerer det, hvis du ikke er bekendt med disse MySQL, tjek vores SQL tutorials sektion.
Vores applikation vil kun have en tabel med 3 felter nemlig;
- id – autogenerer nummer som den primære nøgle
- valg – nummeret, der repræsenterer en præsidentkandidat
- ts – tidsstemplet for afstemningen
Scriptet nedenfor opretter vores js_libraries-tabel.
<?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`) ); ?>
Trin 2) Kodning af vores applikation
Lad os nu skabe vores forretningslogiklag, der vil håndtere databaseforbindelsen. '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); } } ?>
HER,
- "offentlig funktion __construct()" er klassekonstruktørmetoden, der bruges til at etablere databaseforbindelsen
- "public function execute_query(...)" er metoden til at udføre forespørgsler såsom indsæt, opdatering og slet
- "offentlig funktionsvalg" er metoden til at hente data fra database og returnere et numerisk array.
- "public function insert(...)" er den indsættelsesmetode, der kalder execute_query-metoden.
- "offentlig funktion __destruct()" er klassedestruktoren, der lukker databaseforbindelsen.
Lad os nu oprette den forreste controller 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'; ?>
HER,
- "kræver 'opinion_poll_model.php';" indlæser business logic-klassen
- "$model = ny Opinion_poll_model();" opretter en forekomst af business logic-klassen
- "if (count($_POST) == 1)..." udfører datavalideringen og bruger JavaScript til at vise en beskedboks, hvis der ikke er stemt på en kandidat.
- "if (count($_POST) > 1)..." kontrollerer, om en stemme er blevet valgt ved at tælle antallet af elementer i $_POST-arrayet. Hvis der ikke er valgt noget element, vil $_POST kun indeholde det indsendte element. Hvis en kandidat er blevet valgt, vil $_POST-arrayet have to elementer, submit- og vote-elementet. Denne kode bruges også til at indsætte en ny stemmerekord og derefter vise resultatsiden
- "udgang;" bruges til at afslutte scriptudførelsen, efter at resultaterne er blevet vist, så meningsmålingsformularen ikke vises.
- "kræver 'opinion.html.php';" viser meningsmålingsformularen, hvis intet er valgt.
Lad os nu skabe visningerne. 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>
resultater.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>
Trin 3) Test af vores applikation
Hvis du antager, at du har gemt filerne i opinionsundersøgelse-mappen, skal du gå til URL'en http://localhost/opinionpoll/
Hvis du klikker på OK-knappen uden at vælge et JS-bibliotek, får du følgende beskedboks.
Vælg et JS-bibliotek, og klik derefter på knappen OK. Du får en resultatside svarende til den, der er vist nedenfor.
Resumé
- Opdeling af din applikation i forretningslogik, frontcontrollervisningslag er en god applikationsdesignpraksis
- JavaScript er nyttigt til at udføre validering på klientsiden
- Det er en god programmeringspraksis at bruge file.html.php til filer, der indeholder både HTML og PHP koder
- Meningsmålingsapplikationen demonstrerer, hvordan den viden, der er lært i de foregående lektioner, kan sættes sammen til at udvikle en fungerende applikation med en databasebackend.