Preselecting Multiple Selection Lists
if (isset($_POST['multilistname']) && in_array('php4',
$_POST['multilistname'])) {
echo ' selected="selected"';
}
|
When it comes to prefilling form elements, multiple selection lists are the most difficult ones to implement. This is because in $_GET or $_POST, you have an array of chosen options; so you cannot just compare strings, but you have to search for the specified value in the array. Luckily, PHP offers something suitable in the form of the in_array() function. So, the effort required is not much more than with the other form elements: If the current value is in $_GET/$_POST, print out the selected attribute.
Prefilling Multiple Selection Lists (select-multiple.php; excerpt)
<select name="multilistname[]" multiple="multiple"
size="3">
<option value="php3"<?php
if (isset($_POST['multilistname']) &&
in_array('php3', $_POST['multilistname'])) {
echo ' selected="selected"';
}
?>>PHP 3</option>
<option value="php4"<?php
if (isset($_POST['multilistname']) &&
in_array('php4', $_POST['multilistname'])) {
echo ' selected="selected"';
}
?>>PHP 4</option>
<option value="php5"<?php
if (isset($_POST['multilistname']) &&
in_array('php5', $_POST['multilistname'])) {
echo ' selected="selected"';
}
?>>PHP 5</option>
</select>
However, the HTML form must be specially prepared to allow PHP to access the data from the multiple selection list: The value of the name attribute has to end with [], hinting to PHP that it should expect an array of values, not just a string value. Accessing the list data, however, can still be done using $_GET['listname']/$_POST['listname'] and not $_GET['listname[]']/$_POST['listname[]'], as shown in the preceding code.
If you want to prefill the list with data from the cookie, you just have to use the well-known file getFormData.inc.php from the previous phrases.
It contains two additional functions that return an array instead of a string.
Retrieving Form Data from a Cookie (getFormData.inc.php; excerpt)
function getFormDataArrayGET($name) {
if (isset($_GET[$name])) {
return $_GET[$name];
} else {
$cookiedata = getCookieData();
if ($cookiedata != null &&
isset($cookiedata[$name])) {
return $cookiedata[$name];
}
}
return array();
}
function getFormDataArrayPOST($name) {
if (isset($_POST[$name])) {
return $_POST[$name];
} else {
$cookiedata = getCookieData();
if ($cookiedata != null &&
isset($cookiedata[$name])) {
return $cookiedata[$name];
}
}
return array();
}
These functions return an array for multiple lists that you can use as you did in select-multiple.php.
Prefilling Multiple Selection Lists (select-multiple-cookie.php; excerpt)
<?php
require_once 'getFormData.inc.php';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/
DTD/
xhtml1-transitional.dtd">
<html>
<head>
<title>Forms</title>
</head>
<body>
<form method="post" action="
<?php echo htmlspecialchars($_SERVER['PHP_SELF']);
?>">
<select name="multilistname[]"
multiple="multiple" size="3">
<option value="php3"<?php
if (in_array('php3', getFormDataArrayPOST
('multilistname'))) {
echo ' selected="selected"';
}
?>>PHP 3</option>
<option value="php4"<?php
if (in_array('php4', getFormDataArrayPOST
('multilistname'))) {
echo ' selected="selected"';
}
?>>PHP 4</option>
<option value="php5"<?php
if (in_array('php5', getFormDataArrayPOST
('multilistname'))) {
echo ' selected="selected"';
}
?>>PHP 5</option>
</select><br />
<input type="submit" />
</form>
</body>
</html>
|