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 кода, който показва резултатите от проучването на общественото мнение

Направени предположения

Анкетата ще зададе въпроса: Кой е вашият любим JavaСценарий Библиотека?

Отговорите биха били:

  • 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);
}
 
}
 
?>

ТУК,

  • „публична функция __construct()“ е методът на конструктора на класа, който се използва за установяване на връзката с базата данни
  • „Публична функция execute_query(…)“ е методът за изпълнение на заявки като вмъкване, актуализиране и изтриване
  • „Публична функция select(…)“ е методът за извличане на данни от база данни и връщане на масив.
  • „public function 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/

Тестване на приложение за проучване на общественото мнение

Ако щракнете върху бутона OK, без да изберете JS библиотека, ще получите следното съобщение.

Тестване на приложение за проучване на общественото мнение

Изберете JS библиотека и след това щракнете върху бутона OK. Ще получите страница с резултати, подобна на показаната по-долу.

Тестване на приложение за проучване на общественото мнение

Начини за подобряване на приложението за анкети

Този проект е солидна основа. За да го направите готов за производство, помислете за следните подобрения:

  • Използвайте подготвени твърдения в модела, за да се елиминира рискът от SQL инжектиране от конкатенираните заявки.
  • Предотвратяване на двойното гласуване с „бисквитка“, флаг за сесия или чрез записване на IP адреса на избирателя заедно с времевия печат.
  • Показване на проценти и стълбовидна диаграма на страницата с резултати, вместо сурови данни, за по-ясна представа за резултата.
  • Направете анкетата динамична като съхраните въпроса и опциите в базата данни, така че да можете да използвате кода повторно за всяка анкета.

Въпроси и Отговори

Фронт контролерът маршрутизира всяка заявка през една входна точка, обикновено index.php, която след това зарежда правилната логика и изглед. Той централизира маршрутизирането, удостоверяването и споделената настройка и е основата на повечето PHP рамки.

Често срещани подходи са задаване на „бисквитка“ след гласуване, маркиране на сесията като гласувана или съхраняване на IP адреса и времевия печат на гласоподавателя в базата данни. Нито един от тях не е напълно сигурен, затова комбинирайте методите или изисквайте вход за по-строг контрол.

Заменете конкатенираните заявки с подготвени оператори в mysqli или PDO, като обвържете стойността на гласа като параметър. Също така проверете дали изборът е едно от очакваните числа, преди изобщо да достигне до заявката.

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

Да. Поставете модела, контролера и изгледите и изкуственият интелект може да забележи недефинирани променливи, липсващи аргументи за връзка, рискове от инжектиране и неекраниран изход, след което да предложи коригирани, по-безопасни версии за тестване.

Обобщете тази публикация с: