1.Otkryvaem Visual Studio Code.



2.Sozdat papku exam (mozhno lyuboye nazvaniye) kuda-nibud , tolko chtoby v puti ne bylo russkikh nazvaniy primer:(D:\Vs).



3.Naziymaem File, Open Folder i otkryvaem papku exam.



CHTOBY ZAPUSTIT PHP/COMPOSER
ZAPUSTIT OPENSERVER OT IMENI ADMINISTRATORA
PKM PO FLYAZHKU
PROGRAMMY
KONSOL
cd C:\openserver\modules\php\PHP_8.2
DLYA SOZDANIYA PROYEKTA

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




YUZAYEM VMESTO composer, php composer.phar



4.Naziymaem Ctrl+Yo (Eto otkryvaet terminal) , v terminale propisyvaem composer create-project Laravel/Laravel exam (eto sozdast proyekt Laravel s nazvaniyem exam(mozhno lyuboye nazvaniye)).

YESLI NE RABOTAYET SOZDANIYE I PISHET PRO GIT NOT FOUND IN PATH ILI CHET TAKOYE

NAYDITE V PAPKE OPENSERVERA
modules/php/php8.2
FAYL php.ini
NAYDITE V NYOM
extension = zip
YESLI TAM STOIT ; PERED ETOY STROKOY, UBERITE I POPROBUYTE SNOVA

YESLI NE NASHLI extension = zip TO DOPISHITE ETU STROKU POSLE DRUGIKH extension =
I POPROBUYTE SNOVA

YESLI VSE RAVNO NE RABOTAYET YA KHZ

5.Posle sozdaniya proyekta pishim n v terminale. (yesli nado)



6.Naziymaem File, Open Folder i otkryvaem papku exam v exam primer:(D:\Vs\exam\exam).



7.Pomenyat znacheniya v .env na nuzhnye (ne zabud raskommentirovat stroki, vydelyayesh stroki i zhmyosh Ctrl+/) , to yest
DB_CONNECTION=mysql
DB_HOST=127.0.0.1 //aypi na nuzhniy yesli chto pomenyat
DB_PORT=3306
DB_DATABASE=exam //nazvaniye bd
DB_USERNAME=root //login akkaunta
DB_PASSWORD=root //parol akkaunta



8.Naziymaem Ctrl+Yo , v terminale propisyvaem composer require laravel/breeze (Eto skachaet biblioteku breeze).



9.Naziymaem Ctrl+Yo , v terminale propisyvaem php artisan breeze:install, posle v terminale propisyvaem blade i 2 raza enter(Eto vybiraet shablon blade).



10.Otkryvaem xampp/xampp-control zapuskaem Apache i MySQL ili prosto Open server ot administratora , v phpmyadmin vkhodim login:root i parol:root i sozdayom bazu dannykh s nazvaniyem exam.


11.V terminale propisyvaem php artisan migrate (eto perenosit vse tablitsy i dannye v bazu dannykh exam).



12.@Vite udalit vezde s pomoshchyu Search (Lupa karocha).(Nuzhno potomu chto on lomayet blade iz za togo chto interneta netu)



13.Sozdat model v terminale propisyvaem php artisan make:model -m ,i v name propisyvaem provider , v database/migrations novaya migratsiya poyavilas providers i v etoy migratsii udalyaem ($table->timestamps() , i dobavlyaem
     $table->id("id_provider");
     $table->integer("number_phone");
     $table->string("name");
     $table->string("address");
(Eto dayet vozmozhnost sozdat tablitsu s nazvaniyem provider i s eye stolbtsami)



14.Zakhodim v app/Models/provider.php i propisyvaem
class provider extends Model
{
    protected $fillable=["number_phone","name","address"];
    public $timestamps=false;
}
($fillable Opredelyayet, kakiye polya razresheno massovo zapisyvat v bazu, a $timestamps Otklyuchayet avtomaticheskiye daty: created_at updated_at)



15.V terminale propisyvaem php artisan migrate(Chtoby nasha tablitsa provider popala v bd)



16.Sozdat formu Pkm new file v resources\views add_provider.blade.php.i v nyom propisyvaem
<!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">Dobavit</button>
            @CSRF
            </form>
</body>
</html>
(Eto sozdast stranitsu s dobavleniyem dannykh v tablitsu provider)



17. Zakhodim v routes/web.php zdes propisyvaem sverkhu use App\Models\Provider;

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



18.V terminale propisyvaem php artisan serve(Eto zapuskaet lokalnyy servak karocha mozhesh videt svoi stranitsy)
Mozhesh propisat http://127.0.0.1:8000/add_provider eto perebroset na stranitsu s dobavleniyem dannykh.



19.Sozdat formu Pkm new file v resources\views view_provider.blade.php.i v nyom propisyvaem
 <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>
(Eto sozdast stranitsu s vyvodom dannykh )



20. Sozdat formu Pkm new file v resources\views edit_provider.blade.php.i v nyom propisyvaem
 <!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">Sokhranit</button>
    </form>
</body>
</html>
(Eto sozdast stranitsu s redaktirovaniyem dannykh )



21. V web.php metody sozdaniya, metody izmeneniya, udaleniya
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");

DLYA SOZDANIYA ER MODELI BD
ZAYTI V phpMyAdmin
OTKRYT DIZAYNER V BD
SLEVA NAZHAT "EKSPORT SKHEMY"
UBRAT GALOCHKU "SLOVAR DANNYKH"
NAZHAT EKSPORT, GOTOVO


DLYA LOGINA OBYAZATELNO NADO CHTOBY BREEZE BYL USTANOVLEN I CHTOBY V TABLITSE USERS NAZVANIYA POLEY BYLI EMAIL I PASSWORD
LIBO MENYAYTE SAMI CHTOB RABOTALO
YESHCHO V .ENV OBYAZATELNO CHTOB STOYALO GDE nibud
HASH_VERIFY=false

I CHTOBY V FAYLE LOGINREQUEST.PHP (ne zabyvayte chto kombinatsiya ctrl+p= poisk fayla)
FUNKTSIYA AUTHENTICATE BYLA BY TAKOY!

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());
}



CHTOBY SDELAT RAZDELENIYE ROLEY
K PRIMERU V VASHEY TABLITSE USERS S KOLONKOY ROLE
K PRIMERU EST ROL "ADMIN" (V TABLITSE DOLZHNO BYT TAK I NAPISANO)
I ROL "MENEDZHER"
CHTOBY POKAZAT CHTO LIBO TOLKO ADMINU V FAYLE STRANITSY (BLADE.PHP)
DELAYTE TAK
@if(auth()->user()->role == "ADMIN")
//tut kod kotoryy vy khhotite TOLKO adminu pokazat, k primeru
<h2>
tolko admin
</h2>
<input placeholder="ya admin">
@endif

nu i sootvetstvenno dolzhno sovpadat 100% bukvy i chtob registr tozhe sovpadal.
takim obrazom delayte k primeru chtoby tolko admin videl vse knopki, a obychnyy yuzyer ne videl by poley poiska k primeru
i t.d.



DALSHE PRO IMPORT
NE ZABUDTE CHTO SNACHALA SVYAZI POTOM IMPORT
YESLI ZHALUETSYA NA FOREIGN KEY(VNESHNIYE KLYUCHI) TO SNACHALA ZAPOLNYAYTE DANNYE V TABLITSU, NE TREBUYUSHCHUYU VNESHNIKH KLYUCHEY, DALSHE V DRUGIYE. PO LOGIKE DUMAYTE


V EXCEL FAYLE SDVINUT VSE KOLONKI NAPRAVO NA 1, V SAMUYU LEVUYU KOLONKU NAPISAT TOLKO AYDI I PROMATAT TSIFRY CHTOB U KAZHDOGO BYL AYDI
RYAD S NAZVANIYAMI KOLONOK MOZHNO UBRAT, GLAVNOYE NE ZAPUTAYTES
DALEYE NAZHAT SLEVA VVERKHU V EXCEL FAYL->SOKHRANIT KAK->CSV UTF-8 RAZDELITEL ZAPYATAYA

V PHPMYADMIN ZAYTI V NUZHNUYU TABLITSU (DOLZHNA BYT PUSTOY I POLYA CHTOB SOVPADALI PO KOLICHESTVU)
VKLADKA IMPORT
VYBRAT .CSV FAYL POLUCHENNYY
SNIZU VYBRAT RAZDELITEL NE ZAPYATUYU A TOCHKU S ZAPYATOY, YESLI NE POLUCHAETSYA.
NIZHNIY TUMBLER VKLYUCHIT, YESLI CHTO-TO NE POLUCHAETSYA.
VERKHNIY TUMBLER TOZHE VKLYUCHIT, YESLI NE POLUCHAETSYA. PO RAZNOMU POPROBUYTE.




Variant 1 (rekomenduemyy): Excel -> CSV -> phpMyAdmin
1) Podgotovte fayl v Excel
Otkroyte fayl .xlsx.
Ubedites, chto:
pervaya stroka - zagolovki (imena kolonok) ili, naoborot, ikh net (vazhno znat).
net "smeshannykh" tipov v odnom stolbtse (naprimer, chisla i tekst).
Fayl -> Sokhranit kak -> CSV UTF-8 (razdeliteli - zapyatye)
Yesli net "CSV UTF-8", sokhranite kak obychnyy CSV, no luchshe potom ubeditesya v kodirovke.
Chasto v russkoy Windows Excel sokhranyet CSV s razdelitelem ; (tochka s zapyatoy). Eto normalno - prosto potom ukazhete razdelitel v phpMyAdmin.

2) Sozdayte tablitsu v MySQL (yesli yeyo yeshcho net)
V phpMyAdmin:

http://localhost/phpmyadmin
Vyberte bazu -> Sozdat tablitsu.
Sozdayte polya (kolonki) pod vash fayl.
Sovet po tipam:

INT / BIGINT dlya tselykh
DECIMAL(10,2) dlya deneg
DATE dlya dat (luchshe format YYYY-MM-DD)
VARCHAR(255) dlya strok
TEXT dlya dlinnogo teksta
Yesli ne khhotite vruchnuyu podbirat tipy - mozhno sozdat vse polya kak VARCHAR(255), importirovat, a potom privesti tipy (no eto meneye akkuratno).

3) Importiruyte CSV v tablitsu
V phpMyAdmin otkroyte nuzhnuyu tablitsu.
Vkladka Import.
Vyberte fayl .csv.
V bloke nastroyek (vazhno):
Format: CSV
Razdelitel poley: ; ili , (kak u vas v CSV)
Razdelitel strok: \n (obychno po umolchaniyu)
Ogranichitel poley (v kavychkakh): "
Kodirovka fayla: UTF-8 (yesli sokhranali "CSV UTF-8")
Optsiya "Pervaya stroka soderzhit imena poley" (yesli est) - vklyuchite/vyklyuchite po situatsii
Nazhite Vperyod (Go).
Variant 2: Snachala import v "syroy" vid (vse polya TEXT), potom privesti k normalnym tipam
Yesli dannye "gryaznye" (daty kak tekst, chisla s probelami, "1 234,56" i t.p.), proshche:

Sozdat tablitsu, gde vse kolonki TEXT/VARCHAR.
Importirovat CSV.
Potom SQL-zaprosami chistit i konvertirovat v nuzhnye tipy.
Chastye problemy (i resheniya)
1) "Krakozyabry" (nepravilnaya kodirovka)
Sokhranjayte kak CSV UTF-8.
V phpMyAdmin pri importe ukazhite kodirovku UTF-8.
Proverte, chto tablitsa/baza v utf8mb4.
2) Daty "ne importiruyutsya" ili stanovyatsya NULL
MySQL luchshe vsego ponimayet:

YYYY-MM-DD (dlya DATE)
YYYY-MM-DD HH:MM:SS (dlya DATETIME)
V Excel pered sokhraneniyem CSV:

zadayte format stolbtsa daty kak YYYY-MM-DD (ili sformirujte otdelnoy formuloy).
3) Razdelitel desyatichnykh "zapyataya", a MySQL zhdyot tochku
Primer: 12,34 -> MySQL chislom ne stanet.

Libo v Excel zamenit , na . v nuzhnykh kolankakh,
libo importirovat kak tekst i potom konvertirovat.
4) Razdelitel kolonok ne ugadali (; vs ,)
Yesli posle importa vsyo popalo v odnu kolonku - vy vybrali nevernyy razdelitel.
