CRUD Laravel Part 1 (15)

Assalamualaikum temen-temen..

    Heyoo, wasap balik lagi nih di blog mimin, kali ini mimin masih bahas tentang laravel yak, yaitu jeng jeng jeng Membuat data di Laravel (Create Read Update Delete)  nah kali ini mimin akan membahas tentang Create data sadja di Laravel mungkin untuk Read Update Delete nya di part selanjutnya yaa, jadi tunggu aja hehe, oke langsung aja yuk ke materi kuy...
    Kan di pertemuan sebelumnya ya bisa di klik disini, kita telah membuat beberapa tabel diantaranya tabel siswa dan juga kelas, jadi sekarang kita akan membuat create data di tabel siswa caranya yuk simak:
1. Buat link untuk menghubungkan form utama dengan form tambah data
buka file resources/views/belajar.blade.php kemudian tambahkan ini di bawah tulisan data siswa
<a class="btn btn-sm btn-success" href="{{ url('/siswa/create') }}">Tambah Data</a>

2. Ubah Routes
buka file file routes/web.php lalu tambakan
Route::get('/siswa/create','SiswaController@create');

3. Menampilkan view dengan nama form yang terdapat pada folder siswa
buka file app/Http/Controllers/SiswaController.php lalu tambahkan
 //create
    public function create(){
    return view('siswa.form');
    }

4. Membuat form untuk tambah data
buka file resources/views/siswa/form.blade.php jika kalian belum membuat filenya, maka kalian buat saja dahulu kemudian tambahkan
<form action="{{url('/siswa')}}" method="POST">
     @csrf
     <div class="container">
      <h3>Data Siswa</h3>
      <div class="row">
        <div class="col-md-12">
          <strong>NIS :</strong>
          <input type="text" name="nis" class="form-control" placeholder="NIS" value="{{ old('nis') }}">
       </div>
        <div class="col-md-12">
          <strong>Nama Siswa :</strong>
          <input type="text" name="nama_lengkap" class="form-control" placeholder="Nama Siswa" value="{{ old('nama_lengkap') }}">
        </div>
        <div class="col-md-12">
          <strong>Golongan Darah :</strong><br>
          <select name="goldar"class="form-control" >
          <option value="">- Pilih Goldar -</option>
          <option value="A" {{ old('goldar') == 1 ? 'selected' : '' }}>A</option>
          <option value="B" {{ old('goldar') == 2 ? 'selected' : '' }}>B</option>
          <option value="O" {{ old('goldar') == 3 ? 'selected' : '' }}>O</option>
          <option value="AB" {{ old('goldar') == 4 ? 'selected' : '' }}>AB</option>
          </select>
        </div>
        <div class="col-md-12">
    <b><label for="jenkel">Jenis Kelamin :</label></b>
    <div class="radio">
        <label>
            <input type="radio" name="jenkel" id="L" value="L" @if(old('jenkel')) checked @endif>
            Laki-laki
        </label>
    </div>
    <div class="radio">
        <label>
            <input type="radio" name="jenkel" id="P" value="P" @if(!old('jenkel')) checked @endif>
            Perempuan
        </label>
    </div>
</div>
        <div class="col-md-12">
          <button type="submit" class="btn btn-block btn-primary" value="Simpan">Submit</button>
          <a href="{{url('/siswa')}}" class="btn btn-block btn-danger">Back</a>
        </div>
      </div>
    </form>
  </div>
@endsection

Abaikan saja dulu fungsi old nya karena akan di bahas setelah ini.
Nah diatas terdapat sebuah fungsi @csrf yang berfungsi untuk memproteksi Laravel dari serangan yang mengerikan yaitu serangan CSRF, apaan tuh min? CSRF sendiri adalah cross site request forgery, apa maksudnya nih?? Maksudnya adalah csrf ini merupakan salah satu lubang di web app yang bekerja dengan cara mengeksploitasi suatu aksi dan eksploitasi ini memanfaatkan otentikasi milik salah satu user.

5. Tambahkan route POST
buka file routes/web.php lalu tambahkan
Route::post('/siswa','SiswaController@store');

6. Tambahkan fungsi store
buka file app/Http/Controllers/SiswaController.php lalu tambahkan ini dibawah fungsi create
    //store
    public function store(Request $request){
    $rule=[
    'nis' => 'required|numeric|digits:10|unique:t_siswa',
    'nama_lengkap' => 'required|string',
    'jenkel' => 'required',
    'goldar' => 'required',
    ];
    $this->validate($request, $rule);

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

    if($status){
    return redirect('/siswa')->with('success','Data berhasil ditambahkan !!!');
    } else {
    return redirect('/siswa/create')->with('error','Data gagal ditambahkan !!!');
    }
    }
}

7. Cuy coba apakah menyala
 Yup ini dia ternyata berhasil ya gengs, tapi kurang gimana gt kalo gak pake pop up data berhasil/tidak jadi kita tambahin yuk

7. Menambah Feedback Pesan sukses/tidak
buka file resources/views/belajar.blade.php lalu tambahkan
<!--ALERT-->
<div class="container">
  <div class="row">
      @if(session('success'))
      <div class="alert alert-success">
          {{ session ('success') }}
      </div>
      @endif
      @if(session('error'))
      <div class="alert alert-error">
          {{ session ('error') }}
      </div>
      @endif
    </div>
  </div>

Ini dia perubahannya

8. Membuat Validasi Input
buka file app/Http/Controller/SiswaController lalu tambahkan ini di dalam fungsi store
$rule=[
    'nis' => 'required|numeric|digits:10|unique:t_siswa',
    'nama_lengkap' => 'required|string',
    'jenkel' => 'required',
    'goldar' => 'required',
    ];
    $this->validate($request, $rule);

Kemudain buka resources/views/siswa/form.blade.php lalu tambahkan ini
<div class="container">
@if(session('error'))
<div class="alert alert-error">
{{ session('error') }}
</div>
@endif

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

Hasilnya:

9. Terakhir tambahkan fungsi old
Fungsinya ketika form tidak lengkap atau tidak sesuai dengan rules, seharusnya form yang sudah diisi oleh user yang sebelumnya harus tetap muncul
buka file resources/views/siswa/form.blade.php dan tambahkan
 <form action="{{url('/siswa')}}" method="POST">
     @csrf
     <div class="container">
      <h3>Data Siswa</h3>
      <div class="row">
        <div class="col-md-12">
          <strong>NIS :</strong>
          <input type="text" name="nis" class="form-control" placeholder="NIS" value="{{ old('nis') }}">
       </div>
        <div class="col-md-12">
          <strong>Nama Siswa :</strong>
          <input type="text" name="nama_lengkap" class="form-control" placeholder="Nama Siswa" value="{{ old('nama_lengkap') }}">
        </div>
        <div class="col-md-12">
          <strong>Golongan Darah :</strong><br>
          <select name="goldar"class="form-control" >
          <option value="">- Pilih Goldar -</option>
          <option value="A" {{ old('goldar') == 1 ? 'selected' : '' }}>A</option>
          <option value="B" {{ old('goldar') == 2 ? 'selected' : '' }}>B</option>
          <option value="O" {{ old('goldar') == 3 ? 'selected' : '' }}>O</option>
          <option value="AB" {{ old('goldar') == 4 ? 'selected' : '' }}>AB</option>
          </select>
        </div>
        <div class="col-md-12">
    <b><label for="jenkel">Jenis Kelamin :</label></b>
    <div class="radio">
        <label>
            <input type="radio" name="jenkel" id="L" value="L" @if(old('jenkel')) checked @endif>
            Laki-laki
        </label>
    </div>
    <div class="radio">
        <label>
            <input type="radio" name="jenkel" id="P" value="P" @if(!old('jenkel')) checked @endif>
            Perempuan
        </label>
    </div>
</div>
Bentuk umumnya:
<input ……………… value=“{{ old(‘nama_field’) }}” />

Yeay selesai kita lanjut ke studi kasus

Studi kasus 1
Lakukan hal yang sama seperti yang sudah dijelaskan pada slide sebelumnya untuk tabel t_kelas. Buatlah tampilan form untuk menambahkan data kelas.
Implementasikan validasi untuk tabel t_kelas, cobalah beberapa validasi yang berbeda selain yang sudah dijelaskan (tidak boleh validasi numeric, string dan max)

Studi kasus 2
> Mencari bug yang terdapat pd program di atas

Studi kasus 3
> Menambahkan fungsi old pada radio button dan select option

Jawab
Studi kasus 1

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


Isi dari kelas.blade:

@extends('layouts.app')
@section('content')
<!--ALERT-->
<div class="container">
  <div class="row">
      @if(session('success'))
      <div class="alert alert-success">
          {{ session ('success') }}
      </div>
      @endif
      @if(session('error'))
      <div class="alert alert-error">
          {{ session ('error') }}
      </div>
      @endif
    </div>
  </div>

  <div class="container">
    <div class="row">
      <div class="col-md-10">
        <h3>Data Kelas</h3>
      </div>
       <div class="col-sm-2">
        <a class="btn btn-sm btn-success" href="{{ url('/kelas/create') }}">Tambah Data</a>
      </div>
    <table class="table table-bordered table-hover">
      <tr>
        <th width = "50px"><b>No.</b></th>
        <th width = "100px">Kelas</th>
        <th width = "300px">Jurusan</th>
        <th width = "100px">Ruangan</th>
        <th width = "300px">Wali Kelas</th>
        <!--<th width = "200px">Option</th>-->
      </tr>
      @foreach ($kelas as $kelad)
        <tr>
          <td>{{ isset($i) ? ++$i : $i = 1 }}</td>
          <td>{{$kelad->nama_kelas}}</td>
          <td>{{$kelad->jurusan}}</td>
          <td>{{$kelad->lokasi_ruangan}}</td>
          <td>{{$kelad->nama_wali_kelas}}</td>
          <!--<td colspan="3" rowspan="" headers="">
            <a class="btn btn-sm btn-warning">Edit</a>
            <a class="btn btn-sm btn-danger">Hapus</a>
            <a class="btn btn-sm btn-success">Tampilkan</a>
          </td>-->
        </tr>
      @endforeach
    </table>
  </div>
@endsection

Isi dari KelasController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class KelasController extends Controller
{
    //
    public function index()
    {
    $data['kelas'] = \DB::table('t_kelas')
    ->orderBy('nama_kelas')
    //->orderBy('lokasi_ruangan')
    //->where('nama_wali_kelas','like','A%')
    //->orderBy('jurusan','nama_kelas')
    //->where('jurusan','=', 'Audio Video')
    ->get();
    return view('kelas',$data);
    }
    //create
    public function create(){
    return view('kelas.form');
    }
    //store
    public function store(Request $request){
    $rule=[
    'nama_kelas' => 'required|bail',
    'jurusan' => 'required',
    'lokasi_ruangan' => 'required',
    'nama_wali_kelas' => 'required|digits_between:5,30',
    ];
    $this->validate($request, $rule);

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

    if($status){
    return redirect('/kelas')->with('success','Data berhasil ditambahkan !!!');
    } else {
    return redirect('/kelas/create')->with('error','Data gagal ditambahkan !!!');
    }
    }
}

Isi dari form.blade.php kelas
@extends('layouts.app')
@section('content')

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

@if(count($errors) > 0)
<div class="alert alert-danger">
<strong>Warning !!!</strong>
<br>
<ul>
@foreach($errors->all() as $error)
    <li>{{ $error }}</li>
    @endforeach
</ul>
</div>
@endif
</div>
    <form action="{{url('/kelas')}}" method="POST">
     @csrf
     <div class="container">
      <h3>Data Kelas</h3>
        <div class="col-md-12">
          <strong>Kelas :</strong>
          <input type="text" name="nama_kelas" class="form-control" placeholder="Masukan Kelas" value="{{ old('nama_kelas') }}">
        </div>
        <div class="col-md-12">
          <strong>Jurusan :</strong><br>
          <select name="jurusan"class="form-control" >
            <option value="">- Pilih Jurusan -</option>
            <option value="Audio Video" {{ old('jurusan') == 1 ? 'selected' : '' }}>Audio Video</option>
            <option value="Teknik Instalasi Tenaga Listrik" {{ old('jurusan') == 2 ? 'selected' : '' }}>Teknik Instalasi Tenaga Listrik</option>
            <option value="Teknik Otomasi Industri" {{ old('jurusan') == 3 ? 'selected' : '' }}>Teknik Otomasi Industri</option>
            <option value="Rekayasa Perangkat Lunak" {{ old('jurusan') == 4 ? 'selected' : '' }}>Rekayasa Perangkat Lunak</option>
            <option value="Teknik Komputer Jaringan" {{ old('jurusan') == 5 ? 'selected' : '' }}>Teknik Komputer Jaringan</option>
            <option value="Multimedia" {{ old('jurusan') == 6 ? 'selected' : '' }}>Multimedia</option>
          </select>
        </div>
        <div class="col-md-12">
          <strong>Ruangan :</strong>
          <input type="text" name="lokasi_ruangan" class="form-control" placeholder="Lokasi Ruangan" value="{{ old('lokasi_ruangan') }}">
        </div>
        <div class="col-md-12">
          <strong>Nama Wali Kelas :</strong>
          <input type="text" name="nama_wali_kelas" class="form-control" placeholder="Nama Walikelas" value="{{ old('nama_wali_kelas') }}">
        </div>
        <br>
        <div class="col-md-12">
          <button type="submit" class="btn btn-block btn-primary" value="Simpan">Submit</button>
          <a href="{{url('/kelas')}}" class="btn btn-block btn-danger">Back</a>
        </div>
    </form>
  </div>
@endsection

Dan Hasilnya:


Memakai Validasi yang berbeda:
public function store(Request $request){
    $rule=[
    'nama_kelas' => 'required|bail',
    'nama_wali_kelas' => 'required|digits_between:5,30',
    ];

bail => berhenti menjalankan validasi selanjutya jika validasi sebelumnya gagal (error)
digits => hampir mirip dengan max cuman digit ini di khususkan untuk numeric/angka

Studi kasus 2
Bug nya adalah
- Duplicate entry

- Error ketika nis melebihi 10 angka

Solusinya:
'nis' => 'required|numeric|digits:10|unique:t_siswa',

Tinggal tambahkan unique untuk membuat nis menjadi primary key dan tambahkan juga digits, min apa bedanya sama max? nah jadi mimin udah coba pake max tapi kelemahnya bisa menginputkan nis dalam bentuk character, jadi mimin menggunakan digits deh, ini dia penampakannya setelah ditambah digits

Studi Kasus 3
Radio button :
<b><label for="jenkel">Jenis Kelamin :</label></b>
    <div class="radio">
        <label>
            <input type="radio" name="jenkel" id="L" value="L" @if(old('jenkel')) checked @endif>
            Laki-laki
        </label>
    </div>
    <div class="radio">
        <label>
            <input type="radio" name="jenkel" id="P" value="P" @if(!old('jenkel')) checked @endif>
            Perempuan
        </label>

Selected item:
<strong>Golongan Darah :</strong><br>
          <select name="goldar"class="form-control" >
          <option value="">- Pilih Goldar -</option>
          <option value="A" {{ old('goldar') == 'A' ? 'selected' : '' }}>A</option>
          <option value="B" {{ old('goldar') == 'B' ? 'selected' : '' }}>B</option>
          <option value="O" {{ old('goldar') == 'O' ? 'selected' : '' }}>O</option>
          <option value="AB" {{ old('goldar') == 'AB' ? 'selected' : '' }}>AB</option>
          </select>

Hasilnya

Akhirnya selesai juga ya, oke mimin pamit untur diri dan sampai jumpa di lain waktu....

Wassalamualaikum...

0 Komentar