Tutorials
Checkbox Geheugen
Hoe onthoud je gemakkelijk hele reeksen checkboxen
Pagina 1
Inleiding & uitleg
Checkboxen onthouden
Analoog aan mijn vorige tut ben ik vandaag eens naar checkboxen gaan kijken. Ook deze komen in veel formulieren voor, vaak in groepen. Om de waarde van een checkbox te onthouden, voor het geval een formulier nogmaals getoond moet worden, hanteerde ik tot vandaag deze methode:
1) Geef een groep checkboxen die bij elkaar horen een array-naam, bijvoorbeeld name=hobbies[]
2) Na verzenden van het formulier de waarden uitlezen met een foreach op de array $_POST['hobbies']
3) In de HTML bij elke checkbox controleren of zijn value gezet was (bv. isset ($_POST['hobbies']['uitgaan']))
Weer om dezelfde reden als bij de <select> ben ik eens gaan kijken of dit niet handiger kan.
De strategie is als volgt:
1) Maak per groep checkboxen een array aan met de juiste values
2) Na verzenden van het formulier wordt per groep bekeken welke values gecheckt zijn
3) Schrijf een functie die een groep checkboxen genereert aan de hand van stap 1 en 2
Voordelen:
1) Geen if-constructie in elke checkbox om te kijken of hij aangevinkt moet worden of niet
2) Toevoegen of verwijderen van checkboxen aan/uit een groep is zeer eenvoudig; gewoon een element toevoegen aan, of verwijderen uit, de initialisatie-arrays.
3) Modulair van opzet: zet de functie make_checkboxes in een apart PHP bestand en include hem in elke pagina waar je hem nodig hebt
Het codevoorbeeld staat op de volgende pagina. Via het commentaar in de code moet het te volgen zijn. Vragen en opmerkingen hoor ik natuurlijk graag.
Enjoy!
Jan Koehoorn
Analoog aan mijn vorige tut ben ik vandaag eens naar checkboxen gaan kijken. Ook deze komen in veel formulieren voor, vaak in groepen. Om de waarde van een checkbox te onthouden, voor het geval een formulier nogmaals getoond moet worden, hanteerde ik tot vandaag deze methode:
1) Geef een groep checkboxen die bij elkaar horen een array-naam, bijvoorbeeld name=hobbies[]
2) Na verzenden van het formulier de waarden uitlezen met een foreach op de array $_POST['hobbies']
3) In de HTML bij elke checkbox controleren of zijn value gezet was (bv. isset ($_POST['hobbies']['uitgaan']))
Weer om dezelfde reden als bij de <select> ben ik eens gaan kijken of dit niet handiger kan.
De strategie is als volgt:
1) Maak per groep checkboxen een array aan met de juiste values
2) Na verzenden van het formulier wordt per groep bekeken welke values gecheckt zijn
3) Schrijf een functie die een groep checkboxen genereert aan de hand van stap 1 en 2
Voordelen:
1) Geen if-constructie in elke checkbox om te kijken of hij aangevinkt moet worden of niet
2) Toevoegen of verwijderen van checkboxen aan/uit een groep is zeer eenvoudig; gewoon een element toevoegen aan, of verwijderen uit, de initialisatie-arrays.
3) Modulair van opzet: zet de functie make_checkboxes in een apart PHP bestand en include hem in elke pagina waar je hem nodig hebt
Het codevoorbeeld staat op de volgende pagina. Via het commentaar in de code moet het te volgen zijn. Vragen en opmerkingen hoor ik natuurlijk graag.
Enjoy!
Jan Koehoorn
Pagina 2
Werkend voorbeeld
<?php
ini_set('display_errors', 1);
error_reporting (E_ALL);
// t (): plaats een aantal tabs en eventueel een newline
// $n_tabs: hoeveel tabs je wilt
// $newline: wel of geen nieuwe regel
function t($n_tabs, $newline = false) {
if ($newline) echo "\n";
for ($i = 0; $i < $n_tabs; $i++) {
echo "\t";
}
}
// make_checkboxes (): maak een serie checkboxes met dezelfde name[]
// $name: string met de naam van de checkboxen
// $values: array met de values van de checkboxen
// $selections: array met de geselecteerde checkboxen
// $vertical: boolean voor horizontaal (false) of verticaal (true)
function make_checkboxes ($name, $values, $selections, $vertical = false) {
foreach ($values as $value) {
if ($vertical) {
t (3, true);
echo '<p>';
}
t (3, true);
echo '<input id="' . $value . '" name="' . $name . '[]" type="checkbox" value="' . $value . '"';
if (in_array ($value, $selections)) {
echo ' checked="checked"';
}
echo '>';
t (3, true);
echo '<label for ="' . $value . '">' . $value . '</label>';
if ($vertical) {
t (3, true);
echo '</p>';
}
}
}
// initialisatie-arrays;
// drie series checkboxen als voorbeeld
$hobbies = array ('uitgaan', 'lezen', 'tuinieren', 'PHP', 'koken');
$huisdieren = array ('kat', 'hond', 'dwerghamster', 'konijn', 'cavia', 'schildpad', 'goudvis');
$ziektes = array ('griep', 'dyfterie', 'kinkhoest', 'tyfus', 'pokken', 'mazelen', 'angina');
// als het formulier verzonden is vangen we de values op
// LET OP: als geen één checkbox van een groep is aangevinkt
// bestaat er géén array van in de POST variabelen. Vandaar dat
// we hier moeten checken met isset ()
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$hobbies_selections = (isset ($_POST['hobbies'])) ? ($_POST['hobbies']) : (array ());
$huisdieren_selections = (isset ($_POST['huisdieren'])) ? ($_POST['huisdieren']) : (array ());
$ziektes_selections = (isset ($_POST['ziektes'])) ? ($_POST['ziektes']) : (array ());
}
// formulier is nog niet gepost, dus hier een lege array maken
// we zouden ook een array met standaardwaarden kunnen maken om
// sommige of alle checkboxen alvast te selecteren
else {
$hobbies_selections = array ();
$huisdieren_selections = array ();
$ziektes_selections = array ();
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Selective Memory</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
h1 {
font: 18px arial;
color: #f99;
border-bottom: 1px dashed #f99;
padding-bottom: 5px;
}
p, label, select, option {
font: 12px verdana;
color: #66f;
}
label {
cursor: pointer;
}
</style>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<h1>Wat zijn je hobbies?</h1>
<p><?php make_checkboxes ('hobbies', $hobbies, $hobbies_selections); ?></p>
<h1>Welke huisdieren heb je?</h1>
<?php make_checkboxes ('huisdieren', $huisdieren, $huisdieren_selections, true); ?>
<h1>Welke ziektes heb je (gehad)?</h1>
<p><?php make_checkboxes ('ziektes', $ziektes, $ziektes_selections); ?></p>
<p><input type="submit" value="verzenden"></p>
</form>
</body>
</html>
Reacties
0