ჩეკბოქსების გამოყენების ნიუანსები PHP-ში
დავუშვათ, ჩვენს ფორმაში არის მხოლოდ ჩეკბოქსი:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
დავუშვათ, ჩვენი ფორმის დამუშავების კოდი ასე გამოიყურება:
<?php
if (!empty($_GET)) { // თუ ფორმა გაიგზავნა
if (isset($_GET['flag'])) { // თუ ჩეკბოქსი მონიშნულია
echo 'მონიშნულია';
} else {
echo 'არ არის მონიშნული';
}
}
?>
ჩვენ პრობლემა გველის - თუ ჩეკბოქსი არ არის მონიშნული,
მაშინ, რადგან ფორმაში ჩეკბოქსის გარდა სხვა ელემენტები არ არის,
$_GET-ში იქნება ცარიელი მასივი. ეს ნიშნავს, რომ ფორმის
დამუშავების კოდში ჩვენ ვერ მოვახდენთ პირველ if-ში შესვლას, რომელიც
ამოწმებს ფორმის გაგზავნას.
პრობლემის გადასაჭრელად იყენებენ სპეციალურ მიღებას: ქმნიან ფარულ ინპუტს იგივე სახელით, როგორც ჩვენი ჩეკბოქსის. ამ შემთხვევაში ფარული ინპუტის მნიშვნელობას აყენებენ ნულს, ხოლო ჩეკბოქსის - ერთს:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
ამ შემთხვევაში მოხდება შემდეგი. თუ ჩეკბოქსი არ არის მონიშნული, მაშინ სერვერზე მხოლოდ ფარული ინპუტის მნიშვნელობა გაიგზავნება. თუ კი ჩეკბოქსი მონიშნულია, მაშინ სერვერზე გაიგზავნება ორივე მნიშვნელობა ერთი სახელით. მაგრამ, რადგან ჩეკბოქსის მნიშვნელობა იქნება მეორე, ის უბრალოდ გადაფარებს პირველს.
მოკლედ, ახლა ჩვენი ჩეკბოქსი სერვერზე გაგზავნის ან ნულს, ან ერთს:
<?php
var_dump($_GET['flag']); // '0' ან '1'
?>
გამოვიყენოთ ეს ჩვენს შემოწმებაში:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'მონიშნულია';
} else {
echo 'არ არის მონიშნული';
}
}
?>
ჩეკბოქსის საშუალებით ჰკითხეთ მომხმარებელს,
არის თუ არა მას უკვე 18 წელი. თუ
არის, მიუცეთ მას წვდომა საიტზე, ხოლო თუ
არა - არ მიუცეთ.