Учебники

21) Приложение социологического исследования

В этом проекте PHP , мы собираемся создать приложение , опрос общественного мнения.

Опрос будет состоять из 3 основных компонентов;

Фронт-контроллер — это индексная страница, которая будет определять код HTML, который будет загружен. Это гарантирует, что наше приложение имеет единую точку входа. Это даст нам больше контроля над приложением.

Бизнес-логика — содержит код PHP для взаимодействия с базой данных. Это позволит нам отделить бизнес-логику от презентации, упрощая поддержку нашего приложения.

Представления — это будет содержать HTML-код. У нас будет две страницы, а именно;

  • мнение.html.php — это будет содержать HTML-код с вопросом и параметрами
  • results.html.php — содержит HTML-код, отображающий результаты опроса

Сделанные предположения

Опрос общественного мнения задаст вопрос —

Какая ваша любимая библиотека JavaScript ?

Ответы будут

  • JQuery
  • MooTools
  • Библиотека YUI
  • пылать

Вот шаги для создания приложения —

Шаг 1) Подключение к базе данных

В этом разделе предполагается, что вы знакомы с MySQL и как его администрировать. Если вы не знакомы с этими MySQL, обратитесь к нашему разделу учебников по SQL .

Наше приложение будет иметь одну таблицу только с 3 полями, а именно;

  • id — автоматически генерировать номер в качестве первичного ключа
  • выбор — число, представляющее кандидата в президенты
  • ts — отметка времени для голосования

Сценарий ниже создает нашу таблицу js_libraries.

<?php
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_error());

        if (!mysqli_select_db($this->db_handle,$this->db)) die("Unable to select database: " . mysqli_error());

    }

    private function execute_query($sql_stmt) {

        $result = mysqli_query($db_handle,$sql_stmt); //execute SQL statement

        return !$result ? FALSE : TRUE;

    }

    public function select($sql_stmt) {

        $result = mysqli_query($db_handle,$sql_stmt);

        if (!$result) die("Database access failed: " . mysqli_error());

        $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 (…)» — это метод для выполнения запросов, таких как вставка, обновление и удаление
  • «Public function select» — это метод для извлечения данных из базы данных и возврата числового массива.
  • «Public function insert (…)» — это метод вставки, который вызывает метод execute_query.
  • Public function __destruct () — деструктор класса, который закрывает соединение с базой данных.

Давайте теперь создадим фронт-контроллер index.php

<?php

require 'opinion_poll_model.php';

$model = new Opinion_poll_model();

if (count($_POST) == 1) {

    echo "<script>alert('You did not vote!');</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,'$ts')";

    $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';

?>

  ВОТ,

  • «Требуется мнение_poll_model.php»; загружает класс бизнес-логики
  • «$ Model = new Opinion_poll_model ();» создает экземпляр класса бизнес-логики
  • «If (count ($ _ POST) == 1)…» выполняет проверку данных и использует JavaScript для отображения окна сообщения, если за кандидата не проголосовали.
  • «If (count ($ _ POST)> 1)…» проверяет, был ли выбран голос путем подсчета количества элементов в массиве $ _POST. Если ни один элемент не был выбран, $ _POST будет содержать только элемент отправки. Если кандидат был выбран, массив $ _POST будет состоять из двух элементов: отправки и голосования. Этот код также используется для вставки новой записи голосования, а затем для отображения страницы результатов.
  • «Выход;» используется для прекращения выполнения скрипта после отображения результатов, чтобы не отображалась форма опроса.
  • «Требовать« мнение.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" />MooToolsl

                <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>

  results.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) Тестирование нашего приложения

Предполагая, что вы сохранили файлы в папке мнение, перейдите по URL-адресу http: // localhost / мнениеpoll /

Создайте приложение для опроса общественного мнения, используя PHP

Если вы нажмете кнопку Ok без выбора библиотеки JS, вы получите следующее окно сообщения.

Создайте приложение для опроса общественного мнения, используя PHP

Выберите библиотеку JS и нажмите кнопку ОК. Вы получите страницу результатов, аналогичную показанной ниже.

Создайте приложение для опроса общественного мнения, используя PHP

Резюме

  • Разделение вашего приложения на бизнес-логику, уровни представления переднего контроллера — это хорошая практика проектирования приложений
  • JavaScript полезен для выполнения проверки на стороне клиента
  • Хорошей практикой программирования является использование file.html.php для файлов, содержащих как HTML, так и PHP коды.
  • Приложение для опроса общественного мнения демонстрирует, как знания, полученные на предыдущих уроках, можно объединить для разработки рабочего приложения с серверной частью базы данных.