Выбрать главу

8. Контроллер 1

Как было определено в разделе 2.3 контроллер 1 отвечает за создание базы данных и её администратора. Все необходимые для этого файлы готовы, поэтому пишем код файла, который будет ими управлять.

Контроллер будет размещаться в самом начале страницы сайта до блока <!DOCTYPE>.

Создаем в папке «chat» файл «createbase_controller.php».

Листинг 10. createbase_controller.php Путь: news/chat/ createbase_ controller.php

<?php

error_reporting(E_ALL);

if (session_id() == '') {

session_start();

}

/* Проверяем наличие базы данных и наличие в ней админа */

try {

$dsn = new PDO('mysqclass="underline" host=localhost;dbname=beseder', 'root', '');

$dsn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$dsn->exec('SET NAMES "utf8"');

} catch (PDOException $e) {

/* Мы здесь т.к. базы нет поэтому Создаем базу */

include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/createbase.php';

}

/* Создаем админа */

/* Проверяем передавались ли данные формы на установку админа */

/* Если ДА создаем админа */

if (isset($_POST['action']) and $_POST['action'] == 'start') {

include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/users/createadmin.php';

header('Location:.'); //перегружаемся чтобы убрать $_POST['action']

exit('контроллер 1 очистите кэш');

}

/* проверяем счетчик записей в таблице users */

/* если записи есть выходим, если нет вставляем форму создания админа */

try {

$count = $dsn->query("SELECT count(1) FROM users")->fetchColumn();

if ($count <= 0) {

include_once $_SERVER['DOCUMENT_ROOT']. '/chat/admin/users/form_create_admin.php';

exit('controller 1: Нет админа ');

}

} catch (PDOException $e) {

exit('Ошибка на первом входе в админку controller 1');

}

Здесь основная идея состоит в том, чтобы создавать БД на выбросе исключений в блок «catch» и последующей проверке наличия администратора при помощи счетчика записей.

Логика работы контроллера 1 следующая.

1.Запускаем сессию.

2. Пробуем подключиться к БД «beseder».

Внимание!

Не забываем ввести корректные данные строки подключения

$dsn = new PDO('mysqclass="underline" host=localhost;dbname=beseder', 'root', '');

если они отличаются от установленных по умолчанию.

3. Если БД нет, получаем ошибку и создаем БД в блоке обработки исключений catch при помощи файла createbase.php

4. На этом шаге БД или уже была или только что была создана.

5. Проверяем, передавались ли данные из формы form_create_admin.php

на создание администратора, если передавались, обрабатываем их файлом createadmin.php и создаем запись данных администратора в БД.

6. Проверяем счетчик записей в таблице «users», если счетчик записей больше 1, т.е. в есть пользователи, то выходим. Контроллер выполнил работу. Есть БД и есть админ.

7. Если записи в БД отсутствуют вставляем форму для ввода данных администратора.

form_create_admin.php

заполняем значения и отправляем. Свойство «action» этой формы пустое, поэтому произойдет перезагрузка страницы и контроллер повторит свою работу, но теперь уже точно сработает п.5. и соответственно п.6. Контроллер выполнил работу. Есть БД и есть админ.

Важно! При наличии $_POST['action'] == 'start' контроллер 1 будет каждый раз создавать в таблице «users» дубликаты администратора при перезагрузке страницы, а соответственно появятся ошибки и сайт станет недоступен. Поэтому в последней строке листинга 5. createadmin.php мы обнуляем данные $_POST['action']= ''; и перезагружаем страницу в контроллере header('Location:.');exit();.

Проверяем работу контроллера. Вставляем в файл index.html т.е. главную страницу сайта «news» код:

<?php include_once $_SERVER['DOCUMENT_ROOT'].'/chat/createbase.php'?>

Вставляем в самый верх. Получится:

Листинг 11. Тестируем контроллер 1

<?php include_once $_SERVER['DOCUMENT_ROOT'].'/chat/createbase_controller.php'?>

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>News</title>

</head>

<body>

<p>Значимость этих проблем настолько очевидна, что начало повседневной работы по формированию позиции способствует

подготовке и реализации новых предложений!

<br>

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

внедрения и модернизации модели развития.

<br> Практический опыт показывает, что рамки и место обучения кадров способствует повышению актуальности

соответствующих условий активизации.</p>

</body>

</html>

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

Рис. 14. Вывод формы создания администратора

Появляются сообщения о том, что БД и таблицы созданы и затем выводится форма для задания логина и пароля администратора модуля.

Вводим свой логин и пароль, отправляем. Получается: