Проекти PHP: Створення програми для опитування громадської думки

⚡ Розумний підсумок

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

  • 🧭 Фронтальний контролер: Єдина точка входу index.php вирішує, яке представлення завантажувати, надаючи застосунку одне контрольоване місце для маршрутизації запитів.
  • 🧠 Бізнес-логіка: Клас моделі обробляє всю роботу з базою даних, зберігаєping доступ до даних окремо від презентації для легшого обслуговування.
  • 🖼️ Переглянути файли: Файли перегляду .html.php містять форму опитування та сторінку результатів, поєднуючи HTML з невеликими тегами виводу PHP.
  • 🗃️ Таблиця бази даних: В одній таблиці js_libraries кожен голос зберігається як номер вибору та позначка часу, ключ яких задається автоматично збільшуваним ідентифікатором.
  • ✅ Перевірка: Невеликої JavaПеревірка скриптів попереджає користувача, коли форма надсилається без вибору будь-якої бібліотеки.
  • 📊 Підрахунок голосів: Контролер вставляє голос, а потім виконує запити COUNT для кожного параметра, щоб побудувати таблицю результатів.
  • 🤖 AI Assist: Інструменти штучного інтелекту можуть розширити це опитування до повноцінного застосунку для опитувань та перевірити код на наявність помилок і проблем безпеки.

PHP-додаток для опитувань громадської думки

Як створити застосунок для опитування громадської думки за допомогою 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-адреси виборця разом із позначкою часу.
  • Відображення відсотків та стовпчастої діаграми на сторінці результатів замість необроблених підрахунків, для чіткішого уявлення про результат.
  • Зробіть опитування динамічним зберігаючи питання та варіанти в базі даних, щоб ви могли повторно використовувати код для будь-якого опитування.

Поширені запитання

Фронт-контролер направляє кожен запит через одну точку входу, зазвичай index.php, яка потім завантажує правильну логіку та представлення. Він централізує маршрутизацію, автентифікацію та спільне налаштування, і є основою більшості PHP-фреймворків.

Поширені підходи – це встановлення cookie після голосування, позначення сеансу як проголосованого або зберігання IP-адреси та позначки часу виборця в базі даних. Жоден з них не є надійним, тому комбінуйте методи або вимагайте входу в систему для суворішого контролю.

Замініть об'єднані запити підготовленими операторами в mysqli або PDO, прив'язавши значення vote як параметр. Також перевірте, чи є вибір одним із очікуваних чисел, перш ніж він потрапить до запиту.

Так. Штучний інтелект може додавати кілька запитань, динамічні опції з бази даних, відсоткові результати з діаграмою та сторінку адміністрування. Опишіть потрібні функції, а потім перегляньте та протестуйте згенерований код перед розгортанням.

Так. Вставте модель, контролер та представлення, і ШІ зможе виявити невизначені змінні, відсутні аргументи з'єднання, ризики впровадження та неекранований вивід, а потім запропонувати виправлені, безпечніші версії для тестування.

Підсумуйте цей пост за допомогою: