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.

  • 🧭 Prednji kontroler: Jedna ulazna točka index.php odlučuje koji će se prikaz učitati, dajući aplikaciji jedno kontrolirano mjesto za usmjeravanje zahtjeva.
  • 🧠 Poslovna logika: Klasa modela obrađuje sav posao s bazom podataka, keeping pristup podacima odvojen od prezentacije radi lakšeg održavanja.
  • 🖼️ Prikaži datoteke: Datoteke prikaza .html.php sadrže obrazac za anketu i stranicu s rezultatima, miješajući HTML s malim PHP izlaznim oznakama.
  • 🗃️ Tablica baze podataka: Jedna tablica js_libraries pohranjuje svaki glas kao broj izbora i vremensku oznaku, s automatskim povećanjem ID-a.
  • Provjera valjanosti: Mali JavaProvjera skripte upozorava korisnika kada se obrazac pošalje bez odabira bilo koje biblioteke.
  • 📊 Brojanje glasova: Kontroler unosi glas, a zatim pokreće COUNT upita po opciji kako bi izgradio tablicu rezultata.
  • 🤖 AI pomoć: Alati umjetne inteligencije mogu proširiti ovu anketu u potpunu aplikaciju za anketiranje i pregledati kod radi grešaka i sigurnosnih problema.

PHP aplikacija za anketiranje

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/

Testiranje aplikacije za ispitivanje javnog mnijenja

Ako kliknete gumb U redu bez odabira JS biblioteke, dobit ćete sljedeći okvir s porukom.

Testiranje aplikacije za ispitivanje javnog mnijenja

Odaberite JS biblioteku, a zatim kliknite gumb U redu. Dobit ćete stranicu s rezultatima sličnu onoj prikazanoj dolje.

Testiranje aplikacije za ispitivanje javnog mnijenja

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.

Pitanja i odgovori

Prednji kontroler usmjerava svaki zahtjev kroz jednu ulaznu točku, obično index.php, koja zatim učitava odgovarajuću logiku i prikaz. Centralizira usmjeravanje, autentifikaciju i dijeljeno postavljanje te je osnova većine PHP okvira.

Uobičajeni pristupi su postavljanje kolačića nakon glasanja, označavanje sesije kao glasane ili pohranjivanje IP adrese i vremenske oznake birača u bazu podataka. Nijedan nije siguran, stoga kombinirajte metode ili zahtijevajte prijavu za strožu kontrolu.

Zamijenite spojene upite pripremljenim naredbama u mysqli-ju ili PDO-u, povezujući vrijednost glasa kao parametar. Također provjerite je li izbor jedan od očekivanih brojeva prije nego što uopće dođe do upita.

Da. Umjetna inteligencija može dodati više pitanja, dinamičke opcije iz baze podataka, postotne rezultate s grafikonom i administratorsku stranicu. Opišite značajke koje želite, a zatim pregledajte i testirajte generirani kod prije implementacije.

Da. Zalijepite model, kontroler i prikaze, a umjetna inteligencija može uočiti nedefinirane varijable, nedostajuće argumente veze, rizike ubrizgavanja i neizbjegnuti izlaz, a zatim predložiti ispravljene, sigurnije verzije za testiranje.

Sažmite ovu objavu uz: