Preselecting Multiple Selection Lists


[View full width]

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> 




PHP Phrasebook
PHP Phrasebook
ISBN: 0672328178
EAN: 2147483647
Year: 2005
Pages: 193

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net