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

try {

$dsn=newPDO("mysqclass="underline" 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

try {

$sql = 'INSERT INTO smiles SET

smile = :smile,

path = :path';

$s = $dsn->prepare($sql);

foreach ($files1 as $val) {

$smile = pathinfo($val, PATHINFO_FILENAME); //получаем путь к смайлу

$smile = str_replace($smile, ":$smile:", $smile); //делаем условное обозначение смайла

$path = '/chat/say/smiles/'.$val;//строим наш путь к смайлу

$s->bindValue(':smile', $smile);

$s->bindValue(':path', $path);

$s->execute();

}

} catch (PDOException $e) {

echo $e->getMessage();

echo $e->getLine();

exit();

}

echo '<br>'.'Все таблицы успешно созданы';

В этом файле мы сначала включаем вывод всех сообщений об ошибках кодом: error_reporting(E_ALL). Это необходимо на этапе разработки, чтобы иметь возможность сразу выявлять и обрабатывать ошибки. После отладки всего приложения данную строку необходимо будет или удалить или закомментировать.

Затем подключаемся к СУБД MySQL. Для подключения необходимы следующие параметры:

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

Имя пользователя СУБД: $root = "root";

Пароль к СУБД: $root_password = "";

Для подключения к БД:

Название БД: $db = "beseder",

Первые три значения по умолчанию. На реальном сайте предоставляются «хостером». Четвертый параметр это название для создаваемой новой базы данных. В ней будут хранится комментарии, ее название придумывается самостоятельно. У меня БД названа «beseder».

Далее подключаемся к СУБД MySQL при помощи PDO (PHP Data Objects), PDO определяет интерфейс для доступа к базам данных в PHP[manual]. Подключение выполняется согласно мануала PDO с явным перехватом ошибок в блоке catch[7].

Внимание! далее все подключения к бд будут выполнятся только с использованием блоков try и Catch

При успешном создании БД выводится сообщение: 'База создана (OK!)Имя базы $db’. После создания базы закрываем подключение.

Снова открываем подключение, но теперь коннектимся не к СУБД, а к созданной БД. Создаем и затем выполняем SQL запросы на создание таблиц.

Типы полей для хранения данных принимаем следующие:

– для чисел «int»;

– для текста «text»;

– для коротких строк «varchar».

Смайлы, выделены в отдельный блок. Принцип работы следующий, проверяем папку «smiles» на наличие картинок:

$files1 = preg_grep('~\.(jpeg|jpg|png|gif)$~', scandir($dir));

где preg_grep возвращает массив, состоящий из элементов входящего массива, которые соответствуют заданному шаблону, в данном случае из папки «smiles» возвращаются только «картинки».

Создаем в цикле условные обозначения для смайлов:

$smile = pathinfo($val, PATHINFO_FILENAME);

$smile = str_replace($smile, ":$smile:", $smile);

где pathinfo – возвращает информацию о пути к файлу,

str_replace (что меняем, на что меняем, где меняем) – заменяет все вхождения строки поиска на строку замены;

и строим пути к картинкам:

$path = '/say/smile/'.$val;

При успешном завершении кода выводим сообщение:

полную версию книги