Nuanses van die gebruik van merkblokkies in PHP
Laat daar slegs 'n merkblokkie in ons vorm wees:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Laat die kode vir die verwerking van ons vorm so lyk:
<?php
if (!empty($_GET)) { // indien die vorm versend is
if (isset($_GET['flag'])) { // indien die merkie gemerk is
echo 'gemerk';
} else {
echo 'nie gemerk nie';
}
}
?>
Ons wag 'n probleem - as die merkie nie gemerk is nie,
dan, aangesien daar buiten die merkblokkie geen ander
elemente in die vorm is nie, sal daar 'n leë
skikking in $_GET wees. Dit beteken dat ons in die kode vir die verwerking
van die vorm nie by die eerste if sal uitkom nie, wat
die versending van die vorm kontroleer.
Vir die oplossing van die probleem gebruik hulle 'n spesiale tegniek: hulle skep 'n verborge invoer met dieselfde naam as ons merkblokkie. In dié geval stel hulle die waarde van die verborge invoer op nul, en dié van die merkblokkie op een:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
In sulke geval sal die volgende gebeur. As die merkblokkie nie gemerk is nie, sal slegs die waarde van die verborge invoer na die bediener gestuur word. As die merkblokkie egter gemerk is, sal albei waardes met een naam na die bediener gestuur word. Maar, aangesien die waarde van die merkblokkie die tweede sal wees, sal dit eenvoudig die eerste een vervang.
So, nou sal ons merkblokkie óf nul, óf een na die bediener stuur:
<?php
var_dump($_GET['flag']); // '0' of '1'
?>
Kom ons gebruik dit in ons kontrole:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'gemerk';
} else {
echo 'nie gemerk nie';
}
}
?>
Vra met behulp van 'n merkie die gebruiker
of hy/sy reeds 18 jaar oud is of nie. Indien
wel, laat hom/haar toegang tot die webwerf toe, en indien
nie - moenie dit toelaat nie.