PHP-projektek: Hozzon létre egy közvélemény-kutatási alkalmazást
⚡ Okos összefoglaló
Ez a PHP projekt egy közvélemény-kutatási alkalmazást épít a nulláról, a korábbi leckéket egyetlen működő példává egyesítve. Az alkalmazást egy front controllerre, egy üzleti logikai modellre és megtekintő fájlokra osztja, majd tárolja és megszámolja a kedvencekre leadott szavazatokat. JavaSzkriptkönyvtár egy MySQL adatbázisban.

Hogyan készítsünk közvélemény-kutatási alkalmazást PHP használatával?
Ebben a PHP projektben egy közvélemény-kutatási alkalmazást fogunk létrehozni.
A közvélemény-kutatás 3 fő részből fog állni:
Elülső vezérlő – ez az indexoldal, amely meghatározza a betöltendő HTML-kódot. Ez biztosítja, hogy az alkalmazásunknak egyetlen belépési pontja legyen, ami nagyobb kontrollt biztosít számunkra az alkalmazás felett.
Üzleti logika – ez fogja tartalmazni az adatbázissal való interakcióhoz szükséges PHP kódot. Ez lehetővé teszi számunkra, hogy elkülönítsük az üzleti logikát a megjelenítéstől, így az alkalmazásunk könnyen karbantartható.
Nézetek – ez fogja tartalmazni a HTML kódot. Két oldalunk lesz, nevezetesen:
- vélemény.html.php – ez tartalmazza a HTML kódot a kérdéssel és a beállításokkal
- results.html.php – ez tartalmazza a közvélemény-kutatás eredményeit megjelenítő HTML-kódot
Feltételezések
A közvélemény-kutatásban a következő kérdést teszik fel: Mi a kedvenced? JavaForgatókönyv Könyvtár?
A válaszok a következők lennének:
- JQuery
- MooTools
- YUI könyvtár
- Izzás
Íme az alkalmazás létrehozásának lépései.
1. lépés: Adatbázis-kapcsolat
Ez a rész feltételezi az ismereteket MySQL és hogyan kell beadni. Ha nem ismeri a MySQL, ellenőrizze nálunk SQL oktatóanyagok szakasz.
Az alkalmazásunknak csak egy táblázata lesz, 3 mezővel, nevezetesen:
- id – automatikusan generált szám, mint elsődleges kulcs
- választás – a kiválasztottat jelölő szám JavaSzkriptkönyvtár
- ts – a szavazás időbélyege
Az alábbi szkript létrehozza a js_libraries táblánkat.
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`) );
2. lépés) Alkalmazásunk kódolása
Most hozzuk létre az üzleti logikai rétegünket, amely az adatbázis-kapcsolatokat fogja kezelni. vélemény_szavazás_modell.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); } } ?>
ITT,
- A „nyilvános függvény __construct()” az adatbázis-kapcsolat létrehozásához használt osztálykonstruktor metódus
- A „public function execute_query(…)” egy olyan lekérdezések végrehajtására szolgáló metódus, mint az insert, update és delete.
- A „public function select(…)” az adatok lekérésének metódusa a adatbázis és egy tömböt ad vissza.
- A „public function insert(…)” az a beszúrási metódus, amely meghívja az execute_query metódust.
- A „nyilvános függvény __destruct()” az az osztálydestruktor, amely lezárja az adatbázis-kapcsolatot.
Most hozzuk létre az elülső vezérlőt 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'; ?>
ITT,
- "require 'opinion_poll_model.php';" betölti az üzleti logikai osztályt
- "$model = new Opinion_poll_model();" létrehozza az üzleti logikai osztály egy példányát
- Az „if (count($_POST) == 1)…” elvégzi az adatellenőrzést és használja JavaSzkript, amely üzenetmezőt jelenít meg, ha egyetlen jelöltre sem szavaztak.
- Az „if (count($_POST) > 1)…” függvény a $_POST tömbben lévő elemek számának megszámlálásával ellenőrzi, hogy kiválasztottak-e szavazatot. Ha nincs kiválasztott elem, a $_POST csak a beküldött elemet fogja tartalmazni. Ha egy könyvtárat választottak ki, a $_POST tömb két elemet tartalmaz, a beküldött és a szavazott elemeket. Ez a kód egy új szavazási rekordot is beszúr, majd megjeleníti az eredményoldalt.
- Az „exit;” paranccsal leállítható a szkript végrehajtása az eredmények megjelenítése után, így a közvélemény-kutatási űrlap nem jelenik meg.
- "require 'opinion.html.php';" megjeleníti a közvélemény-kutatási űrlapot, ha nincs kiválasztva.
Most hozzuk létre a nézeteket. vélemény.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>
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>
3. lépés) Alkalmazásunk tesztelése
Feltételezve, hogy mentette a fájlokat a véleménykérdések mappájába, keresse meg a URL http://localhost/opinionpoll/
Ha JS könyvtár kiválasztása nélkül kattintasz az OK gombra, a következő üzenetablak jelenik meg.
Válasszon ki egy JS könyvtárat, majd kattintson az OK gombra. Egy hasonló eredményoldalt fog kapni, mint az alább látható.
A közvélemény-kutatás alkalmazás fejlesztésének módjai
Ez a projekt szilárd alapot teremt. A gyártásra kész állapot eléréséhez vegye figyelembe a következő fejlesztéseket:
- Használjon előre elkészített kimutatásokat a modellben, hogy kiküszöböljük az SQL-befecskendezés kockázatát az összefűzött lekérdezésekből.
- A kettős szavazás elkerülése sütivel, munkamenet-jelzővel, vagy a szavazó IP-címének az időbélyeg melletti rögzítésével.
- Százalékok és oszlopdiagram megjelenítése az eredményoldalon a nyers darabszámok helyett, hogy tisztább képet kapjunk az eredményről.
- Tedd dinamikussá a szavazást a kérdés és a lehetőségek adatbázisban történő tárolásával, így a kódot bármilyen szavazáshoz újra felhasználhatja.



