error_reporting(E_ALL);
if (session_id() == '') {
session_start();
}
/* Проверяем наличие базы данных и наличие в ней админа */
try {
$dsn = new PDO('mysql: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('mysql: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» код: