Mengatasi Undefined array key di PHP 8
Warning yang muncul sejak PHP 8 saat mengakses array key yang tidak ada. Penyebab dan pola amannya.
1 · Gejala & Log Pesan Error
Warning: Undefined array key "email" in /var/www/html/register.php on line 12 // varian: Warning: Undefined array key "page" in /var/www/html/index.php on line 5 Warning: Trying to access array offset on value of type null
2 · Akar Penyebab Masalah
PHP 8 Menaikkan Notice Menjadi Warning
Di PHP 7, mengakses key array yang tidak ada hanya menghasilkan notice yang sering tidak terlihat. Sejak PHP 8, ini menjadi warning yang tampil jelas (dan bisa memenuhi log).
Akar masalahnya sederhana: kamu membaca $_POST["email"] atau $_GET["page"] tanpa memastikan key itu ada. Form yang field-nya opsional, query string yang tidak dikirim, atau checkbox yang tidak dicentang (checkbox yang tidak dicentang tidak dikirim browser sama sekali) semuanya memicu ini.
Warning ini bukan sekadar kosmetik: di production dengan error reporting ketat, ia bisa membocorkan path file ke user atau memenuhi log dengan ribuan baris.
3 · Solusi & Diff Kode
✕ Sebelum (bermasalah)
<?php
// ❌ warning kalau field tidak dikirim
$email = $_POST["email"];
$page = $_GET["page"];
$setuju = $_POST["setuju"]; // checkbox: tidak ada kalau tidak dicentang
?>✓ Sesudah (diperbaiki)
<?php
// ✔ null coalescing: default aman kalau key tidak ada
$email = $_POST["email"] ?? "";
$page = $_GET["page"] ?? 1;
$setuju = isset($_POST["setuju"]);
// ✔ untuk validasi serius, pakai filter:
$email = filter_input(INPUT_POST, "email", FILTER_VALIDATE_EMAIL);
if ($email === false) {
// tangani input tidak valid
}
?>Langkah Perbaikan
- Ganti akses langsung dengan
??:$_POST["email"] ?? ""adalah pola standar modern. Singkat dan aman. - Untuk checkbox: selalu pakai
isset()karena key-nya memang tidak dikirim saat tidak dicentang. - Jangan sembunyikan dengan @: menulis
@$_POST["email"]membungkam warning tapi bug logika tetap ada. Itu plester, bukan obat. - Validasi, bukan cuma default: nilai default mencegah warning, tapi untuk data penting (email, angka) tetap validasi isinya sebelum dipakai atau disimpan.