EYDefterEmre Yakut
← tüm yazılar
Saha · Hata avı

Teklif yazmadan önce butona bas

Maslak’ta lüks otomobil servisi yapan bir firmaya taslak hazırlıyordum. Sitelerini açtım, “Randevu Al”a tıkladım ve ekrana PHP hata mesajları döküldü. Sunumun konusu bu oldu.

randevu.phpWarning: Undefined array key "tarih" in /home/.../randevu.php on line 84Warning: Undefined array key "saat" in /home/.../randevu.php on line 85Fatal error: Uncaught mysqli_sql_exception: Column 'appointment_at'cannot be null in /home/.../randevu.php:91RANDEVU AL → hiçbir şey olmazteklif yazmadan önce: müşterinin sitesini gerçekten aç, gerçekten tıkla

Süper spor ve lüks otomobil servisi. İşin kendisi ciddi — bu arabaları getiren müşteri kitlesinin beklentisi de.

Taslak hazırlamadan önce her zaman yaptığımı yaptım: mevcut siteyi açtım. Sonra çoğu kişinin atladığını yaptım — butona bastım.

Ekranda ne vardı

Warning: Undefined array key "tarih" in /home/…/randevu.php on line 84
Warning: Undefined array key "saat" in /home/…/randevu.php on line 85
Fatal error: Uncaught mysqli_sql_exception: Column 'appointment_at'
cannot be null in /home/…/randevu.php:91

Randevu formu çalışmıyordu. Bir müşteri arabası için randevu almaya kalkıyor, bunu görüyor ve gidiyor.

Burada iki ayrı sorun var

Görünür olan: form kırık. Gönderilen alanlar beklenen adlarla gelmiyor, veritabanı boş tarih kabul etmiyor, istek çöküyor. Bu bir hata; düzeltilir.

Daha ciddi olan: bu hatanın ekranda görünmesi.

hata mesajı bir haritadır

O dört satır şunları açık ediyor: sunucudaki tam dosya yolu, betiğin adı, kaç satır olduğu, veritabanı sütununun adı ve kısıtı, hangi sürücünün kullanıldığı. Saldırgan için bedava keşif.

Canlı ortamda display_errors kapalı, log_errors açık olur — hata kaybolmaz, yer değiştirir.

Bunu sunuma nasıl koyarsın

Kolay yol: ekran görüntüsünü basıp “sitenizin hali bu” demek. Çalışır ama karşındakini savunmaya geçirir.

Ben üç cümle yazdım:

5 Ağustos 2026, 14:20 — randevu formu doldurulup gönderildiğinde sayfa hata mesajıyla sonlanıyor, kayıt oluşmuyor. Aynı ekranda sunucu dosya yolları ve veritabanı sütun adları görünür durumda. Her iki durum da tekrar edilebilir.

Fark: birincisi bir eleştiri, ikincisi bir kayıt. Kayıt tartışılmaz — ya doğrudur ya değildir, açıp bakılır.

Ve asıl soruyu sordurur

Bir servis sahibinin bu bulguyu okuyunca aklına gelen ilk soru “bu nasıl düzelir?” olmuyor.

Şu oluyor: “bu ne zamandır böyle?”

Cevabı kimse bilmiyor. Çünkü kırık bir form sessizdir. Sunucu logunda bir satır, kullanıcıda bir hayal kırıklığı, işletmede hiçbir iz bırakmaz. Randevu gelmediğinde kimse “form mu bozuk” demez; “bu ay sakin geçti” der.

Ölçülmeyen bir kayıp, kayıp olarak görünmez. Teklifin gerçek konusu buydu.

Taslak tarafında

Bu firmaya jenerik bir “oto servis” şablonu yakışmıyordu. Getirilen arabalar koyu, ağır, pahalı; site de öyle oldu — koyu zemin, geniş boşluk, az ama iri tipografi.

Randevu akışını da yeniden kurguladım: önce araç, sonra hizmet, sonra tarih. Her adımda tek karar. Ve en önemlisi — gönderim başarısız olursa kullanıcı bunu anlıyor. Sessizce yutmuyor, hata mesajını da yüzüne basmıyor; “kaydedemedik, şu numaradan ulaşın” diyor.

Ne öğrendim

Bir siteye bakmakla bir siteyi denemek aynı şey değil. Ana sayfa mükemmel görünebilir; işi yapan yer formun gönder tarafıdır ve orası hiç açılmadan bozuk kalabilir.

Artık her denetimde en az bir formu gerçekten dolduruyorum. Beş dakika sürüyor ve teklifin en güçlü cümlesi oradan çıkıyor.

SahaHata avı