> For the complete documentation index, see [llms.txt](https://learn.devlabss.my.id/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://learn.devlabss.my.id/laravel/bab-7-fitur-create-and-validasi/7.2-membuat-form-tambah-buku.md).

# 7.2 Membuat Form Tambah Buku

## Membuat form tambah buku

Pada subbab sebelumnya, Anda sudah membuat form dasar yang aman dengan `@csrf`.

Sekarang kita lengkapi form itu agar benar-benar siap dipakai untuk menambah data buku.

Di proyek E-Library ini, minimal kita butuh empat data:

* judul
* penulis
* penerbit
* tahun terbit

### Teori awal dan analogi

Bayangkan petugas perpustakaan sedang mengisi buku baru ke katalog.

Petugas tidak cukup hanya menulis judulnya saja.

Data lain juga harus lengkap agar buku mudah dicari.

Begitu juga di aplikasi kita.

Form harus menampung field yang memang dibutuhkan database.

Kalau field kurang lengkap, data yang masuk akan setengah jadi.

### Target praktik subbab ini

Setelah menyelesaikan subbab ini, Anda seharusnya bisa:

* membuat form tambah buku yang lengkap
* menyesuaikan nama input dengan kolom database
* menambahkan tautan menuju halaman tambah buku
* mengirim seluruh data form ke controller

### Langkah praktik step-by-step

Ikuti langkah berikut dengan urut.

{% stepper %}
{% step %}

### Lengkapi halaman `create.blade.php`

Buka file:

`resources/views/buku/create.blade.php`

Lalu ubah isinya menjadi seperti ini:

```blade
<h1>Tambah Buku</h1>

<form action="{{ route('buku.store') }}" method="POST">
    @csrf

    <div>
        <label>Judul Buku</label>
        <input type="text" name="judul">
    </div>

    <div>
        <label>Penulis</label>
        <input type="text" name="penulis">
    </div>

    <div>
        <label>Penerbit</label>
        <input type="text" name="penerbit">
    </div>

    <div>
        <label>Tahun Terbit</label>
        <input type="number" name="tahun_terbit">
    </div>

    <button type="submit">Simpan</button>
</form>
```

Perhatikan nama setiap `name=""`.

Nama ini harus cocok dengan kolom pada tabel `buku`.
{% endstep %}

{% step %}

### Tambahkan akses dari halaman daftar buku

Sekarang buka file:

`resources/views/buku/index.blade.php`

Tambahkan tautan menuju halaman tambah buku di atas tabel:

```blade
<h1>Daftar Buku</h1>

<a href="{{ route('buku.create') }}">Tambah Buku</a>

<table border="1" cellpadding="10" cellspacing="0">
```

Dengan begitu, pengguna tidak perlu mengetik URL manual.
{% endstep %}

{% step %}

### Pastikan method `store()` masih menerima request

Buka lagi `app/Http/Controllers/BukuController.php`.

Pastikan method `store()` masih seperti ini:

```php
public function store(Request $request)
{
    dd($request->all());
}
```

Kita masih memakai `dd()` dulu untuk melihat hasil kiriman form lengkap.
{% endstep %}

{% step %}

### Uji form lengkap di browser

Sebelum mengetes, pastikan server Laravel hidup.

Silakan pilih salah satu:

* buka **Laragon** lalu klik **Start All**
* atau jalankan `php artisan serve`

Setelah itu, buka halaman daftar buku:

```
http://127.0.0.1:8000/buku
```

Klik tautan **Tambah Buku**.

Lalu isi semua field yang tersedia.
{% endstep %}

{% step %}

### Kirim form dan cek hasil request

Setelah form diisi, klik **Simpan**.

Kalau berhasil, Anda akan melihat semua data form tampil di browser melalui `dd()`.

Contohnya bisa terlihat seperti ini:

```php
array:5 [
  "_token" => "..."
  "judul" => "Belajar Laravel"
  "penulis" => "Tim RPL"
  "penerbit" => "SMK Digital"
  "tahun_terbit" => "2026"
]
```

Kalau semua field muncul, berarti struktur form Anda sudah benar.
{% endstep %}
{% endstepper %}

### Penjelasan pasca-praktik

Sekarang mari kita bedah bagian pentingnya.

#### 1. Nama input harus cocok dengan database

Misalnya:

* `name="judul"` akan mengirim data ke key `judul`
* `name="penulis"` akan mengirim data ke key `penulis`
* `name="penerbit"` akan mengirim data ke key `penerbit`
* `name="tahun_terbit"` akan mengirim data ke key `tahun_terbit`

Kalau nama field berbeda dari kolom database, proses simpan nanti bisa bermasalah.

#### 2. Kenapa `tahun_terbit` memakai `type="number"`

Karena data ini berisi angka tahun.

Dengan `type="number"`, browser membantu pengguna mengisi data yang lebih sesuai.

Walau begitu, nanti validasi Laravel tetap wajib dipasang.

#### 3. Tautan `route('buku.create')`

Tautan ini mengarahkan pengguna ke halaman form tambah buku.

Karena kita memakai resource route, Laravel sudah menyiapkan nama route ini secara otomatis.

#### 4. Kenapa masih memakai `dd()`

Karena kita sedang memastikan bentuk data yang dikirim sudah benar.

Sebelum data disimpan ke database, kita harus yakin dulu bahwa request yang masuk sudah lengkap.

### Alur data teknis

Saat pengguna menekan tombol **Simpan**, alurnya seperti ini:

1. browser mengirim semua isi form
2. request masuk ke route `buku.store`
3. Laravel memanggil method `store()`
4. semua input dibaca oleh `$request`
5. `dd($request->all())` menampilkan seluruh data

Setelah tahap ini beres, barulah kita siap masuk ke validasi dan simpan data.

### Output yang harus terlihat

Setelah subbab ini selesai, hasil berikut seharusnya sudah terlihat:

* form tambah buku memiliki field `judul`, `penulis`, `penerbit`, dan `tahun_terbit`
* halaman daftar buku menampilkan tautan **Tambah Buku**
* saat tombol **Simpan** ditekan, semua field muncul di hasil `dd($request->all())`
* key request sama dengan nama kolom yang akan dipakai saat simpan data

### Troubleshooting yang paling sering

Masalah yang paling sering muncul:

* **field tidak ikut terkirim** — atribut `name` belum ditulis
* **tautan tambah buku error** — route `buku.create` belum aktif
* **data `tahun_terbit` kosong** — nama input salah atau field tidak diisi
* **halaman tidak pindah ke form** — link ditulis salah atau file belum disimpan

{% hint style="warning" %}
Kalau sebuah input tidak punya atribut `name`, nilainya tidak akan ikut terkirim ke server.
{% endhint %}

{% hint style="info" %}
Jangan langsung menyimpan data ke database kalau bentuk request belum rapi. Cek dulu isi data yang masuk.
{% endhint %}

### Poin evaluasi bab 7.2

Pastikan Anda sudah memahami poin berikut:

* Saya bisa membuat form tambah buku yang lengkap.
* Saya tahu nama input harus sama dengan nama kolom yang dibutuhkan.
* Saya bisa menambahkan tautan ke halaman create.
* Saya bisa mengecek hasil kiriman form lewat `dd($request->all())`.
* Saya siap menambahkan validasi pada subbab berikutnya.

Jika semuanya sudah jelas, lanjut ke [7.3 Menerapkan Form Validation](/laravel/bab-7-fitur-create-and-validasi/7.3-menerapkan-form-validation.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://learn.devlabss.my.id/laravel/bab-7-fitur-create-and-validasi/7.2-membuat-form-tambah-buku.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
