- Katılım
- 21 May 2023
- Mesajlar
- 753
- Tepki
- 17
- Puan
- 18
İletişim sayfasındaki üç kutu ve bir düğme, sitenizin dış dünyaya açılan tek kapısı olabilir. O kapının nasıl işaretlendiği hem verinin sunucuya doğru gitmesini hem de ekran okuyucu kullanan birinin kutuya ne yazacağını bilmesini belirliyor.
Aşağıda formun standartta nasıl tanımlandığını, gönderim davranışını hangi özniteliklerin kontrol ettiğini, GET ile POST arasındaki farkın nereden geldiğini ve etiketin neden zorunlu sayıldığını belgelerine bakarak topluyoruz.
Standartta form nedir?
Tanım iki kaynakta birbirini tamamlıyor. MDN'in form öğesi referansı öğeyi şöyle tarif ediyor: bilgi göndermeye yarayan etkileşimli denetimler içeren bir belge bölümü.
HTML Living Standard ise tanımı işlevden kuruyor: form öğesi, forma ilişkilendirilmiş öğeler kümesi aracılığıyla işlenebilen bir köprü temsil ediyor ve bu öğelerin bir kısmı, işlenmek üzere sunucuya gönderilebilecek düzenlenebilir değerleri temsil edebiliyor.
Formun bir adı da olabiliyor. Standarda göre name özniteliği, formun formlar koleksiyonu içindeki adını veriyor; değer boş olamıyor ve bulunduğu koleksiyondaki diğer formlar arasında benzersiz olmak zorunda.
- Ne içeriyor: Etkileşimli denetimler.
- Ne yapıyor: Değerleri işlenmek üzere sunucuya taşıyor.
- Ad kuralı: Boş olamaz, koleksiyon içinde benzersiz olmalı.
Gönderimi belirleyen öznitelikler
Standart, gönderim davranışını denetleyen öznitelikleri ayrı bir küme olarak sayıyor: action, enctype, method, novalidate ve target.
MDN bunların işini tek tek açıklıyor. action, form gönderimini işleyen adres; bu değer gönderim düğmesindeki formaction özniteliğiyle geçersiz kılınabiliyor.
target ise yanıtın nerede gösterileceğini belirliyor. Varsayılan _self, yanıtı aynı tarayıcı bağlamına yüklüyor; _blank yeni ve adsız bir bağlama açıyor.
Bir de karakter kodlaması var. Standarda göre accept-charset özniteliği gönderimde kullanılacak karakter kodlamalarını veriyor ve belirtilmişse değer, büyük-küçük harf duyarsız biçimde UTF-8 ile eşleşmek zorunda.
GET mi POST mu?
method özniteliği için izin verilen değerler sınırlı. MDN üçünü sayıyor: post, get ve dialog.
Aradaki fark verinin nereye yazıldığında. POST'ta form verisi isteğin gövdesinde gönderiliyor. Varsayılan olan GET'te ise veri, action adresinin sonuna soru işaretiyle ayrılarak ekleniyor.
Seçim ölçütü de yazılı: GET, formun yan etkisi olmadığı durumlarda kullanılmalı. Arama kutusu bu tanıma uyuyor, kayıt formu uymuyor.
Üçüncü değer olan dialog, form bir dialog öğesinin içindeyken iletişim kutusunu kapatıyor ve veri göndermeden ya da formu temizlemeden bir submit olayı tetikliyor.
POST kullanıldığında devreye enctype giriyor: varsayılan application/x-www-form-urlencoded, dosya alanı içeren formlar için multipart/form-data, hata ayıklama amacıyla ise text/plain.
Gönderimin ardından dönen yanıtın ne anlama geldiğini durum kodları yazımızda ele almıştık.
Püf nokta' Alıntı:Adres çubuğunda görünmesini istemediğiniz bir veri varsa, o form GET ile gönderilmemeli.
Doğrulama nerede devreye giriyor?
Tarayıcının kendi denetimi kısıtlama doğrulaması adını taşıyor ve gönderimden önce çalışıyor.
Standart iki yöntemi ayırıyor. submit() çağrısı formu gönderiyor ama etkileşimli kısıtlama doğrulamasını atlıyor ve submit olayını tetiklemiyor.
requestSubmit() ise gönderim talebi oluşturuyor; submit() aksine kısıtlama doğrulamasını da submit olayının tetiklenmesini de kapsıyor ve bunlardan herhangi biri gönderimi iptal edebiliyor.
İşaretleme tarafında bunu kapatan bir öznitelik var: novalidate. MDN'e göre bu mantıksal öznitelik, formun gönderilirken doğrulanmaması gerektiğini belirtiyor.
Sunucu tarafındaki denetimin neden vazgeçilmez olduğunu ise XSS yazımızda görmüştünüz; tarayıcıdaki doğrulama kullanıcıya kolaylık sağlıyor, güvenlik sınırı oluşturmuyor.
Etiket neden zorunlu?
Formun erişilebilirlik tarafı label öğesinde toplanıyor. Standart bunu şöyle tanımlıyor: label öğesi, kullanıcı arayüzündeki bir başlığı temsil ediyor.
İlişkilendirmenin iki yolu belirtilmiş. Başlık, belirli bir form denetimiyle ya for özniteliği kullanılarak ya da form denetimi doğrudan label öğesinin içine konularak eşleştiriliyor.
Eşleştirilen denetimin adı da tanımlı: label öğesinin etiketlenen denetimi. Bu bağ kurulmadığında görsel olarak yan yana duran metin ile kutu, yardımcı teknoloji açısından ilişkisiz kalıyor.
Gönderim düğmesinin standarttaki rolünü buton yazımızda ayrıca anlatmıştık.
Sık Sorulan Sorular
Form ne demek?
Bilgi göndermeye yarayan etkileşimli denetimleri barındıran belge bölümü; değerler işlenmek üzere sunucuya iletilebiliyor.
GET ile POST farkı ne?
POST'ta veri istek gövdesinde gider; GET'te action adresine soru işaretiyle eklenir ve yan etkisi olmayan formlarda kullanılmalıdır.
enctype ne işe yarıyor?
POST gönderiminin MIME türünü belirler; dosya alanı olan formlarda multipart/form-data gerekir.
novalidate ne yapıyor?
Formun gönderilirken tarayıcı tarafından doğrulanmamasını sağlar.
label neden gerekli?
Başlığı belirli bir denetimle ilişkilendirir; bu bağ for özniteliğiyle ya da denetimi label içine koyarak kurulur.
Özetle
Form, kullanıcının girdiği değerleri işlenmek üzere taşıyan bir yapı. Nereye gideceğini action, hangi yolla gideceğini method, nasıl paketleneceğini enctype belirliyor; GET yan etkisiz işler için, POST veri değiştiren işler için uygun. Tarayıcı doğrulaması kolaylık sağlıyor ama novalidate ile kapatılabildiği için güvenlik sınırı sayılmıyor. Erişilebilirliğin taşıyıcısı ise her kutuya bağlanmış bir label.
Sitenizdeki formda her giriş kutusunun kendine bağlı bir etiketi var mı?
Güncelleme: 4 Eylül 2026. HTML Living Standard (forms bölümü) ve MDN form öğesi referansı kontrol edildi.
Dijital Dünyanıza Yön Veren Pusula