Projekty PHP: Utwórz aplikację do ankiety
⚡ Inteligentne podsumowanie
Ten projekt PHP buduje aplikację ankietową od podstaw, łącząc wcześniejsze lekcje w jeden działający przykład. Dzieli aplikację na kontroler frontowy, model logiki biznesowej i pliki widoków, a następnie przechowuje i zlicza głosy na faworyta. JavaBiblioteka skryptów w MySQL Baza danych.
Jak stworzyć aplikację do ankiet opinii publicznej za pomocą PHP
W tym projekcie PHP utworzymy aplikację do przeprowadzania ankiet opinii.
Sondaż opinii publicznej będzie składał się z 3 głównych komponentów:
Kontroler przedni – to strona indeksowa, która określi kod HTML do załadowania. Dzięki temu nasza aplikacja ma jeden punkt wejścia, co daje nam większą kontrolę nad aplikacją.
Logika biznesowa – będzie zawierał kod PHP do interakcji z bazą danych. Pozwala nam to oddzielić logikę biznesową od prezentacji, ułatwiając utrzymanie naszej aplikacji.
odwiedzajacy – tutaj będzie znajdował się kod HTML. Będziemy mieli dwie strony, a mianowicie:
- opinia.html.php – będzie zawierać kod HTML z pytaniem i opcjami
- results.html.php – będzie zawierał kod HTML wyświetlający wyniki ankiety
Poczynione założenia
W ankiecie opinii zostanie zadane pytanie: Jaki jest Twój ulubiony JAVASCRIPT Biblioteka?
Odpowiedzi brzmiałyby:
- JQuery
- Narzędzia Moo
- Biblioteka YUI
- Poświata
Oto kroki tworzenia aplikacji.
Krok 1) Łączność z bazą danych
W tej części zakłada się znajomość MySQL i jak go stosować. Jeśli nie znasz MySQL, sprawdź nasze Samouczki SQL
Nasza aplikacja będzie miała tylko jedną tabelę z 3 polami, mianowicie:
- id – automatycznie generowany numer jako klucz podstawowy
- wybór – liczba reprezentująca wybranego JavaBiblioteka skryptów
- ts – znacznik czasu głosowania
Poniższy skrypt tworzy naszą tabelę 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`) );
Krok 2) Zakodowanie naszej aplikacji
Utwórzmy teraz warstwę logiki biznesowej, która będzie obsługiwać łączność z bazą danych. opinia_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_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); } } ?>
TUTAJ,
- „Funkcja publiczna __construct()” to metoda konstruktora klasy używana do nawiązania połączenia z bazą danych
- „public function execute_query(…)” to metoda wykonywania zapytań, takich jak wstawianie, aktualizowanie i usuwanie
- „public function select(…)” to metoda pobierania danych z baza danych i zwracanie tablicy.
- „funkcja publiczna wstaw(…)” to metoda wstawiania, która wywołuje metodę wykonywania_query.
- „funkcja publiczna __destruct()” to destruktor klasy, który zamyka połączenie z bazą danych.
Utwórzmy teraz kontroler frontowy 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'; ?>
TUTAJ,
- „wymagaj „opinion_poll_model.php”;” ładuje klasę logiki biznesowej
- „$model = nowy model ankiety_opinii();” tworzy instancję klasy logiki biznesowej
- „if (count($_POST) == 1)…” przeprowadza weryfikację i wykorzystuje dane JavaSkrypt wyświetlający okno dialogowe z komunikatem, jeśli nie oddano głosu na żadnego kandydata.
- „if (count($_POST) > 1)…” sprawdza, czy głos został wybrany, licząc liczbę elementów w tablicy $_POST. Jeśli żaden element nie został wybrany, tablica $_POST będzie zawierać tylko element przesłany. Jeśli wybrano bibliotekę, tablica $_POST będzie zawierać dwa elementy: element przesłany i element głosowania. Ten kod wstawia również nowy rekord głosowania, a następnie wyświetla stronę wyników.
- „exit;” służy do zakończenia wykonywania skryptu po wyświetleniu wyników, tak aby formularz ankiety opinii nie był wyświetlany.
- „wymagaj „opinion.html.php”;” wyświetla formularz ankiety, jeśli nic nie zostało wybrane.
Utwórzmy teraz widoki. opinia.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>
wyniki.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>
Krok 3) Testowanie naszej aplikacji
Zakładając, że zapisałeś pliki w folderze opinionpoll, przejdź do URL http://localhost/opinionpoll/
Jeśli klikniesz przycisk OK bez wybrania biblioteki JS, pojawi się poniższy komunikat.
Wybierz bibliotekę JS, a następnie kliknij przycisk OK. Zostanie wyświetlona strona wyników podobna do tej pokazanej poniżej.
Sposoby na ulepszenie aplikacji do ankiet opinii publicznej
Ten projekt to solidny fundament. Aby przygotować go do produkcji, rozważ następujące ulepszenia:
- Użyj przygotowanych oświadczeń w modelu w celu wyeliminowania ryzyka ataku SQL injection z łączonych zapytań.
- Zapobiegaj podwójnemu głosowaniu za pomocą pliku cookie, flagi sesji lub rejestrując adres IP wyborcy wraz ze znacznikiem czasu.
- Pokaż procenty i wykres słupkowy na stronie wyników zamiast surowych liczb, aby uzyskać jaśniejszy obraz rezultatów.
- Uczyń ankietę dynamiczną przechowując pytanie i opcje w bazie danych, dzięki czemu możesz ponownie wykorzystać kod w dowolnej ankiecie.




