Create Data with DB Facecade, Validation, Old Input (Laravel)

Assalamu'alaikum Wr. Wb

Hello Guys!
Kembali lagi bersama saya Salman Fauzan. Pada kesempatan kali ini, kita masih akan melanjutkan pembahasan kita sebelumnya yaitu mengenai Framework PHP  menggunakan Laravel. Nah, kali ini kita akan membahas tentang Create Data, Validation dan Old Input.



Pada pembahasan sebeluumnya kita telah membahas Read Data, nah kali ini kita akan membahas bagaimana cara untuk Create Data sekaligus memberikan Validation pada sebuah form yang akan kita gunakan beserta Old Input. Nah, bagaiamanakah caranya?

Studi Kasus 1 (Create Data, Validation dan Old Input pada t_kelas)
Langkah pertama, tentu saja kita harus membuat url yang menghubungkan form tampilan awal dengan form untuk menambah datanya.

<a href = " {{ url('/kelas/create') }} "> Tambah Data </a>

URL bertujuan untuk menghubungkan satu form / halaman tertentu dengan form / halaman lainnya. Yang biasanya akan ditambahkan base_url dari project yang kita buat. Contohnya adalah url('kelas/create') maka yang akan muncul pada HTML nya adalah http://localhost/laravel5.7-fresh/public/kelas/create.

Langkah kedua, tambahkan route beberapa route yang akan digunakan pada web.php

Route::get('/kelas', 'KelasController@index');
Route::get('/kelas/create', 'KelasController@create');
Route::post('/kelas', 'KelasController@store');

Setelah membuat beberapa route diatas, maka jangan lupa untuk membuat function pada file Controller yang akan kalian gunakan.

public function create()
{
return view('kelas.form');

}

Function diatas digunakan untuk menghubungkan form utama dengan form Tambah Data. Sehingga ketika kita menekan tombol Tambah Data yang telah diberi URL, maka secara otomatis akan menampilkan form Tambah Data Tersebut. Nah contoh isi dari form Tambah Data tersebut adalah sebagai berikut :



@CSRF
Fitur dari blade, yang sama dengna @csrf_field() yang berfungsi untuk membuat input hidden _token beserta tokennya. Namun untuk menggunakan @csrf ini tidak perlu menggunakan bracket ( {{ }} ) didalam HTML

Setiap request yang memiliki method selain GET yaitu (POST, PUT, PATCH, DELETE), syntax diatas wajib digunakan didalam form sebagai fungsi keamanan.

CSRF (Cross-Site Request Forgery) merupakan bentuk eksploitasi website yang dieksekusi atas wewenang korban, tanpa dikehendakinya. CSRF menipu website melalui request dari user yang dipercaya. Serangan bekerja melalui link atau script pada halaman site yang diakses user.

Tak lupa kita juga harus menambahkan function store yang telah kita definisikan dalam file Controller tadi.

public function store(Request $request)
{
$rule = [
'nama_kelas'=>'required|bail',
'jurusan'=>'required|alpha|min:10',
'lokasi_ruangan'=>'required|alpha',
'nama_walikelas'=>'required|alpha',
];
$this->validate($request, $rule);

$input = $request->all();
unset($input['_token']);
$status = \DB::table('t_siswa')->insert($input);

if ($status) {
return redirect('/kelas')->with('success', 'Data Berhasil Ditambahkan');
} else {
return redirect('/kelas/create')->with('error', 'Data Gagal Ditambahkan');
}

}

Old Input berfungsi ketika apabila data gagal untuk dibuat, hasil inputan sebelumnya tidak akan hilang setelah muncul error message tersebut. Saya juga telah menambahkan beberapa jenis validasi yaitu :

  • Bail : Apabila user melakukan kesalahan, maka perintah selanjutnya tidak akan dijalankan sebelum perintah sebelumnya dibenarkan oleh user
  • Alpha : Inputan harus berupa huruf, ketika kita memasukan selain huruf maka akan muncul error message
  • Require : Data harus diisi dan tidak boleh dikosongkan, apabila data dikosongkan maka akan muncul error message
  • Min : Tidak berbeda dengan Max, validasi min ini akan memerika jumlah character pada suatu data, apabila jumlah character kurang dari yang telah ditetapkan maka akan muncul error message
Untuk lebih jelasnya kalian juga dapat mencarinya di google, dengan keyword Validasi Framework PHP.

Cara Menambahkan Validasi / Error Message

@if(session('error'))
<div class = "alert alert-error">
{{ session('error') }}
</div>
@endif

@if (count($errors) > 0)
<div class = "alert alert-danger">
<strong> Perhatian </strong>
<br/>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>

@endif

Maksud dari codingan diatas adalah, apabila terdapat sebuah error maka secara otomatis sistem akan menghitung berapa banyak jenis error yang dijalankan. Kemudian sistem akan menampilkan error message sebanyak jumlah error yang dijalankan. Hasilnya seperti ini :



Studi Kasus 2 (Analisis BUG yang terdapat dalam Tutorial)
Bug nya adalah dikarena NIS tidak termasuk kedalam Foreign Key dalam database maka ketika kita akan menambahkan data yang sama akan terjadi duplicate. Solusinya adalah dengan menambahkan |unique:t_siswa untuk membuat variable NIS menjadi unique sehingga tidak akan terjadi duplicate

'variable'=>'required|unique:nama_table',

Hasilnya setelah menambahkan codingan diatas adalah sebagai berikut :


Studi Kasus 2 (Implementasikan Function Old pada Radio / Option Button)
Berikut adalah codingan pengimplementasian Function Old pada Radio / Option Button :


Hasilnya adalah sebagai berikut :


Nah, setelah ditambahkan maka isi data yang terdapat dalam Radio / Option Button tidak akan hilang karena telah menggunakan function Old.

Cukup sekian yang dapat saya sampaikan, mohon maaf bila ada kesalahan dalam pengetikan maupun penjelasan. See You Next!

Wassalamu'alaikum Wr. Wb.

Komentar