PHP-проекты: создание приложения для опроса общественного мнения
⚡ Умное резюме
Этот PHP-проект создает с нуля приложение для опроса общественного мнения, объединяя ранее изученные темы в один работающий пример. Приложение разделено на фронт-контроллер, модель бизнес-логики и файлы представлений, а затем сохраняет и подсчитывает голоса за понравившийся вариант. JavaБиблиотека скриптов в MySQL .

Как создать приложение для опроса общественного мнения с помощью PHP
В этом PHP-проекте мы создадим приложение для проведения опросов общественного мнения.
Опрос общественного мнения будет состоять из 3 основных компонентов:
Передний контроллер – Это главная страница, которая определяет, какой HTML-код будет загружен. Это гарантирует, что у нашего приложения будет единая точка входа, что дает нам больше контроля над приложением.
Бизнес-логика – Здесь будет содержаться PHP-код для взаимодействия с базой данных. Это позволит нам отделить бизнес-логику от представления данных, что упростит поддержку нашего приложения.
Виды – Здесь будет содержаться HTML-код. У нас будет две страницы, а именно:
- Мнение.html.php – он будет содержать HTML-код с вопросом и опциями.
- results.html.php – он будет содержать HTML-код, отображающий результаты опроса общественного мнения.
Сделанные предположения
В ходе опроса общественного мнения будет задан вопрос: Что вам больше всего нравится? JavaСценарий Библиотека?
Ответы будут следующими:
- JQuery
- MooИнструменты
- Библиотека YUI
- Светиться
Вот шаги по созданию приложения.
Шаг 1) Подключение к базе данных
Этот раздел предполагает знание MySQL и как его применять. Если вы с этим не знакомы. MySQL, проверьте наши Учебники по SQL .
В нашем приложении будет всего одна таблица с тремя полями, а именно:
- 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); } } ?>
ВОТ,
- «публичная функция __construct()» — это метод конструктора класса, который используется для установления соединения с базой данных.
- Метод «public function execute_query(…)» предназначен для выполнения запросов, таких как вставка, обновление и удаление.
- «public function 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 = новая Opinion_poll_model();» создает экземпляр класса бизнес-логики
- «if (count($_POST) == 1)…» выполняет проверку данных и использует JavaСкрипт для отображения диалогового окна, если ни за одного кандидата не проголосовали.
- Функция `if (count($_POST) > 1)…` проверяет, был ли выбран голос, подсчитывая количество элементов в массиве `$_POST`. Если ни один элемент не был выбран, массив `$_POST` будет содержать только элемент отправки. Если была выбрана библиотека, массив `$_POST` будет содержать два элемента: элемент отправки и элемент голосования. Этот код также добавляет новую запись о голосовании, а затем отображает страницу результатов.
- Функция “exit;” используется для завершения выполнения скрипта после отображения результатов, чтобы форма опроса общественного мнения не отображалась.
- «требуется «opinion.html.php»;» отображает форму опроса общественного мнения, если ничего не выбрано.
Теперь давайте создадим представления. мнение.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/
Если вы нажмете кнопку «ОК», не выбрав библиотеку JavaScript, появится следующее сообщение.
Выберите библиотеку JavaScript, затем нажмите кнопку «ОК». Вы увидите страницу с результатами, похожую на показанную ниже.
Способы улучшения приложения для опросов общественного мнения
Этот проект — прочная основа. Чтобы подготовить его к внедрению в производство, рассмотрите следующие улучшения:
- Используйте подготовленные заявления в модели для устранения риска SQL-инъекций при объединении запросов.
- Предотвращение двойного голосования с помощью cookie, флага сессии или путем записи IP-адреса избирателя вместе с меткой времени.
- Представьте проценты и столбчатую диаграмму. Вместо абсолютных значений, на странице результатов отображается более наглядная информация.
- Сделайте опрос динамическим Сохраняя вопрос и варианты ответов в базе данных, вы можете повторно использовать код для любого опроса.



