PHP projekti: Napravite aplikaciju za ispitivanje mišljenja
⚡ Pametni sažetak
Ovaj PHP projekt izrađuje aplikaciju za anketiranje od nule, povezujući ranije lekcije u jedan radni primjer. Aplikacija se dijeli na front controller, model poslovne logike i datoteke za pregled, a zatim se pohranjuje i broji glasove za favorita. JavaBiblioteka skripti u MySQL baza podataka.
Kako napraviti aplikaciju za anketu koristeći PHP
U ovom PHP projektu, izradit ćemo aplikaciju za anketiranje.
Anketa će se sastojati od 3 glavne komponente:
Prednji upravljač – ovo je indeksna stranica koja će odrediti HTML kod koji će se učitati. To osigurava da naša aplikacija ima jednu ulaznu točku, što nam daje veću kontrolu nad aplikacijom.
Poslovna logika – ovo će sadržavati PHP kod za interakciju s bazom podataka. To nam omogućuje odvajanje poslovne logike od prezentacije, što našu aplikaciju čini jednostavnom za održavanje.
Posjeta – ovo će sadržavati HTML kod. Imat ćemo dvije stranice, i to:
- opinion.html.php – ovo će sadržavati HTML kod s pitanjem i opcijama
- results.html.php – ovo će sadržavati HTML kod koji prikazuje rezultate ankete
Pretpostavke napravljene
U anketi će se postaviti pitanje: Koji vam je omiljeni JavaScript Knjižnica?
Odgovori bi bili:
- JQuery
- Mootools
- YUI knjižnica
- Sjaj
Evo koraka za izradu aplikacije.
Korak 1) Povezivanje baze podataka
Ovaj dio pretpostavlja poznavanje MySQL i kako ga primijeniti. Ako niste upoznati s MySQL, provjerite naše SQL tutoriali odjeljak.
Naša aplikacija će imati samo jednu tablicu s 3 polja, i to:
- id – automatski generirani broj kao primarni ključ
- izbor – broj koji predstavlja odabrani JavaBiblioteka skripti
- ts – vremenska oznaka za glasovanje
Skripta ispod stvara našu tablicu 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`) );
Korak 2) Kodiranje naše aplikacije
Sada kreirajmo sloj poslovne logike koji će upravljati povezivanjem s bazom podataka. model_ankete_mnijenja.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); } } ?>
OVDJE,
- “javna funkcija __construct()” je metoda konstruktora klase koja se koristi za uspostavljanje veze s bazom podataka
- „public function execute_query(…)“ je metoda za izvršavanje upita kao što su umetanje, ažuriranje i brisanje
- „javna funkcija select(…)“ je metoda za dohvaćanje podataka iz baza podataka i vraćanje niza.
- “javna funkcija insert(…)” je metoda umetanja koja poziva metodu execute_query.
- “javna funkcija __destruct()” je destruktor klase koji zatvara vezu s bazom podataka.
Sada kreirajmo prednji kontroler 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'; ?>
OVDJE,
- “zahtijevaj 'opinion_poll_model.php';” učitava klasu poslovne logike
- “$model = novi Opinion_poll_model();” stvara instancu klase poslovne logike
- “if (count($_POST) == 1)…” izvodi provjeru valjanosti podataka i koristi JavaSkripta za prikaz okvira s porukom ako nije glasano za nijednog kandidata.
- „if (count($_POST) > 1)…“ provjerava je li odabran glas brojanjem broja stavki u polju $_POST. Ako nije odabrana nijedna stavka, polje $_POST će sadržavati samo stavku za slanje. Ako je odabrana biblioteka, polje $_POST će imati dva elementa, stavke za slanje i stavke za glasanje. Ovaj kod također umeće novi zapis o glasanju, a zatim prikazuje stranicu s rezultatima.
- "exit;" se koristi za prekid izvršavanja skripte nakon što su rezultati prikazani, tako da se obrazac za anketu ne prikazuje.
- “zahtijevaj 'opinion.html.php';” prikazuje obrazac za anketu ako ništa nije odabrano.
Sada kreirajmo poglede. mišljenje.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>
rezultati.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>
Korak 3) Testiranje naše aplikacije
Pod pretpostavkom da ste datoteke spremili u mapu opinionpoll, idite do URL http://localhost/opinionpoll/
Ako kliknete gumb U redu bez odabira JS biblioteke, dobit ćete sljedeći okvir s porukom.
Odaberite JS biblioteku, a zatim kliknite gumb U redu. Dobit ćete stranicu s rezultatima sličnu onoj prikazanoj dolje.
Načini za poboljšanje aplikacije za anketiranje
Ovaj projekt je čvrsta osnova. Kako biste ga pripremili za produkciju, razmotrite sljedeća poboljšanja:
- Koristite pripremljene izjave u modelu kako bi se eliminirao rizik SQL injekcije iz spojenih upita.
- Spriječite dvostruko glasanje kolačićem, zastavom sesije ili bilježenjem IP adrese birača uz vremensku oznaku.
- Prikaži postotke i stupčasti grafikon na stranici s rezultatima umjesto neobrađenih brojeva, radi jasnijeg pregleda ishoda.
- Učinite anketu dinamičnom pohranjivanjem pitanja i opcija u bazu podataka, tako da možete ponovno upotrijebiti kod za bilo koju anketu.




