PHP проекти: Създайте приложение за проучване на общественото мнение
⚡ Умно обобщение
Този PHP проект изгражда приложение за анкета от нулата, като свързва по-ранни уроци в един работещ пример. Той разделя приложението на фронт контролер, бизнес логически модел и файлове за преглед, след което съхранява и брои гласовете за фаворит. JavaБиблиотека със скриптове в MySQL база данни.
Как да създадете приложение за анкета с помощта на 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 адреса на избирателя заедно с времевия печат.
- Показване на проценти и стълбовидна диаграма на страницата с резултати, вместо сурови данни, за по-ясна представа за резултата.
- Направете анкетата динамична като съхраните въпроса и опциите в базата данни, така че да можете да използвате кода повторно за всяка анкета.




