PHP-проекты: создание приложения для опроса общественного мнения

⚡ Умное резюме

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

  • 🧭 Передний контроллер: Единственная точка входа в файл index.php определяет, какое представление загрузить, предоставляя приложению единое контролируемое место для маршрутизации запросов.
  • ???? Бизнес-логика: Класс модели обрабатывает всю работу с базой данных, обеспечивая...ping Для упрощения обслуживания доступ к данным отделен от их представления.
  • 🖼️ Просмотр файлов: Файлы представления .html.php содержат форму опроса и страницу с результатами, сочетая HTML с небольшими тегами вывода PHP.
  • 🇧🇷 Таблица базы данных: В одной таблице js_libraries хранится каждый голос в виде номера выбора и метки времени, ключом к которым является автоматически увеличивающийся идентификатор.
  • Проверка: Небольшой JavaФункция проверки скрипта предупреждает пользователя, если форма отправлена ​​без выбора какой-либо библиотеки.
  • 📊 Подсчет голосов: Контроллер вставляет голос, а затем выполняет запросы COUNT для каждого варианта, чтобы сформировать таблицу результатов.
  • 🤖 AI-помощь: Инструменты искусственного интеллекта могут расширить этот опрос до полноценного приложения для проведения опросов и проверить код на наличие ошибок и проблем безопасности.

Приложение для проведения опросов общественного мнения на PHP

Как создать приложение для опроса общественного мнения с помощью 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-адреса избирателя вместе с меткой времени.
  • Представьте проценты и столбчатую диаграмму. Вместо абсолютных значений, на странице результатов отображается более наглядная информация.
  • Сделайте опрос динамическим Сохраняя вопрос и варианты ответов в базе данных, вы можете повторно использовать код для любого опроса.

Часто задаваемые вопросы (FAQ)

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

Распространенные подходы включают установку cookie-файла после голосования, пометку сессии как проголосовавшей или сохранение IP-адреса и временной метки избирателя в базе данных. Ни один из них не является абсолютно надежным, поэтому следует комбинировать методы или требовать авторизации для более строгого контроля.

Замените объединенные запросы подготовленными операторами в mysqli или PDO, указав значение голоса в качестве параметра. Также убедитесь, что выбранное число соответствует ожидаемому значению, прежде чем запрос достигнет конечного результата.

Да. ИИ может добавлять несколько вопросов, динамические варианты ответов из базы данных, результаты в процентах с диаграммой и страницу администратора. Опишите необходимые функции, затем проверьте и протестируйте сгенерированный код перед развертыванием.

Да. Вставьте модель, контроллер и представления, и ИИ сможет обнаружить неопределенные переменные, отсутствующие аргументы подключения, риски внедрения кода и неэкранированный вывод, а затем предложить исправленные, более безопасные версии для тестирования.

Подведем итог этой публикации следующим образом: