1.Открываем Visual Studio Code.



2.Создать папку exam (можно любое название) куда-нибудь , только чтобы в пути не было русских названий пример:(D:\Vs).



3.Нажимаем File, Open Folder и открываем папку exam.



ЧТОБЫ ЗАПУСТИТЬ PHP/COMPOSER
ЗАПУСТИТЬ OPENSERVER ОТ ИМЕНИ АДМИНИСТРАТОРА
ПКМ ПО ФЛАЖКУ
ПРОГРАММЫ
КОНСОЛЬ
cd C:\openserver\modules\php\PHP_8.2
ДЛЯ СОЗДАНИЯ ПРОЕКТА

php composer.phar create-project laravel/laravel C:\Users\u317pc12\Desktop\tet1




ЮЗАЕМ ВМЕСТО composer, php composer.phar



4.Нажимаем Ctrl+Ё (Это открывает терминал) , в терминале прописываем composer create-project Laravel/Laravel exam (это cоздаст проект Ларавел с названием exam(можно любое название)).

ЕСЛИ НЕ РАБОТАЕТ СОЗДАНИЕ И ПИШЕТ ПРО GIT NOT FOUND IN PATH ИЛИ ЧЕТ ТАКОЕ

НАЙДИТЕ В ПАПКЕ ОПЕНСЕРВЕРА
modules/php/php8.2
ФАЙЛ php.ini
НАЙДИТЕ В НЁМ
extension = zip
ЕСЛИ ТАМ СТОИТ ; ПЕРЕД ЭТОЙ СТРОКОЙ, УБЕРИТЕ И ПОПРОБУЙТЕ СНОВА

ЕСЛИ НЕ НАШЛИ extension = zip ТО ДОПИШИТЕ ЭТУ СТРОКУ ПОСЛЕ ДРУГИХ extension =
И ПОПРОБУЙТЕ СНОВА

ЕСЛИ ВСЕ РАВНО НЕ РАБОТАЕТ Я ХЗ

5.После создания проекта пишем n в терминале. (если надо)



6.Нажимаем File, Open Folder и открываем папку exam в exam пример:(D:\Vs\exam\exam).



7.Поменять значения в .env на нужные (не забудь расскоментировать строки, выделяешь строки и жмёшь Ctrl+/) , то есть
DB_CONNECTION=mysql
DB_HOST=127.0.0.1 //айпи на нужный если что поменять
DB_PORT=3306
DB_DATABASE=exam //название бд
DB_USERNAME=root //логин аккаунта
DB_PASSWORD=root //пароль аккаунта



8.Нажимаем Ctrl+Ё , в терминале прописываем composer require laravel/breeze (Это скачает библиотеку breeze).



9.Нажимаем Ctrl+Ё , в терминале прописываем php artisan breeze:install, после в терминале прописываем blade и 2 раза enter(Это выбирает шаблон blade).



10.Открываем xampp/xampp-control запускаем Apache и MySQL или просто Open server от администратора , в phpmyadmin входим логин:root и пароль:root и создаем базу данных с названием exam.


11.В терминале прописываем php artisan migrate (это переносит все таблицы и данные в базу данных exam).



12.@Vite удалить везде с помощью Search (Лупа кароче).(Нужно потому что он ломает blade из за того что интернета нету)



13.Cоздать модель в терминале прописываем php artisan make:model -m ,и в name прописываем provider , в database/migrations новая миграция появилась providers и в этой миграции удаляем ($table->timestamps() , и добавляем
     $table->id("id_provider");
     $table->integer("number_phone");
     $table->string("name");
     $table->string("address");
(Это дает возможность создать таблицу с названием provider и с ее столбцами)



14.Заходим в app/Models/provider.php и прописываем
class provider extends Model
{
    protected $fillable=["number_phone","name","address"];
    public $timestamps=false;
}
($fillable Определяет, какие поля разрешено массово записывать в базу, а $timestamps Отключает автоматические даты: created_at updated_at)



15.В терминале прописываем php artisan migrate(Чтобы наша таблица provider попала в бд)



16.Создать форму Пкм new file в resources\views add_provider.blade.php.и в нем прописываем
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form method="POST" action="{{ "/Provider" }}">
        <input name="number_phone">
          <input name="name">
            <input name="address">
            <button type="submit">Добавить</button>
            @CSRF
            </form>
</body>
</html>
(Это создаст страницу с добавлением данных в таблицу provider)



17. Заходим в routes/web.php здесь прописываем сверху use App\Models\Provider;

снизу
Route::post('/provider', function () {
    Provider::create(request()->all());
});
Route::get('/add_provider', function () {
    return view("add_provider",["providers"=>Provider::all()]);



18.В терминале прописываем php artisan serve(Это запускает локальный сервак кароче можешь видеть свои страницы)
Можешь прописать http://127.0.0.1:8000/add_provider это перебросит на страницу с добавлением данных.



19.Создать форму Пкм new file в resources\views view_provider.blade.php.и в нем прописываем
 <table>
    <tr>
        <th>id_provider</th>
        <th>number_phone</th>
        <th>name</th>
        <th>address</th>
    </tr>
    @foreach ($providers as $provider )
    <tr>
<td>{{ $provider->id_provider }} </td>
<td>{{ $provider->number_phone }} </td>
<td>{{ $provider->name }} </td>
<td>{{ $provider->address }} </td>
<td>
<a href="{{ route("edit", $provider->id_provider) }}">Edit</a>
<form method="POST" action="{{ route("destroy", $provider->id_provider )}}">
@CSRF
@method("delete")
<button type="submit">Delete</button>
</form>
</td>
    </tr>
    @endforeach
</table>
(Это создаст страницу с выводом данных )



20. Создать форму Пкм new file в resources\views edit_provider.blade.php.и в нем прописываем
 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form method="POST" action="{{ route("edit",$provider->id_provider) }}">
         @CSRF
         @method("PUT")
        <input name="number_phone">
        <input name="name">
        <input name="address">
        <button type="submit">Сохранить</button>
    </form>
</body>
</html>
(Это создаст страницу с редактированием данных )



21. В web.php методы создания, методы изменения, удаления
Route::post('/Provider', function () {
    Provider::create(request()->all());
});

Route::get('/providers', function () {
    $providers = Provider::all();
    return view('view_provider', compact('providers'));
});

Route::get('/add_provider', function () {
    return view("add_provider",["providers"=>Provider::all()]);
});

Route::delete('/Destroy/{id_provider}', function ($id) {
    Provider::findOrFail($id)->delete();
})->name("destroy");

Route::get('/edit/{id_provider}', function ($id) {
$provider=Provider::findOrFail($id);
   return view('edit_provider',compact("provider"));
})->name("edit");

Route::put('/edit/{id_provider}', function ($id) {
    $provider=Provider::findOrFail($id);
    $provider->fill(request()->all())->save();
})->name("edit");

ДЛЯ СОЗДАНИЯ ER МОДЕЛИ БД
ЗАЙТИ В phpMyAdmin
ОТКРЫТЬ ДИЗАЙНЕР В БД
СЛЕВА НАЖАТЬ "ЭКСПОРТ СХЕМЫ"
УБРАТЬ ГАЛОЧКУ "СЛОВАРЬ ДАННЫХ"
НАЖАТЬ ЭКСПОРТ, ГОТОВО


ДЛЯ ЛОГИНА ОБЯЗАТЕЛЬНО НАДО ЧТОБЫ BREEZE БЫЛ УСТАНОВЛЕН И ЧТОБЫ В ТАБЛИЦЕ USERS НАЗВАНИЯ ПОЛЕЙ БЫЛИ EMAIL И PASSWORD
ЛИБО МЕНЯЙТЕ САМИ ЧТОБ РАБОТАЛО
ЕЩЁ В .ENV ОБЯЗАТЕЛЬНО ЧТОБ СТОЯЛО ГДЕ нибудь
HASH_VERIFY=false

И ЧТОБЫ В ФАЙЛЕ LOGINREQUEST.PHP (не забывайте что комбинация ctrl+p= поиск файла)
ФУНКЦИЯ AUTHENTICATE БЫЛА БЫ ТАКОЙ!

public function authenticate(): void
{
    $this->ensureIsNotRateLimited();

    $user = \App\Models\User::where('email', $this->input('email'))
                            ->where('password', $this->input('password'))
                            ->first();

    if (! $user) {
        \Illuminate\Support\Facades\RateLimiter::hit($this->throttleKey());

        throw \Illuminate\Validation\ValidationException::withMessages([
            'email' => __('auth.failed'),
        ]);
    }

    \Illuminate\Support\Facades\Auth::login($user, $this->boolean('remember'));
    \Illuminate\Support\Facades\RateLimiter::clear($this->throttleKey());
}



ЧТОБЫ СДЕЛАТЬ РАЗДЕЛЕНИЕ РОЛЕЙ
К ПРИМЕРУ В ВАШЕЙ ТАБЛИЦЕ USERS С КОЛОНКОЙ ROLE
К ПРИМЕРУ ЕСТЬ РОЛЬ "АДМИН" (В ТАБЛИЦЕ ДОЛЖНО БЫТЬ ТАК И НАПИСАНО)
И РОЛЬ "МЕНЕДЖЕР"
ЧТОБЫ ПОКАЗАТЬ ЧТО ЛИБО ТОЛЬКО АДМИНУ В ФАЙЛЕ СТРАНИЦЫ (BLADE.PHP)
ДЕЛАЙТЕ ТАК
@if(auth()->user()->role == "АДМИН")
//тут код который вы хотите ТОЛЬКО админу показать, к примеру
<h2>
только админ
</h2>
<input placeholder="я админ">
@endif

ну и соответвенно должно совпадать 100% буквы и чтоб регистр тоже совпадал.
таким образом делаете к примеру чтобы только админ видел все кнопки, а обычный юзер не видел бы полей поиска к примеру
и т.д.












ДАЛЬШЕ ПРО ИМПОРТ
НЕ ЗАБУДЬТЕ ЧТО СНАЧАЛА СВЯЗИ ПОТОМ ИМПОРТ
ЕСЛИ ЖАЛУЕТСЯ НА FOREIGN KEY(ВНЕШНИЕ КЛЮЧИ) ТО СНАЧАЛА ЗАПОЛНЯЙТЕ ДАННЫЕ В ТАБЛИЦУ, НЕ ТРЕБУЮЩУЮ ВНЕШНИХ КЛЮЧЕЙ, ДАЛЬШЕ В ДРУГИЕ. ПО ЛОГИКЕ ДУМАЙТЕ


В ЭКСЕЛЬ ФАЙЛЕ СДВИНУТЬ ВСЕ КОЛОНКИ НАПРАВО НА 1, В САМУЮ ЛЕВУЮ КОЛОНКУ НАПИСАТЬ ТОЛЬКО АЙДИ И ПРОМОТАТЬ ЦИФРЫ ЧТОБ У КАЖДОГО БЫЛ АЙДИ
РЯД С НАЗВАНИЯМИ КОЛОНОК МОЖНО УБРАТЬ, ГЛАВНОЕ НЕ ЗАПУТАЙТЕСЬ
ДАЛЕЕ НАЖАТЬ СЛЕВА ВВЕРХУ В ЭКСЕЛЕ ФАЙЛ->СОХРАНИТЬ КАК->CSV UTF-8 РАЗДЕЛИТЕЛЬ ЗАПЯТАЯ

В PHPMYADMIN ЗАЙТИ В НУЖНУЮ ТАБЛИЦУ (ДОЛЖНА БЫТЬ ПУСТОЙ И ПОЛЯ ЧТОБ СОВПАДАЛИ ПО КОЛИЧЕСТВУ)
ВКЛАДКА ИМПОРТ
ВЫБРАТЬ .CSV ФАЙЛ ПОЛУЧЕННЫЙ
СНИЗУ ВЫБРАТЬ РАЗДЕЛИТЕЛЬ НЕ ЗАПЯТУЮ А ТОЧКУ С ЗАПЯТОЙ, ЕСЛИ НЕ ПОЛУЧАЕТСЯ.
НИЖНИЙ ТУМБЛЕР ВКЛЮЧИТЬ, ЕСЛИ ЧТО-ТО НЕ ПОЛУЧАЕТСЯ.
ВЕРХНИЙ ТУМБЛЕР ТОЖЕ ВКЛЮЧИТЬ, ЕСЛИ НЕ ПОЛУЧАЕТСЯ. ПО РАЗНОМУ ПОПРОБУЙТЕ.












Вариант 1 (рекомендуемый): Excel → CSV → phpMyAdmin
1) Подготовьте файл в Excel
Откройте файл .xlsx.
Убедитесь, что:
первая строка — заголовки (имена колонок) или, наоборот, их нет (важно знать).
нет “смешанных” типов в одном столбце (например, числа и текст).
Файл → Сохранить как → CSV UTF-8 (разделители — запятые)
Если нет “CSV UTF-8”, сохраните как обычный CSV, но лучше потом убедиться в кодировке.
Часто в русской Windows Excel сохраняет CSV с разделителем ; (точка с запятой). Это нормально — просто потом укажете разделитель в phpMyAdmin.

2) Создайте таблицу в MySQL (если её ещё нет)
В phpMyAdmin:

http://localhost/phpmyadmin
Выберите базу → Создать таблицу.
Создайте поля (колонки) под ваш файл.
Совет по типам:

INT / BIGINT для целых
DECIMAL(10,2) для денег
DATE для дат (лучше формат YYYY-MM-DD)
VARCHAR(255) для строк
TEXT для длинного текста
Если не хотите вручную подбирать типы — можно создать все поля как VARCHAR(255), импортировать, а потом привести типы (но это менее аккуратно).

3) Импортируйте CSV в таблицу
В phpMyAdmin откройте нужную таблицу.
Вкладка Импорт.
Выберите файл .csv.
В блоке настроек (важно):
Формат: CSV
Разделитель полей: ; или , (как у вас в CSV)
Разделитель строк: \n (обычно по умолчанию)
Ограничитель полей (в кавычках): "
Кодировка файла: UTF-8 (если сохраняли “CSV UTF-8”)
Опция “Первая строка содержит имена полей” (если есть) — включите/выключите по ситуации
Нажмите Вперёд (Go).
Вариант 2: Сначала импорт в “сырой” вид (все поля TEXT), потом привести к нормальным типам
Если данные “грязные” (даты как текст, числа с пробелами, “1 234,56” и т.п.), проще:

Создать таблицу, где все колонки TEXT/VARCHAR.
Импортировать CSV.
Потом SQL-запросами чистить и конвертировать в нужные типы.
Частые проблемы (и решения)
1) “Кракозябры” (неправильная кодировка)
Сохраняйте как CSV UTF-8.
В phpMyAdmin при импорте укажите кодировку UTF-8.
Проверьте, что таблица/база в utf8mb4.
2) Даты “не импортируются” или становятся NULL
MySQL лучше всего понимает:

YYYY-MM-DD (для DATE)
YYYY-MM-DD HH:MM:SS (для DATETIME)
В Excel перед сохранением CSV:

задайте формат столбца даты как ГГГГ-ММ-ДД (или сформируйте отдельной формулой).
3) Разделитель десятичных “запятая”, а MySQL ждёт точку
Пример: 12,34 → MySQL числом не станет.

Либо в Excel заменить , на . в нужных колонках,
либо импортировать как текст и потом конвертировать.
4) Разделитель колонок не угадали (; vs ,)
Если после импорта всё попало в одну колонку — вы выбрали неверный разделитель.
