Настройка базы данных
И так, виртуальный сервер запущен, на нём есть доступ к вымышленному сайту, пустая база данных создана.
В пустой корневой папке сайта, создайте папку install. В ней мы создадим небольшой скрипт, который сделает подключение к базе данных, если оно будет успешным, то создадим таблицы для регистрации пользователей, хранение контента и т.д. Добавим Вас как пользователя с правами Администратора и запишем файлы в корневую папку которые будут содержать данные – один с параметрами для подключения к БД, а другой с конфигурацией сайта.
В этой папке создадим файл index.html с следующим содержанием.
<?php header('Content-type: text/html; charset=utf-8')?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
</head>
<body>
<h1>Подключение к БД</h1>
<h2>Сайт</h2>
<form action="connect.php" method="post">
<p>
<input type="text" name="url" placeholder="url сайта">
</p>
<p>
<input type="text" name="year" placeholder="год создания">
</p>
<h2>БД</h2>
<p>
<input type="text" name="server" placeholder="Сервер">
</p>
<p>
<input type="text" name="name" placeholder="имя базы">
</p>
<p>
<input type="text" name="login" placeholder="логин">
</p>
<p>
<input type="text" name="password" placeholder="пароль">
</p>
<h2>Администратор</h2>
<p>
<input type="text" name="log" placeholder="логин">
</p>
<p>
<input type="text" name="pass" placeholder="пароль">
</p>
<p>
<input type="text" name="email" placeholder="почта">
</p>
<p>
<input type="checkbox" name="tabl" checked> Создать таблицы
</p>
<button type="submit">Готово</button>
</form>
</body>
</html>
Это обычная html - страница, так как мы её будем использовать один раз, я не стал заморачиваться с дизайном.
На ней расположен элемент <form> который собирает необходимые данные.
url сайта - надо ввести полный адрес сайта с http:// или https://.
год создания - будет отображаться в футере, например 2020-2024.
Сервер - адрес сервера. Обычно MySQL находится на том же сервере что и сайт, тогда можно прописать localhost.
имя базы, логин, пароль - данные для доступа к БД.
логин, пароль, почта - данные администратора.
Если база данных имеет таблицы и нужно просто создать подключение к ней, снимите флажок Создать таблицы.
В этой же папке создадим файл connect.php с следующим содержанием.
<?php
// Подключение к БД
$connection = @mysqli_connect($_POST['server'], $_POST['login'], $_POST['password'], $_POST['name']);
mysqli_set_charset ( $connection , "utf8" );
if (!$connection) {
$text ="no_mysql";
exit();
}else{
//записываем файл доступа к БД
$text = "<?php
if(!defined(\$config['unicod'])){ die('attemp hacking');}
\$dbsettings = Array(
'server' => '".$_POST['server']."',
'user' => '".$_POST['login']."',
'pass' => '".$_POST['password']."',
'name' => '".$_POST['name']."');
?>
";
$filename ="../db.php";
file_put_contents($filename, $text);
//записываем файл для сайта
$text = "<?php
if(!defined(\$config['unicod'])){ die('attemp hacking');}
\$conf = Array(
'url' => '".$_POST['url']."',
'year' => '".$_POST['year']."',
'no_user_comment' => 'yes');
?>
";
$filename = "../config.php";
file_put_contents($filename, $text);
if(@$_POST['tabl']) {
//создаём таблицы
$Table = "CREATE TABLE `Users` ( ";
$Table .= " `id` int(9) NOT NULL auto_increment,";
$Table .= " `Login` text NOT NULL,";
$Table .= " `Password` text NOT NULL,";
$Table .= " `Email` text NOT NULL,";
$Table .= " `Rang` text NOT NULL,";
$Table .= " `UniId` text NOT NULL,";
$Table .= "PRIMARY KEY (`id`) ";
$Table .= ") ENGINE=MyISAM CHARSET=utf8 ;";
mysqli_query($connection,$Table) or die("MySQL Error: ".mysql_error()."");
$Table = "CREATE TABLE `Content` ( ";
$Table .= " `id` int(9) NOT NULL auto_increment,";
$Table .= " `Name` text NOT NULL,";
$Table .= " `Date` int(12) NOT NULL,";
$Table .= " `Url` text NOT NULL,";
$Table .= " `Announcement` text NOT NULL,";
$Table .= " `Impressions` int(9) NOT NULL,";
$Table .= " `Comment` text NOT NULL,";
$Table .= " `Image` text NOT NULL,";
$Table .= " `Title` text NOT NULL,";
$Table .= " `H1` text NOT NULL,";
$Table .= " `Description` text NOT NULL,";
$Table .= " `Login` text NOT NULL,";
$Table .= " `Text` text NOT NULL,";
$Table .= "PRIMARY KEY (`id`) ";
$Table .= ") ENGINE=MyISAM CHARSET=utf8 ;";
mysqli_query($connection,$Table) or die("MySQL Error: ".mysql_error()."");
$Table = "CREATE TABLE `Comments` ( ";
$Table .= " `id` int(9) NOT NULL auto_increment,";
$Table .= " `Url` text NOT NULL,";
$Table .= " `Name` text NOT NULL,";
$Table .= " `Text` text NOT NULL,";
$Table .= " `Date` int(12) NOT NULL,";
$Table .= " `Estimation` int(6) NOT NULL,";
$Table .= " `Login` text NOT NULL,";
$Table .= "PRIMARY KEY (`id`) ";
$Table .= ") ENGINE=MyISAM CHARSET=utf8 ;";
mysqli_query($connection,$Table) or die("MySQL Error: ".mysql_error()."");
$Table = "CREATE TABLE `Rang` ( ";
$Table .= " `id` int(9) NOT NULL auto_increment,";
$Table .= " `tag` text NOT NULL,";
$Table .= " `name` text NOT NULL,";
$Table .= " `add_comment` text NOT NULL,";
$Table .= " `add_comment_moderator` text NOT NULL,";
$Table .= " `moderator_comment` text NOT NULL,";
$Table .= " `add_content` text NOT NULL,";
$Table .= " `add_content_moderator` text NOT NULL,";
$Table .= " `moderator_content` text NOT NULL,";
$Table .= "PRIMARY KEY (`id`) ";
$Table .= ") ENGINE=MyISAM CHARSET=utf8 ;";
mysqli_query($connection,$Table) or die("MySQL Error: ".mysql_error()."");
//подключаем файл с функцией генерации случайной строки
include "../function.php";
//добавляем администратора
$Table = "INSERT INTO Users SET";
$Table .= " Login='".\$_POST['log']."',";
$Table .= " Password='".md5($_POST['pass'])."',";
$Table .= " Email='".\$_POST['email']."',";
$Table .= " UniId='".generateCode(6)."',";
$Table .= " Rang='Administrator'";
mysqli_query($connection,$Table) or die("MySQL Error: ".mysql_error()."");
//Добавляем ранг Administrator
$Table = "INSERT INTO Rang SET";
$Table .= " tag='Administrator',";
$Table .= " name='Админ',";
$Table .= " add_comment='yes',";
$Table .= " add_comment_moderator='no',";
$Table .= " moderator_comment='yes',";
$Table .= " add_content='yes',";
$Table .= " add_content_moderator='no',";
$Table .= " moderator_content='yes'";
mysqli_query($connection,$Table) or die("MySQL Error: ".mysql_error()."");
//Добавляем ранг зарегистрированного пользователя
$Table = "INSERT INTO Rang SET";
$Table .= " tag='User',";
$Table .= " name='Пользователь',";
$Table .= " add_comment='yes',";
$Table .= " add_comment_moderator='no',";
$Table .= " moderator_comment='no',";
$Table .= " add_content='no',";
$Table .= " add_content_moderator='no',";
$Table .= " moderator_content='no'";
mysqli_query($connection,$Table) or die("MySQL Error: ".mysql_error()."");
}
$text="OK!";
}
echo $text; exit();
?>
С начала мы подключаемся к базе данных с помощью полученных данных из <form>.
При успешном подключении записываем файлы, в корневую папку сайта, db.php - содержит информацию БД, config.php - информация сайта.
Если флажок на создание таблиц не снят, то создаём их.
Таблицы
Users
Зарегистрированные пользователи
Login - логин пользователя.
Password - пароль.
Email - электронная почта.
Rang - ранг пользователя, для ограниченого доступа к функциям сайта.
UniId - уникальный индефикатор для куков и сессий.
Content
Здесь будет храниться контент сайта.
Name - название страницы.
Date - дата создания.
Url - местонахождение страницы.
Announcement - анонс в новостной ленте.
Impressions - кол-во просмотров.
Image - url картинки для анонса и главного изображения на странице.
Title - Title для поисковиков.
H1 - заголовок контента.
Description - Description для поисковиков.
Login - автор контента.
Text - содержание контента.
Comments
Комментарии к контенту.
Url - страница к которой принадлежит комментарий.
Date - дата создания.
Name - название страницы.
Estimation - оценка пользователем.
Login - автор комментария.
Text - содержание комментария.
Rang
Уровни доступа для различных пользователей, которые предоставляют или запрещают различные функции сайта.
tag - тег ранга.
name - названия ранга.
add_comment - возможность добавить комментарий.
add_comment_moderator - возможность добавить комментарий, но он будет проходить модерацию.
moderator_comment - возможность редактировать и удалять чужие комментарии.
add_content - возможность добавить контент.
add_content_moderator - возможность добавить контент, но он будет проходить модерацию.
moderator_content - возможность редактировать и удалять чужой контент.
Дальше подключается файл function.php который пока ещё не создан. В нём будет функция генерации случайной строки.
Теперь добавляем запись с вашими данными в статусе администратора.
UniId='".generateCode(6)."' - здесь генерируется строка из 6 случайных символов для уникального идентификатора.
Теперь добавляем ранги Administrator и User значение YES и NO означают какие функции сайта доступны. В дальнейшем их можно будет изменять.
Осталось создать файл function.php в корне сайта и записать туда код.
<?php
// Функция для генерации случайной строки
function generateCode($length) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ0123456789";
$code = ""; $clen = strlen($chars) - 1;
while (strlen($code) < $length) {
$code .= $chars[mt_rand(0,$clen)];
}
return $code;}
?>
Теперь осталось запустить (url сайта/install/) скрипт и ввести все данные. Если всё сделано правильно, будет сообщение OK! и тогда можно удалить папку install.