Литмир - Электронная Библиотека
A
A

База данных

Теперь необходимо определиться для чего нам нужна база данных (далее БД), с ее системой управления и с тем, что в ней будет храниться. Я выбрал систему управления БД MySQl. Во-первых потому что ранее уже приходилось с ней работать, во-вторых, это самая распространенная на сегодня БД и на нее есть огромное количество справочной информации. Итак: MySQl – система управления реляционными, т.е. представленными в виде таблиц, базами данных (далее СУБД). Что в ней хранить?

В контексте задачи храниться будут:

Комментарии.

Ответы на комментарии.

Данные пользователей.

Данные о странице на которой размещаются комментарии.

Смайлы (без смайлов я комментарии не представляю).

При создании таблиц используем правило: каждый объект должен располагаться в отдельной таблице.

Объекты будут следующие: комментарии, ответы на комментарии, пользователи, права пользователей, смайлы. Еще одна таблица будет связывать права пользователя с данными в других таблицах.

Для хранения комментариев создаем таблицу «say». Таблица будет содержать следующую информацию о комментарии:

id – уникальный номер комментария;

saytext – текст комментария;

userid – идентификатор пользователя;

page_id – идентификатор страницы;

saydate – дата добавления комментария;

Для ответов на комментарии создаем таблицу «reply». Таблица будет содержать следующую информацию.

id – уникальный номер ответа на комментарий;

replytext – текст комментария;

userid – идентификатор пользователя;

replyid – идентификатор комментария;

saydate – дата добавления комментария;

Мне кажется в этих двух таблицах все понятно, вопросов быть не должно.

Для администрирования создаем три таблицы: «users», «authorrole», «role».

Таблица «users», будет содержать следующие данные:

id – уникальный номер пользователя;

login – логин пользователя;

password – пароль пользователя;

email – адрес электронной почты пользователя;

img – адрес расположения аватара пользователя;

activation – проверка активации пользователя;

date – дата регистрации пользователя.

Для идентификации автора комментария, поле «id» таблицы «users» будет в запросах к бд связываться с полем «userid» таблиц «say» и «reply»

Таблица «role» будет содержать следующие данные:

id – роль (права) пользователя;

description – описание прав пользователя;

Таблица «authorrole» – промежуточная и будет содержать следующие данные:

authorid – id пользователя;

roleid – роль (права) пользователя;

Таблица «authorrole» связывает пользователей «users» и их права «role»

Для смайлов создаем таблицу «smiles». Таблица будет содержать следующие данные:

id – id смайла;

smile – условное обозначение смайла;

path – путь к смайлу.

Пишем файл, создающий базу данных и необходимые таблицы. Назовем этот файл «createbase.php» и разместим в папке «admin». Сохраняем в формате php.

Листинг 4. createbase.php Путь: news/admin/createbase.php

<?php

error_reporting(E_ALL);//включаем вывод ошибок

/* 1. Создаем переменные подключения */

$host = "localhost"; /* Имя хоста */

$root = "root"; /* Имя пользователя БД */

$root_password = ""; /* Пароль к БД */

$db = "beseder"; /* название БД */

/* 2. Создаем базу данных */

try {

$dsn = new PDO("mysql:host=$host", $root, $root_password);

$dsn->exec("CREATE DATABASE IF NOT EXISTS `$db` CHARACTER SET utf8 COLLATE utf8_general_ci;");

echo 'База создана (OK!)<br>' . ' Имя БД: ' . '<b>' . $db . '</b>' . '<br> Пользователь: ' . '<b>' . $root . '</b>';

} catch (PDOException $e) {

echo $e->getMessage();

echo $e->getLine();

exit('Ошибка при создании базы');

}

$dsn = null;//обнуляем подключение

/* 3. Формируем запросы для создания таблиц */

try {

$dsn=newPDO("mysql:host=$host;dbname=$db",$root,root_password);//подключаемся к созданной БД

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

/* Нумерация страниц */

$sql_page = "CREATE TABLE IF NOT EXISTS page (

id INT(11) AUTO_INCREMENT PRIMARY KEY NOT NULL,

sayid int(11),

userid int(11),

pageid text

)";

//пользователи

$sql_users = "CREATE TABLE IF NOT EXISTS users (

id int(11) AUTO_INCREMENT PRIMARY KEY NOT NULL,

login VARCHAR(15) NOT NULL,

password VARCHAR(256) NOT NULL,

youtext text NOT NULL,

email text NOT NULL,

img text NOT NULL,

activation int(11),

date int(11)

)";

//роль автора определение

$sql_role = "CREATE TABLE IF NOT EXISTS role (

id VARCHAR(255) NOT NULL PRIMARY KEY,

description VARCHAR(255)

)

DEFAULT CHARACTER SET utf8 ENGINE=InnoDB";

//роль автора id

$sql_authorrole = "CREATE TABLE IF NOT EXISTS authorrole (

authorid INT NOT NULL,

roleid VARCHAR(255) NOT NULL,

PRIMARY KEY (authorid, roleid)

)

DEFAULT CHARACTER SET utf8 ENGINE=InnoDB";

$sql_roledesc = "REPLACE INTO role (id, description) VALUES

('user', 'Контроль своих комментариев'),

('admin', 'Full control'),

('Site Administrator', 'Контроль комментариев')";

$sql_userole = "REPLACE INTO authorrole (authorid, roleid) VALUES

(1, 'admin')";

/* Для комментариев */

$sql_say = "CREATE TABLE IF NOT EXISTS say (

id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

saytext TEXT,

userid int(11),

saydate int(11)

) DEFAULT CHARACTER SET utf8 ENGINE=InnoDB";

/* Для ответов на комментарии */

$sql_reply = "CREATE TABLE IF NOT EXISTS reply (

id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

replytext TEXT,

userid int(11),

replyid int(11),

replydate int(11)

) DEFAULT CHARACTER SET utf8 ENGINE=InnoDB";

/* 4. Создаем таблицы */

$dsn->exec($sql_users);

$dsn->exec($sql_authorrole);

$dsn->exec($sql_role);

$dsn->exec($sql_roledesc);

$dsn->exec($sql_userole);

$dsn->exec($sql_say);

$dsn->exec($sql_page);

$dsn->exec($sql_reply);

} catch (PDOException $e) {

echo $e->getMessage();

}

/* 5. Смайлы */

try {

$sql_smile = "CREATE TABLE IF NOT EXISTS smiles (

id INT(11) AUTO_INCREMENT PRIMARY KEY NOT NULL,

smile text,

path text)";

$dsn->exec($sql_smile);

} catch (PDOException $e) {

echo $e->getMessage();

echo $e->getLine();

exit();

}

$dir = $_SERVER['DOCUMENT_ROOT'].'/chat/say/smiles/';//строим путь к папке smiles

$files1 = preg_grep('~\.(jpeg|jpg|png|gif)$~', scandir($dir));//делаем массив из картинок в папке smiles

5
{"b":"759925","o":1}