Проекти PHP: Створення програми для опитування громадської думки
⚡ Розумний підсумок
Цей PHP-проект створює застосунок для опитування громадської думки з нуля, об'єднуючи попередні уроки в один робочий приклад. Він розділяє застосунок на фронт-контролер, модель бізнес-логіки та файли перегляду, а потім зберігає та підраховує голоси за фаворита. JavaБібліотека скриптів у MySQL , що постійно розширюється.

Як створити застосунок для опитування громадської думки за допомогою PHP
У цьому PHP-проекті ми створимо застосунок для опитування громадської думки.
Опитування громадської думки складатиметься з 3 основних компонентів:
Передній контролер – це сторінка індексу, яка визначатиме HTML-код для завантаження. Це гарантує, що наша програма матиме єдину точку входу, що дає нам більше контролю над програмою.
Бізнес-логіка – тут буде розміщено PHP-код для взаємодії з базою даних. Це дозволяє нам відокремити бізнес-логіку від презентації, що спрощує підтримку нашого застосунку.
думки – тут буде розміщено HTML-код. У нас буде дві сторінки, а саме:
- opinion.html.php – тут міститиметься HTML-код із запитанням і параметрами
- results.html.php – тут буде містити HTML-код, який відображає результати опитування громадської думки
Зроблені припущення
В опитуванні буде поставлено питання: Що вам найбільше подобається JavaScript Бібліотека?
Відповіді будуть такими:
- JQuery
- MooTools
- Бібліотека YUI
- Світитися
Ось кроки для створення програми.
Крок 1) Підключення до бази даних
Цей розділ передбачає знання MySQL і як його застосовувати. Якщо ви не знайомі з MySQL, перевірте нашу Підручники з SQL .
Наша програма матиме лише одну таблицю з 3 полями, а саме:
- id – автоматично згенероване число як первинний ключ
- вибір – число, що представляє обраний JavaБібліотека скриптів
- ts – позначка часу для голосування
Наведений нижче сценарій створює нашу таблицю 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`) );
Крок 2) Кодування нашої програми
Давайте тепер створимо наш рівень бізнес-логіки, який оброблятиме підключення до бази даних. opinion_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); } } ?>
ТУТ,
- “public function __construct()” – це метод конструктора класу, який використовується для встановлення з’єднання з базою даних
- «public function execute_query(…)» – це метод для виконання запитів, таких як вставка, оновлення та видалення.
- «Публічна функція select(…)» – це метод для отримання даних з база даних та повернення масиву.
- «Публічна функція insert(…)» — це метод вставки, який викликає метод execute_query.
- “Публічна функція __destruct()” – це деструктор класу, який закриває з’єднання з базою даних.
Давайте тепер створимо фронтальний контролер 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'; ?>
ТУТ,
- “вимагати 'opinion_poll_model.php';” завантажує клас бізнес-логіки
- “$model = new Opinion_poll_model();” створює екземпляр класу бізнес-логіки
- «if (count($_POST) == 1)…» виконує перевірку даних і використовує JavaСкрипт для відображення вікна повідомлення, якщо за жодного кандидата не проголосовано.
- «if (count($_POST) > 1)…» перевіряє, чи було вибрано голос, підраховуючи кількість елементів у масиві $_POST. Якщо жодного елемента не було вибрано, масив $_POST міститиме лише елемент для надсилання. Якщо вибрано бібліотеку, масив $_POST матиме два елементи: елементи для надсилання та голосування. Цей код також вставляє новий запис про голосування, а потім відображає сторінку результатів.
- «exit;» використовується для завершення виконання скрипта після відображення результатів, щоб форма опитування не відображалася.
- “вимагати 'opinion.html.php';” відображає форму опитування, якщо нічого не вибрано.
Давайте тепер створимо види. opinion.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>
результати.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) Тестування нашої програми
Якщо ви зберегли файли в папці opinionpoll, перейдіть до URL http://localhost/opinionpoll/
Якщо ви натиснете кнопку «ОК», не вибравши бібліотеку JS, ви отримаєте наступне вікно повідомлення.
Виберіть JS-бібліотеку, а потім натисніть кнопку OK. Ви отримаєте сторінку з результатами, подібну до показаної нижче.
Способи покращення застосунку для опитувань
Цей проєкт є міцною основою. Щоб підготувати його до виробництва, розгляньте такі вдосконалення:
- Використовуйте підготовлені оператори у моделі, щоб усунути ризик SQL-ін'єкції з об'єднаних запитів.
- Запобігання подвійному голосуванню за допомогою файлу cookie, прапора сеансу або шляхом запису IP-адреси виборця разом із позначкою часу.
- Відображення відсотків та стовпчастої діаграми на сторінці результатів замість необроблених підрахунків, для чіткішого уявлення про результат.
- Зробіть опитування динамічним зберігаючи питання та варіанти в базі даних, щоб ви могли повторно використовувати код для будь-якого опитування.



