How to pass selected options to .php file when two scrolling lists appear at different times on page

From: Date: Wed, 26 Dec 2007 23:15:33 +0000
Subject: How to pass selected options to .php file when two scrolling lists appear at different times on page
Groups: php.general 
Request: Send a blank email to php-general+get-266288@lists.php.net to get a copy of this message
Hi all, I have two database tables (I don't think it is a database problem, by the way) data_series and data_sets. data_sets is a child of data_series. I want my PHP form to display a scrolling list of all the data series in the database. The user will then select a subset of these, press a submit button, and be shown a scrolling list of all the child data sets of the selected data series. Problem is, when I code this following an example in PHP programming, the data series are displayed properly in a <select> named 'data_series'. The scrolling list called 'data_sets' is drawn properly. But when the program tries to retrieve the selected data_series via $_GET[;data_series'] it gets the label 'Data Sets' of the second scrollling list in the series. I have looked at this for an hour now, trying various tweaks of the code, and cannot figure out what is wrong. Here is my php code for the page:
<?php error_reporting(E_ALL); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Data Set</title> </head> <?php require_once("./config_file.php"); require_once("./lib_mem.php"); require_once("./lib_mem2.php"); require_once("./lib_delete.php"); ?> <body> <div align="center"> <h2>Select Data Set</h2> </div> <form id="series_select" name="series_select" method="GET" action="<?php echo $_SERVER['PHP_SELF']?>"> <?php if (array_key_exists('get_data_sets', $_GET)){ ?> <?php $data_series_id_list = implode($_GET['data_series'], ','); echo "data_series_id_list = $data_series_id_list\n"; $select_data_set_cmd = "SELECT ds_data_series_id, ds_name ".
                         "FROM data_sets ".
                         "WHERE ds_data_series_id IN (" . $data_series_id_list . ")".
                          "ORDER BY ds_name";
echo "select_data_set_cmd = $select_data_set_cmd\n"; echo_scrolling_list_from_database ('data_set',
                                      '',
                                     'Data Sets',
                                      15,
                                      0,
                                      $pg,
                                      $select_data_set_cmd,
                                      array());
?> <p>&nbsp;</p> <p> <?php echo_a("./edit_data_set.php", "Edit data set"); ?> </p> <p>To edit the data for a data set, go to the main menu and select Data &gt;&gt;Enter New or Edit Existing.</p> <p> <?php echo_a("./display_data_set_example.html","Display data set and data"); ?> </p> <p align="left"> <?php echo_a("./index.html", "Home"); ?> </p> <?php } else {
    $select_data_series_cmd = "SELECT sr_data_series_id, sr_name FROM data_series ORDER BY sr_name";
    echo_scrolling_list_from_database('data_series',
                                      '',
                                      'Data Series',
                                      15,
                                      1,
                                      $pg,
                                      $select_data_series_cmd,
                                      array());
    echo_submit('get_data_sets', 'Get Data Sets');
} ?> </form> </body> </html>
                                                   
The functions I call from the lib_mem2 file are:
// echo_scrolling_list_tag // echo_scrolling_list_head // echo_option
//    these functions together are used to produce the HTML code to construct
//    a scrolling list from items selected from a database table.  The select cmd
//    is given as one of the parameters to the echo_scrolling_list function.  The first
//    column selected in the list must be the primary key id of the table.  The remaining
//    selected values are formatted into a colon separated string.  They appear as the rows
//    of the scrolling list.  The id is stored as the value of the row.
//    If multiple selections are enabled the scrolling list returns an array.  Else it
//    returns a scalar.
//
//    echo_scrolling_list_tag
//    constructs html tag for scrolling list
//    Parameters:
//        name           name of scrolling list (should be name of primary id of table)
//        class          CSS class
//        label          label for scrolling list
//        size           number of rows to display
//        multiple_OK    true if multiple selections are allowed
//    Action:  echo the <select name=...> tag for a scrolling list
// function echo_scrolling_list_tag($name,
                                 $class,
                                 $label,
                                 $size,
                                 $multiple_OK){
    $for_phrase = 'for="' . $name . '"';
    echo "<label " . $for_phrase . ">" . $label . "</label>";
    $multiple_OK_braces = $multiple_OK ? "[]" : '';
    $name_phrase = 'name="' . $name . $multiple_OK_braces . '"';
    // call with $name[] to return array if multiple, else return
    // single value
    $class_phrase = 'class="' . $class . '"';
    $size_phrase  = 'size=' . $size;
    $multiple_phrase = $multiple_OK ? 'multiple' : '';
echo "name_phrase = $name_phrase, multiple_phrase = $multiple_phrase";
    return '';
}
//    echo_option_tag
//      constructs html tag for option of a scrolling list
//      Parameters:
//          id_colon_display      string formatted as id : value.  id is primary key of table value
//                              was taken from
//          default_ids         array of ids of rows to be highlighted when scrolling list is displayed
//      Action:  construct the <option> tag for a row in a scrolling list.  The id will be the html 'value' of
//               the tag.  The value given in the id_colon_display parameter will be displayed as the row entry.
//               If the id of a row is in the default_ids array, it will be marked 'selected'
function echo_option_tag($id_colon_display,
                         $default_ids){
    $id_display = array();
    ereg('^([^:]+) : (.*)$', $id_colon_display, $id_display);
    $id = $id_display[1];
    $display = $id_display[2];
    $selected = in_array($id, $default_ids)? 'selected' : '';
    echo "<option value=".$id." ".$selected.'/>'.$display."</option>\n";
    return '';
} //
//    echo_scrolling_list_from_database
//    Parameters:
//       name                           name of scrolling list (should be name of primary id of table)
//       class                          CSS class
//       label                          label for scrolling list
//       size                           number of rows to display
//       multiple_OK                    true if multiple selections are allowed from the list
//       pg                             open database connection
//       select_options_cmd                     SQL statement used to retrieve values for the rows
//       default_ids                    ids of rows to be highlighted when scrolling list is displayed
//    Action:  display scrolling list with formatted rows of values retrieved by select_cmd.
function echo_scrolling_list_from_database(                                                                                         $name,
                                           $class,
                                           $label,
                                           $size,
                                           $multiple_OK,
                                           $pg,
                                           $select_options_cmd,
                                           $default_ids){
        echo_scrolling_list_tag($name,
                                $class,
                                $label,
                                $size,
                                $multiple_OK);
       $id_colon_displays = do_select_and_format_many($pg, $select_options_cmd);
       foreach ($id_colon_displays as $id_colon_display){
           echo_option_tag($id_colon_display, $default_ids);
       }
       echo "</select>";
}
Thanks! Mary Anderson

« previous php.general (#266288) next »