PHP'de Checkbox Kullanımının Nüansları

Formumuzda sadece bir checkbox olduğunu varsayalım:

html<form action="" method="GET">
  <input type="checkbox" name="flag">
  <input type="submit">
</form>

Form işleme kodumuzun şu şekilde olduğunu varsayalım:

html<?php
  if (!empty($_GET)) { // eğer form gönderildiyse
    if (isset($_GET['flag'])) { // eğer checkbox işaretlendiyse
      echo 'işaretlendi';
    } else {
      echo 'işaretlenmedi';
    }
  }
?>

Bir problemle karşılaşacağız - eğer checkbox işaretlenmezse, formda checkbox dışında başka eleman olmadığı için, $_GET içinde boş bir dizi olacak. Bu, form işleme kodunda, formun gönderilip gönderilmediğini kontrol eden ilk if bloğuna giremeyeceğimiz anlamına gelir.

Bu sorunu çözmek için özel bir yöntem kullanılır: checkbox'ımızla aynı isme sahip gizli bir input oluşturulur. Bu gizli input'un değeri 0, checkbox'ın değeri ise 1 olarak ayarlanır:

html<form action="" method="GET">
  <input type="hidden" name="flag" value="0">
  <input type="checkbox" name="flag" value="1">
  <input type="submit">
</form>

Bu durumda şu sonuç ortaya çıkar. Eğer checkbox işaretlenmezse, sunucuya sadece gizli input'un değeri gönderilir. Eğer checkbox işaretlenirse, sunucuya aynı isimle iki değer gönderilir. Ancak, checkbox'ın değeri ikinci sırada geleceği için, ilk değerin üzerine yazar.

Böylece, artık checkbox'ımız sunucuya ya 0 ya da 1 gönderecek:

html<?php
  var_dump($_GET['flag']); // '0' veya '1'
?>

Bunu kontrolümüzde kullanalım:

html<?php
  if (!empty($_GET)) {
    if ($_GET['flag'] === '1') {
      echo 'işaretlendi';
    } else {
      echo 'işaretlenmedi';
    }
  }
?>
Задание 1

Bir checkbox kullanarak kullanıcıya 18 yaşında olup olmadığını sorun. Eğer yaşı tutuyorsa, siteye erişimine izin verin, yaşı tutmuyorsa - izin vermeyin.