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.

  • 🧭 Elülső vezérlő: Egyetlen index.php belépési pont dönti el, hogy melyik nézetet töltse be, így az alkalmazás egyetlen ellenőrzött helyet kap a kérések irányítására.
  • 🧠 Üzleti logika: Egy modell osztály kezeli az összes adatbázis-műveletet, keeping az adatokhoz való hozzáférés elkülönítve a megjelenítéstől a könnyebb karbantartás érdekében.
  • 🖼️ Fájlok megtekintése: A .html.php nézetfájlok tartalmazzák a szavazólapot és az eredményoldalt, HTML-t és kis PHP kimeneti tageket keverve.
  • 🗃️ Adatbázis táblázat: Egyetlen js_libraries tábla tárolja az egyes szavazatokat választási számként és időbélyegként, amelyeket egy automatikusan növekvő azonosító kulcsol.
  • ✅ Érvényesítés: Egy kis JavaA szkriptellenőrzés figyelmezteti a felhasználót, ha az űrlapot könyvtár kiválasztása nélkül küldik el.
  • 📊 Szavazatszámlálás: A vezérlő beszúrja a szavazatot, majd opciónként COUNT lekérdezést futtat az eredménytábla felépítéséhez.
  • 🤖 AI Assist: A mesterséges intelligencia eszközei kibővíthetik ezt a szavazást egy teljes körű felmérési alkalmazássá, és áttekinthetik a kódot hibák és biztonsági problémák szempontjából.

PHP közvélemény-kutatási alkalmazás

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/

Közvélemény-kutatási alkalmazás tesztelése

Ha JS könyvtár kiválasztása nélkül kattintasz az OK gombra, a következő üzenetablak jelenik meg.

Közvélemény-kutatási alkalmazás tesztelése

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ó.

Közvélemény-kutatási alkalmazás tesztelése

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.

GYIK

Az elülső vezérlő minden kérést egyetlen belépési ponton, általában az index.php fájlon keresztül irányít át, amely ezután betölti a megfelelő logikát és nézetet. Központosítja az útvonalválasztást, a hitelesítést és a megosztott beállításokat, és a legtöbb PHP keretrendszer alapja.

Gyakori módszerek a szavazás utáni süti beállítása, a munkamenet megjelölése szavazottként, vagy a szavazó IP-címének és időbélyegének tárolása az adatbázisban. Egyik sem hibátlan, ezért kombinálják a metódusokat, vagy bejelentkezést kérnek a szigorúbb ellenőrzés érdekében.

Cseréld le az összefűzött lekérdezéseket előre elkészített mysqli vagy PDO utasításokra, paraméterként kötve a szavazat értékét. Azt is ellenőrizd, hogy a választás a várt számok egyike-e, mielőtt elérné a lekérdezést.

Igen. A mesterséges intelligencia több kérdést, dinamikus opciókat tud hozzáadni az adatbázisból, százalékos eredményeket egy diagrammal és egy adminisztrációs oldallal. Írd le a kívánt funkciókat, majd tekintsd át és teszteld a generált kódot a telepítés előtt.

Igen. Illeszd be a modellt, a vezérlőt és a nézeteket, és a mesterséges intelligencia képes észlelni a nem definiált változókat, a hiányzó kapcsolati argumentumokat, az injektálási kockázatokat és a nem escaped kimenetet, majd javaslatokat tesz a javított, biztonságosabb verziókra tesztelésre.

Foglald össze ezt a bejegyzést a következőképpen: