Tworząc formularz z polem typu checkbox, zauważyłeś pewnie (bo ja tak), że takie pole kiedy nie jest zaznaczone, nie jest wysyłane wraz z formularzem.
Czy jest możliwe zmuszenie checkbox'a aby choć raz powiedział "nie", zamiast ciągłego krakania "tak"?
Oczywiście! No...może nie tak wprost, ale jest. A rozwiązanie jest bardzo proste.
Nic nie stoi na przeszkodzie, aby w formularzu umieścić drugie pole o takiej samej nazwie jaką ma nasz ptaszek. To pole musi być polem, którego wartość zawsze otrzymamy w danych zwrotnych przy zatwierdzaniu formularza. Czyli może to być input typu text, textarea, również radio, select czy też checkbox (ale w stanie zaznaczonej opcji). Tyle, że te są widoczne domyślnie w formularzu, a skoro mamy typ hidden, to po co stosować wymienione ukrywając przy pomocy CSS.
Skoro już wiadomo, że użyjemy input o typie hidden, to spójrzmy na przykład:
<form method="get">
<input type="hidden" value="0" name="pytanie1"/>
<input type="checkbox" value="1" name="pytanie1"/>
<input type="submit"/>
</form>
Zatwierdzając formularz przy zaznaczonym checkbox, zostaną przesłane dwie zmienne: pytanie1=0 oraz pytanie1=1. Przy odznaczonym, tylko pytanie1=0. W pierwszym przypadku przy odbiorze danych druga zmienna automatycznie nadpisze pierwszą, czyli ostatecznie Ty otrzymasz albo pytanie1=0 albo pytanie1=1.
Z kolejności pól w tym formularzu powinieneś otrzymać odpowiedź dlaczego czasem ostatni są pierwszymi. A jeśli nie wiesz, to zmień kolejność i sprawdź.