Войдите для возможности подписаться
Подписчики
0
В теме 1 сообщение
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователя
Войдите для возможности подписаться
Подписчики
0
-
Последние посетители 0 пользователей онлайн
Ни одного зарегистрированного пользователя не просматривает данную страницу
-
Похожий контент
-
От AndreyMarkelov
Laravel — это современный PHP-фреймворк, который позволяет быстро и эффективно создавать веб-приложения. Его мощные инструменты и простая структура делают его идеальным выбором для разработки личного кабинета для вашего SAMP сервера. В этой статье мы создадим авторизацию для личного кабинета, которая будет работать с существующей базой данных SAMP сервера.
Мы настроим три страницы:
1. Главная: / — основная страница сайта.
2. Авторизация: /auth — форма для ввода никнейма и пароля.
3. Личный кабинет: /profile — страница с информацией об игроке после авторизации.
Для начала давайте установим Laravel и подготовим базовое окружение.
Установка Laravel
1. Убедитесь, что ваш компьютер соответствует системным требованиям Laravel:
PHP версии 8.2 или выше Composer (менеджер зависимостей PHP)
2. Скачайте Laravel с помощью Composer
Откройте терминал и выполните следующую команду, чтобы создать новый проект Laravel: composer create-project laravel/laravel samp
Здесь samp — это название папки для проекта. Вы можете указать свое.
3. Перейдите в папку проекта: cd samp
4. Настройте подключение к базе данных.
Laravel использует файл .env для хранения конфигурации. Найдите строки, отвечающие за подключение к базе данных, и укажите данные вашей SAMP базы:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=название_базы DB_USERNAME=имя_пользователя DB_PASSWORD=пароль
5. Запустите встроенный сервер разработки Laravel: php artisan serve
После запуска вы увидите сообщение, что сервер работает, например, на 127.0.0.1:8000. Перейдите по этой ссылке в браузере.
Настройка роутов
Откройте файл routes/web.php, который отвечает за определение роутов вашего сайта. Добавим туда наши роуты:
<?php use Illuminate\Support\Facades\Route; // Главная страница Route::get('/', function () { return view('welcome'); // Страница для главной }); // Страница авторизации Route::get('/auth', function () { return view('auth'); // Отдельный шаблон для авторизации }); // Личный кабинет Route::get('/profile', function () { return view('profile'); // Страница для личного кабинета });
Для каждого роута нам понадобятся базовые HTML-шаблоны. Создадим их в папке resources/views:
1. Главная страница. Создайте файл resources/views/welcome.blade.php:
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Главная</title> </head> <body> <h1>Добро пожаловать на ваш сайт!</h1> <a href="/auth">Войти</a> </body> </html>
2. Страница авторизации. Создайте файл resources/views/auth.blade.php:
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Авторизация</title> </head> <body> <h1>Вход в личный кабинет</h1> <form action="/auth" method="POST"> @csrf <label for="nickname">Ник:</label> <input type="text" id="nickname" data-cke-saved-name="nickname" name="nickname" required> <br> <label for="password">Пароль:</label> <input type="password" id="password" data-cke-saved-name="password" name="password" required> <br> <button type="submit">Войти</button> </form> </body> </html>
3. Личный кабинет. Создайте файл resources/views/profile.blade.php:
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Личный кабинет</title> </head> <body> <h1>Добро пожаловать в личный кабинет!</h1> <p>Здесь будет отображаться информация о вашем аккаунте.</p> <a href="/">Вернуться на главную</a> </body> </html>
Тестирование роутов. Теперь вы можете проверить роуты в браузере:
Перейдите на 127.0.0.1:8000 — главная страница. Нажмите "Войти" и перейдите на 127.0.0.1:8000/auth — страница авторизации. Для /profile пока просто введите 127.0.0.1:8000/profile в адресной строке. Позже мы защитим эту страницу.
Миграции
Миграции в Laravel позволяют выполнять определённые действия с базой данных, такие как создание таблиц, добавление, изменение или удаление колонок. Все манипуляции с базой данных происходят через миграции, что делает процесс удобным и структурированным.
Вот несколько основных команд для работы с миграциями:
Создание таблицы: php artisan make:migration create_news_table
Проверка статуса миграций: php artisan migrate:status
Откат последней миграции: php artisan migrate:rollback
Откройте файл database/migrations/create_users_table.php. Если такого файла нет, создайте его с помощью команды в терминале: php artisan make:migration create_users_table
Откройте файл и добавьте следующую структуру таблицы в метод up:
Schema::create('users', function (Blueprint $table) { $table->id(); // Автоматический ID $table->string('nickname')->unique(); // Уникальный никнейм пользователя $table->string('email')->unique(); // Уникальный email $table->timestamp('email_verified_at')->nullable(); // Подтверждения email $table->unsignedBigInteger('player_money')->default(0); // Деньги пользователя $table->unsignedBigInteger('player_donate')->default(0); // Донат пользователя $table->unsignedInteger('player_skin')->default(0); // ID скина $table->string('password'); // Пароль $table->rememberToken(); // Токен для "запомнить меня" $table->timestamps(); // created_at и updated_at });
После того как вы добавили необходимые поля в файл миграции, выполните следующую команду: php artisan migrate.
По завершении выполнения команды таблица будет создана. Вы можете открыть phpMyAdmin или любой другой инструмент для работы с базой данных и убедиться, что таблица появилась с нужными полями.
Настройка модели
Если у вас таблица называется accounts, то в Laravel рекомендуется создать модель с именем Account, чтобы придерживаться стандартов. Laravel автоматически связывает название модели во множественном числе с таблицей, если это возможно. Например:
Модель Account по умолчанию будет связана с таблицей accounts. Модель Player будет связана с таблицей players. Если ваше название модели совпадает с названием таблицы (во множественном числе), дополнительных настроек не требуется. Однако, если название отличается, нужно будет явно указать таблицу в модели: protected $table = 'my_users';
Если ваша таблица называется accounts — создайте модель Account: php artisan make:model Account
Если ваша таблица называется users — откройте файл app/Models/User.php и добавьте все поля в $fillable, которые будут использоваться на сайте:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class User extends Authenticatable { use HasFactory, Notifiable; // Поля, которые будут использоваться на сайте. protected $fillable = [ 'nickname', 'email', 'player_money', 'player_donate', 'player_skin', 'password', ]; // Поля, которые скрываются при сериализации модели. protected $hidden = [ 'password', ]; }
Реализация логики авторизации
1. Создание контроллера. Создадим контроллер для обработки роутов авторизации и личного кабинета. Назовём его AuthController: php artisan make:controller AuthController
2. Реализация методов в контроллере. Откройте файл app/Http/Controllers/AuthController.php и реализуйте методы:
Отображение формы авторизации:
public function showLoginForm() { return view('auth'); }
Обработка авторизации:
public function login(Request $request) { // Валидируем данные $request->validate([ 'nickname' => 'required|string', 'password' => 'required|string', ]); // Получаем никнейм и пароль $nickname = $request->input('nickname'); $password = $request->input('password'); // Хэшируем пароль в MD5 $hashedPassword = md5($password); // Проверяем пользователя в базе данных $user = User::where('nickname', $nickname) ->where('password', $hashedPassword) ->first(); if ($user) { // Сохраняем пользователя в сессии $request->session()->put('user', $user); // Редирект в личный кабинет return redirect()->route('profile'); } // Возвращаем обратно с ошибкой return back()->withErrors(['message' => 'Неверный никнейм или пароль']); }
Если в вашей базе данных пароли хранятся в формате bcrypt:
public function login(Request $request) { // Валидируем данные $request->validate([ 'nickname' => 'required|string', 'password' => 'required|string', ]); // Получаем никнейм и пароль $nickname = $request->input('nickname'); $password = $request->input('password'); // Проверяем пользователя в базе данных $user = User::where('nickname', $nickname)->first(); if ($user && Hash::check($password, $user->password)) { // Сохраняем пользователя в сессии $request->session()->put('user', $user); // Редирект в личный кабинет return redirect()->route('profile'); } // Возвращаем обратно с ошибкой return back()->withErrors(['message' => 'Неверный никнейм или пароль']); }
Личный кабинет:
public function profile(Request $request) { // Проверяем, авторизован ли пользователь $user = $request->session()->get('user'); if (!$user) { return redirect()->route('auth.form')->withErrors(['message' => 'Сначала войдите в систему']); } return view('profile', ['user' => $user]); }
Выход из аккаунта:
public function logout(Request $request) { // Удаляем данные из сессии $request->session()->forget('user'); return redirect('/'); }
AuthController.php:
3. Настройка роутов. Обновим routes/web.php, чтобы все роуты ссылались на методы контроллера:
<?php use App\Http\Controllers\AuthController; use Illuminate\Support\Facades\Route; // Главная страница Route::get('/', function () { return view('welcome'); }); // Авторизация Route::get('/auth', [AuthController::class, 'showLoginForm'])->name('auth.form'); Route::post('/auth', [AuthController::class, 'login'])->name('auth.login'); // Личный кабинет Route::get('/profile', [AuthController::class, 'profile'])->name('profile'); // Выход Route::get('/logout', [AuthController::class, 'logout'])->name('auth.logout');
Обновление шаблонов
Чтобы пользователи видели сообщения об ошибках, добавим их в шаблон авторизации resources/views/auth.blade.php:
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Авторизация</title> </head> <body> @if ($errors->any()) <div style="color: red;"> @foreach ($errors->all() as $error) <p>{{ $error }}</p> @endforeach </div> @endif <h1>Вход в личный кабинет</h1> <form action="/auth" method="POST"> @csrf <label for="nickname">Ник:</label> <input type="text" id="nickname" data-cke-saved-name="nickname" name="nickname" required> <br> <label for="password">Пароль:</label> <input type="password" id="password" data-cke-saved-name="password" name="password" required> <br> <button type="submit">Войти</button> </form> </body> </html>
Отображение данных пользователя в личном кабинете. В файле resources/views/profile.blade.php выведем данные из базы:
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Личный кабинет</title> </head> <body> <h1>Добро пожаловать, {{ $user->nickname }}!</h1> <p>Ваш email: {{ $user->email }}</p> <p>Игровой баланс: {{ $user->player_money }}</p> <p>ID скина: {{ $user->player_skin }}</p> <p>Донат счет: {{ $user->player_donate }}</p> <a href="/">Вернуться на главную</a> </body> </html>
Скриншот:
Дополнительно про Blade:
В принципе, это базовая и максимально простая настройка авторизации. Вам остается только добавить собственную вёрстку. Также рекомендую использовать Middleware для защиты роутов, например, роута личного кабинета. Надеюсь, у вас всё получилось! Желаю успешной и продуктивной разработки ваших проектов!
Готовый сайт для SAMP проекта: https://pawno-rus.ru/topic/8225-gotovyy-sayt-dlya-samp-proekta/
-
От Andrey Markelov
Описание
Готовый сайт для SAMP-проекта, разработанный на PHP-фреймворке Laravel. Проект полностью готов к запуску и включает следующие функции: раздел новостей, авторизация в личный кабинет, восстановление пароля, система донатов, история платежей, карта сервера, смена пароля. Сложный функционал намеренно не добавлялся, чтобы облегчить процесс изучения структуры проекта и работы с ним. Все реализовано максимально просто, чтобы новички могли быстро разобраться, где что находится. База данных содержит минимальный набор информации, поскольку у каждого SAMP-проекта своя уникальная структура и функционал. Это позволяет вам легко адаптировать сайт под ваш проект. Например, в личном кабинете вы самостоятельно можете подставить необходимые данные для отображения информации об аккаунте пользователя. Сайт также включает административную панель. Для доступа к админке перейдите по адресу /admin. Если вы уже авторизованы как администратор, система перенаправит вас на главную страницу админки. В противном случае откроется страница авторизации. Важно отметить, что авторизация в личном кабинете и в административной панели — это две разные системы, которые между собой не связаны. Проект создан с упором на простоту и функциональность, что делает его отличным стартовым решением для вашего SAMP-проекта.
Структура страниц
Публичный сайт
1. Главная страница (/)
Стандартная страница с базовой информацией о вашем проекте. Здесь размещены инструкции по началу игры, новости и контакты. Если в базе данных отсутствуют новости, блок с ними отображаться не будет — для отображения требуется как минимум одна новость.
2. Новости (/news)
Раздел, где отображаются все ваши новости. Используется пагинация: на одной странице выводится по 10 записей.
3. О нас (/company/about)
Раздел с более детальной информацией о вашем проекте.
4. Пользовательское соглашение (/company/user-agreement)
Раздел с текстом пользовательского соглашения.
5. Политика обработки персональных данных (/company/privacy-policy)
Страница, где размещена информация о политике обработки персональных данных.
Профиль игрока
1. Личный кабинет (/profile)
Страница с общей информацией об аккаунте пользователя.
2. История платежей (/profile/payment-history)
Страница с историей всех платежей пользователя, независимо от их статуса. Используется пагинация: на одной странице отображается 10 записей.
3. Карта сервера (/profile/map)
Мониторинг карты сервера. На данный момент отображаются только дома и бизнесы, а также информация о них. Функционал можно расширить в зависимости от особенностей вашего SAMP-проекта.
4. Настройки (/profile/settings)
Страница с формой для смены пароля. При успешной смене пароля пользователю отправляется уведомление на почту. Функционал также может быть доработан в зависимости от ваших требований.
Админка
1. Главная страница (/admin)
Основная информация для администратора. Сделано минималистично, функционал можно расширить при необходимости.
2. Новости (/admin/news)
Страница для управления новостями. Здесь отображаются все новости, независимо от их статуса. Реализованы кнопки для создания, редактирования и удаления новостей. Для редактирования контента используется QuillJS, что упрощает наполнение текстами. Изображения, добавленные в контент, сохраняются в базу данных в формате base64. Обложки новостей хранятся в каталоге public/storage/news_images. При редактировании или удалении новости ненужные файлы автоматически удаляются.
3. Пользователи (/admin/users)
Страница всех игроков вашего SAMP-проекта. Используется пагинация: на одной странице отображается по 10 записей. Неподтвержденные email-адреса выделяются красным цветом (подтвержденными считаются те, у которых в поле email_verified_at указана дата). На странице редактирования пользователя доступен раздел "Платежи", где выводятся все транзакции игрока, также с пагинацией (по 10 записей на странице).
4. Администраторы (/admin/admins)
Раздел для управления администраторами сайта (не игровыми). Используется пагинация: на одной странице выводится по 10 записей. По умолчанию в проекте существует супер-администратор (Super_Admin), который может создавать новых администраторов. Функционал включает создание, редактирование и удаление администраторов. Супер-админа удалить невозможно. Для разграничения прав администраторов рекомендуется использовать пакет spatie/laravel-permission, позволяющий добавлять роли (например, "модератор", "редактор").
5. Личный кабинет администратора (/admin/profile)
Простая страница с основной информацией о текущем администраторе. При необходимости функционал можно доработать.
Пароль
Насколько мне известно, большинство SAMP-проектов используют формат MD5 для хранения паролей. Однако Laravel и его пакеты для работы с авторизацией не поддерживают MD5 из-за его уязвимости. Поэтому было принято решение написать собственную реализацию авторизации. Функционал авторизации и смены пароля полностью работает с MD5. При этом авторизация в административную панель не использует MD5 и реализована с использованием более безопасных методов. Если в вашем проекте пароли хранятся не в формате MD5, вам потребуется немного изменить логику работы с паролями, чтобы адаптировать проект. Также настоятельно рекомендую добавить двухфакторную аутентификацию, если вы используете MD5 для хранения паролей, чтобы повысить уровень безопасности.
Мои ожидания
Исходя из структуры проекта, я предполагаю, что у вас уже настроена база данных с таблицами: users (пользователи — игроки), businesses (бизнесы), houses (дома).
Таблица users:
username — игровой ник;
password — пароль;
email — игровая почта;
p_level — уровень;
p_skin — ID скина;
p_money — игровая валюта;
p_donate — донат-счет;
email_verified_at — дата подтверждения почты;
created_at — дата создания аккаунта;
updated_at — дата последнего обновления записи (обновляется автоматически).
Таблицы houses и businesses:
name — название;
description — описание;
price — государственная стоимость;
entrance_x — координата входа по оси X;
entrance_y — координата входа по оси Y;
entrance_z — координата входа по оси Z;
user_id — ID игрока, которому принадлежит дом или бизнес.
Для карты в личном кабинете используются координаты X и Y. Если в вашей базе данных эти поля называются иначе, не забудьте внести изменения в контроллер MapController.php и файл map.blade.php.
Структура проекта
Для работы с проектом рекомендую использовать IDE PhpStorm. Вы можете навести курсор на любой метод, нажать Ctrl, чтобы перейти к его реализации, и таким образом разобраться, где и как вызывается код.
Основные файлы и директории
routes/web.php Здесь находятся роуты для публичной части сайта. Для каждой страницы и её логики создан отдельный роут.
routes/admin.php Этот файл содержит роуты, относящиеся к админке.
Проект построен по принципу MVC (Model-View-Controller):
Model — работа с базой данных.
View — представления (HTML-шаблоны).
Controller — логика, например, извлечение данных из базы и передача их в представления.
app/Models В этой папке находятся модели, которые представляют таблицы базы данных. Например, app/Models/User связана с таблицей users.
resources/views Здесь хранится вся верстка сайта, включая шаблоны административной панели. В любом шаблоне вам будут доступны две переменные: $serverName и $serverIP.
app/Http/Controllers Содержит контроллеры. Для каждой части логики создается отдельный контроллер. Также есть папка Admin, где находятся контроллеры, относящиеся к админке.
Middleware
В проекте используются два Middleware:
AuthenticateUser — проверяет авторизацию пользователя. Например, чтобы открыть страницу личного кабинета, используется этот Middleware. Если пользователь не авторизован, доступ к странице будет закрыт.
AuthenticateAdmin — отвечает за авторизацию в админке. Например, для создания новости или входа в административную панель.
В роутах они называются auth.user и auth.admin.
Работа с базой данных
database/seeders — Здесь находятся сидеры, которые используются для заполнения базы данных. Например, для разработки или тестирования можно заполнить таблицы фейковыми данными с помощью пакета fakerphp/faker.
На данный момент в проекте есть три сидера: для домов, бизнесов и создания супер-администратора. По умолчанию используется DatabaseSeeder.
Команды для работы с сидерами:
Запуск всех сидеров: php artisan db:seed.
Запуск конкретного сидера: php artisan db:seed --class=UserSeeder.
database/migrations — Важная часть проекта. Все манипуляции с базой данных (создание, изменение, удаление таблиц) выполняются через миграции. Миграции можно отслеживать, откатывать и проверять их статус.
Основные команды:
Создание миграции: php artisan make:migration create_users_table.
Применение миграции: php artisan migrate.
Откат миграции: php artisan migrate:rollback (можно указать, сколько миграций откатить).
Просмотр всех доступных команд: php artisan.
Фронтенд
public/assets — В этой директории находятся стили, JavaScript-код и изображения.
resources — Файлы CSS и JS также находятся в этой папке. Если вы изменяете их, обязательно выполните сборку проекта командой: npm run build
Донат
Платежных систем достаточно, и каждый может выбрать подходящую по своему усмотрению. Однако в данном проекте не реализован полный функционал оплаты. Есть таблица с оплатами, в админке отображается статистика, а у пользователя — история платежей, но сам процесс оплаты не предусмотрен. Я лишь подготовил основу, и вам нужно выбрать платёжную систему и подключить её самостоятельно. В вашем распоряжении будет контроллер ShopController.php, в котором есть метод processPayment. В этом методе вы получаете информацию о пользователе, который совершает донат, сумму и email. Все данные для записи в таблицу о платеже уже есть, и создается запись со статусом waiting. Все возможные статусы можно найти в файле app/Enums/PaymentStatus. После того как платеж будет обработан, вам нужно изменить статус в таблице с waiting на success или error, в зависимости от результата. Если платёж успешен, также необходимо обновить поле p_donate в таблице users.
Пример кода для изменения статуса и обновления данных пользователя:
$payment->update(['status' => 'success']); $user->increment('p_donate', $validated['amount']);
В интернете есть множество статей о том, как подключить платёжные системы, а также существуют специализированные пакеты для Laravel, которые могут упростить этот процесс.
Что нужно для запуска проекта
Для пользователей Linux данная инструкция не требуется, так как предполагается, что вы уже знакомы с процессом настройки.
1. Установите OpenServer или аналогичный инструмент
2. Проверьте версии установленных инструментов, используя команды:
2.1. php -v
2.2. composer -V
3. Установите Node.js. После установки убедитесь, что Node.js и npm работают корректно, выполнив команды:
3.1. node -v
3.2. npm -v
PHP: версия 8.2 или выше. MySQL: у меня 8.0 на момент разработки.
Первые шаги
Скорее всего, вы скачали архив проекта, но инструкция составлена так, будто вы клонировали репозиторий с GitHub.
Рекомендую для начала использовать предоставленные данные проекта, чтобы разобраться в его работе, вместо того чтобы сразу адаптировать вашу базу данных.
1. Создание базы данных.
Создайте пустую базу данных для проекта.
2. Настройка файла .env.
В корневой директории проекта у вас должен быть файл .env. Если его нет, скопируйте файл env.example и переименуйте его, удалив .example:
3. Далее выполните команду: php artisan key:generate
4. Откройте файл .env и настройте его под свои параметры:
APP_URL — Укажите адрес сайта (локально - локальный, на хостинге - ссылка сайта).
SAMP_SERVER_NAME — Название вашего SAMP-проекта.
SAMP_SERVER_IP — IP-адрес вашего SAMP-сервера.
DB_HOST — Хост базы данных.
DB_PORT — Порт базы данных.
DB_DATABASE — Имя базы данных.
DB_USERNAME — Имя пользователя базы данных.
DB_PASSWORD — Пароль для базы данных (оставьте пустым, если не требуется).
SUPER_ADMIN_PASSWORD — Задайте сложный пароль для супер-администратора (требуется минимум 8 символов).
CONTACT_EMAIL — Почта проекта.
Найдите переменную MAIL_MAILER и укажите настройки для вашего почтового сервиса. Без этого отправка писем на почту не будет работать. Для тестирования локально я использовал mailtrap.
5. Установка зависимостей.
Установите зависимости PHP и Node.js:
5.1. composer install
5.2. npm install
6. Очистка кеша.
На всякий случай очистите все кеши:
6.1. php artisan cache:clear
6.2. php artisan route:clear
6.3. php artisan config:clear
6.4. php artisan view:clear
7. Сборка фронтенда.
Соберите проект: npm run build
8. Файловое хранилище.
Чтобы изображения, которые вы загружаете, были видны в шаблонах, используйте команду: php artisan storage:link.
9. Миграции и сидеры.
Выполните миграцию базы данных и запустите сидеры для начального заполнения: php artisan migrate:fresh --seed
10. Запуск проекта.
Для запуска проекта выполните: php artisan serve
Не пугайтесь большого количества шагов на первый взгляд — на самом деле все достаточно просто. Основные действия включают настройку файла .env и установку зависимостей. Это всего лишь первоначальная настройка. В дальнейшем для запуска проекта вам понадобится всего одна команда: php artisan serve
Если все сделано правильно, сайт будет доступен по адресу: 127.0.0.1:8000
Дополнительно:
В архиве предоставлен дамп базы данных, использовавшийся на этапе разработки.
Пароли в таблице users: 123123
Пароли в таблице admins: 12345678
Скачать: https://disk.yandex.by/d/UNdQVj-XATlvzw
Скриншоты:
-
От INewBRO
Хотел записать в базу данные об игроке (пароль, ник и т.д) Но происходит ошибка и оно не записывается. Я написал чтобы ошибки сохранялись в файл. Комментарием отметил где ошибка
Лог:
-