FifeBirder Posted November 8, 2010 Share Posted November 8, 2010 Evening People I have this drop downbox on a HTML page, it is populated from a PHP page, if the user makes a selection i want that selection to be retained once the page refreshed. What i have is while ($row = $db->sql_fetchrow($result)) { if(isset($_GET["REGION_FILTER"]) AND $_GET["REGION_FILTER"] = $row['region'] AND strlen($_GET["REGION_FILTER"]) > 0) //if($region_filter = $row['region'] AND strlen($region_filter) > 0) { $region_filter_options .= '<option value="' . $row['region'] . '" SELECTED>' . $row['region'] . '</option>'; } else { $region_filter_options .= '<option value="' . $row['region']. '">' . $row['region'] . '</option>'; } } REGION_FILTER is the ID of the option box The drop down box is populated from the database but i cant seem to get the selected bit working. Can someone help identify what i have done wrong ? regards Link to comment https://forums.phpfreaks.com/topic/218133-an-option-problem/ Share on other sites More sharing options...
OldWest Posted November 8, 2010 Share Posted November 8, 2010 When you say "once the page refreshed"... Are you referring to if someone refreshes the browser? or onto a new page following this form? Link to comment https://forums.phpfreaks.com/topic/218133-an-option-problem/#findComment-1131894 Share on other sites More sharing options...
FifeBirder Posted November 8, 2010 Author Share Posted November 8, 2010 This is the code on the HTML page <form action="alertz_VIP.php" method="GET"> <select name=REGION_FILTER size="1" id=REGION_FILTER onchange="this.form.submit()"> <option value="">Select </option> <option value={REGION_FILTER}></option> </select> As you can see changing the dropdown option results in the page being submitted. The Alertz_VIP.php page populates the {REGION_FILTER} Field if that makes sense Link to comment https://forums.phpfreaks.com/topic/218133-an-option-problem/#findComment-1131896 Share on other sites More sharing options...
OldWest Posted November 8, 2010 Share Posted November 8, 2010 You need to intercept that value on the new page with $_GET, give it a variable name, and echo it out in the select box as SELECTED on the new page: <SELECT NAME="partnumber"> <OPTION VALUE="7382" >steam turbine <OPTION VALUE="2928" >resistor array <OPTION VALUE="3993" SELECTED >widget analyzer <OPTION VALUE="9398" >fiber identifier </SELECT> Link to comment https://forums.phpfreaks.com/topic/218133-an-option-problem/#findComment-1131901 Share on other sites More sharing options...
FifeBirder Posted November 8, 2010 Author Share Posted November 8, 2010 I have read that artcle somewhere and that is why i wrote this if(isset($_GET["REGION_FILTER"]) AND $_GET["REGION_FILTER"] = $row['region'] AND strlen($_GET["REGION_FILTER"]) > 0) //if($region_filter = $row['region'] AND strlen($region_filter) > 0) { $region_filter_options .= '<option value="' . $row['region'] . '" SELECTED>' . $row['region'] . '</option>'; } else { $region_filter_options .= '<option value="' . $row['region']. '">' . $row['region'] . '</option>'; } if i am correct this translates to if(isset($_GET["REGION_FILTER"]) AND $_GET["REGION_FILTER"] = $row['region'] AND strlen($_GET["REGION_FILTER"]) > 0) if REGION_FILTER is set and REGION_FILTER = field.Region and the Length of REGION_FILTER >0 then $region_filter_options .= '<option value="' . $row['region'] . '" SELECTED>' . $row['region'] . '</option>'; let region_filter_options = <option value= " field.Region " SELECTED> field.Region </option>'; this should only be done once a match of value selected is found in field.region. else this gets done $region_filter_options .= '<option value="' . $row['region']. '">' . $row['region'] . '</option>'; ( Which is non SELECTED ) for all other field.region values Does that make sense or have i got this completely wrong Link to comment https://forums.phpfreaks.com/topic/218133-an-option-problem/#findComment-1131910 Share on other sites More sharing options...
Psycho Posted November 8, 2010 Share Posted November 8, 2010 Well, the problem is that you are doing an ASSIGNMENT in the IF condition and not a COMPARISON (i.e. a single equal sign instead of a double equal sign). But, you are making the logic in that IF statemetn way more complicated than it needs to be. You don't need to test if the value has a string length > 0 since you are already testing if it is equal to one of the available options. Also, I would advise against having to completely different lines of code for creating the options. It will only lead to problems down the road. Here is a more elegant solution. while ($row = $db->sql_fetchrow($result)) { $selected = (isset($_GET['REGION_FILTER']) AND $_GET['REGION_FILTER']==$row['region']) ? ' selected="selected"' : '' ; $region_filter_options .= "<option value=\"{$row['region']}{$selected}>{$row['region']}</option>\n"; } Link to comment https://forums.phpfreaks.com/topic/218133-an-option-problem/#findComment-1131913 Share on other sites More sharing options...
FifeBirder Posted November 8, 2010 Author Share Posted November 8, 2010 mjdamato Working alot better, stable drop downs, but what i am finding is that the drop down box is not showing all selections, it is as if it is missing every second one if that makes sense. The full Alertz_VIP.php is :- <?php /*************************************************************************** * Alertz.php * ------------------- * ***************************************************************************/ define('IN_ICYPHOENIX', true); if (!defined('IP_ROOT_PATH')) define('IP_ROOT_PATH', './'); if (!defined('PHP_EXT')) define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1)); // Include files include(IP_ROOT_PATH . 'common.' . PHP_EXT); include_once(IP_ROOT_PATH . 'includes/functions_groups.' . PHP_EXT); include(IP_ROOT_PATH . '/alerts/alertsconfig.'.PHP_EXT); // Page Authorise $cms_page_id = 'scotalertz'; $cms_page_nav = (!empty($cms_config_layouts[$cms_page_id]['page_nav']) ? true : false); $cms_global_blocks = (!empty($cms_config_layouts[$cms_page_id]['global_blocks']) ? true : false); $cms_auth_level = (isset($cms_config_layouts[$cms_page_id]['view']) ? $cms_config_layouts[$cms_page_id]['view'] : AUTH_ALL); check_page_auth($cms_page_id, $cms_auth_level); // Obtain Select Criteria $temp_region_filter = $_GET["REGION_FILTER"]; $temp_species_filter = $_GET["SPECIES_FILTER"]; $temp_date_filter = $_GET["DATE_FILTER"]; // Filter characters if required $region_filter =str_replace(" & ", "&", $temp_region_filter); $species_filter = $temp_species_filter; $date_filter = $temp_date_filter; // standard session management $userdata = session_pagestart($user_ip); // Check to see if user is logged in if ((!$userdata['session_logged_in']) ) // No he isnt { redirect(append_sid(LOGIN_MG . '?redirect=alerts.' . PHP_EXT)); } else // Yes they are { init_userprefs($userdata); // set page title $page_title = "ScotBird alerts - VIP's ONLY !! "; // standard page header include(IP_ROOT_PATH . 'includes/page_header.'.PHP_EXT); // Connect to the database $db = new sql_db($alerts_mysql_host,$alerts_mysql_username,$alerts_mysql_password,$alerts_mysql_db,false); if(!$db) { die("Database Connection Failed:- Please Contact Site Admin" . mysql_error()); } $template->set_filenames(array('body' => 'alertz_VIP.tpl')); // Some consistant Variables $year =date("Y"); $month = date("m"); $day = date("d"); function datedropdown_funct($switchstring) { $year =date("Y"); $month = date("m"); $day = date("d"); switch ($switchstring) { case "Today": $day = date("d")-1; $retval = '<option value="">Select</option><option value="Today" SELECTED>Today</option><option value="Last 48hrs">Last 48hrs</option><option value="Last week">Last Week</option><option value="last month">Last Month</option>'; break; case "Last 48hrs": $day = date("d")-2; $retval = '<option value="">Select</option><option value="Today">Today</option><option value="Last 48hrs" SELECTED>Last 48hrs</option><option value="Last week">Last Week</option><option value="last month">Last Month</option>'; break; case "Last week": $day = date("d")-8; $retval = '<option value="">Select</option><option value="Today">Today</option><option value="Last 48hrs">Last 48hrs</option><option value="Last week" SELECTED>Last Week</option><option value="last month">Last Month</option>'; break; case "last month": $month = date("m")-2; $retval = '<option value="">Select</option><option value="Today">Today</option><option value="Last 48hrs">Last 48hrs</option><option value="Last week">Last Week</option><option value="last month" SELECTED>Last Month</option>'; break; case "last 3 months": $month = date("m")-4; $retval = '<option value="">Select</option><option value="Today">Today</option><option value="Last 48hrs">Last 48hrs</option><option value="Last week">Last Week</option><option value="last month">Last Month</option><option value="last 3 months" SELECTED>Last 3 Month</option>'; break; default: // Default is the last 48hrs $day = date("d")-1; } $thestartdatecalc = $year . '-' .$month . '-' . $day ; echo $thestartdate; return array($retval, $thestartdatecalc); } $theenddate = $year . '-' .$month . '-' . $day ; // Check if the Date is Set if(isset($date_filter) and strlen($date_filter) > 0) { // The date is Set echo "Date is Set :- " . $date_filter . " - "; // Check to see if Region is set if(isset($region_filter) and strlen($region_filter) > 0) { // The region is set echo "Region is Set :- " . $region_filter . " - "; // Check to see if species is set if(isset($species_filter) and strlen($species_filter) > 0) { // The species is set echo "Species is Set :- " . $species_filter . " - "; list($arr1, $arr2) = datedropdown_funct($date_filter); $date_filter_options= $arr1; $thestartdate.= $arr2; $sql2 = "SELECT * FROM alerts WHERE Date BETWEEN '".$thestartdate ."' AND '".$theenddate ."' AND region = '".$region_filter ."' AND species = '".$species_filter ."' ORDER BY Date DESC, time DESC "; $sql3 = "SELECT DISTINCT species FROM alerts WHERE Date BETWEEN '".$thestartdate ."' AND '".$theenddate ."' AND region = '". $region_filter . "' GROUP BY species"; $sql = "SELECT DISTINCT region FROM alerts WHERE Date BETWEEN '".$thestartdate ."' AND '".$theenddate ."' AND species = '".$species_filter ."' GROUP BY region"; } else { // The species is Not Set echo "Species is NOT set - "; list($arr1, $arr2) = datedropdown_funct($date_filter); $date_filter_options= $arr1; $thestartdate.= $arr2; $sql2 = "SELECT * FROM alerts WHERE Date BETWEEN '".$thestartdate ."' AND '".$theenddate ."' AND region = '".$region_filter ."' ORDER BY Date DESC, time DESC "; $sql3 = "SELECT DISTINCT species FROM alerts WHERE Date BETWEEN '".$thestartdate ."' AND '".$theenddate ."' AND region = '". $region_filter . "' GROUP BY species"; $sql = "SELECT DISTINCT region FROM alerts WHERE Date BETWEEN '".$thestartdate ."' AND '".$theenddate ."' GROUP BY region"; } } else { // The region is not set echo "Region is NOT set - "; // Check to see if species is set if(isset($species_filter) and strlen($species_filter) > 0) { // The species is set echo "Species is Set :- " . $species_filter . " - "; list($arr1, $arr2) = datedropdown_funct($date_filter); $date_filter_options= $arr1; $thestartdate.= $arr2; $sql2 = "SELECT * FROM alerts WHERE Date BETWEEN '".$thestartdate ."' AND '".$theenddate ."' AND species = '".$species_filter ."' ORDER BY Date DESC, time DESC "; $sql3 = "SELECT DISTINCT species FROM alerts WHERE Date BETWEEN '".$thestartdate ."' AND '".$theenddate ."' GROUP BY species"; $sql = "SELECT DISTINCT region FROM alerts WHERE Date BETWEEN '".$thestartdate ."' AND '".$theenddate ."' AND species = '".$species_filter ."' GROUP BY region"; } else { // The species is NOT Set echo "Species is NOT set - "; list($arr1, $arr2) = datedropdown_funct($date_filter); $date_filter_options= $arr1; $thestartdate.= $arr2; $sql2 = "SELECT * FROM alerts WHERE Date BETWEEN '".$thestartdate ."' AND '".$theenddate ."' ORDER BY Date DESC, time DESC "; $sql3 = "SELECT DISTINCT species FROM alerts WHERE Date BETWEEN '".$thestartdate ."' AND '".$theenddate ."' GROUP BY species"; $sql = "SELECT DISTINCT region FROM alerts WHERE Date BETWEEN '".$thestartdate ."' AND '".$theenddate ."' GROUP BY region"; } } } else { // The date is not set $date_filter_options = '<option value="">Select</option><option value="Today">Today</option><option value="Last 48hrs">Last 48hrs</option><option value="Last week">Last Week</option><option value="last month">Last Month</option>'; echo "Date is NOT set - "; // Check to see if Region is set if(isset($region_filter) and strlen($region_filter) > 0) { // The region is set echo "Region is Set :- " . $region_filter . " - "; // Check to see if species is set if(isset($species_filter) and strlen($species_filter) > 0) { // The species is Set echo "Species is Set :- " . $species_filter . " - "; } else { // The species is not set echo "Species is NOT set - "; } } else { // The region is Set echo "Region is NOT set - "; // Check to see if species is set if(isset($species_filter) and strlen($species_filter) > 0) { // The species is Set echo "Species is Set :- " . $species_filter . " - " ; // Build the SQL strings $sql2 = "SELECT * FROM alerts WHERE species ='".$species_filter ."' ORDER BY Date DESC, time DESC "; $sql = "SELECT DISTINCT region FROM alerts GROUP BY region"; $sql3 = "SELECT DISTINCT species FROM alerts WHERE species ='".$species_filter ."' GROUP BY species"; // } else { // The species is not set echo "Species is NOT set - "; // We will only display 5 days worth of Data $year =date("Y"); $month = date("m"); $day = date("d")-5; $thestartdate = $year . '-' .$month . '-' . $day ; // Build the SQL strings $sql2 = "SELECT * FROM alerts WHERE Date BETWEEN '".$thestartdate ."' AND '".$theenddate ."' ORDER BY Date DESC, time DESC "; $sql3 = "SELECT DISTINCT species FROM alerts GROUP BY species"; $sql = "SELECT DISTINCT region FROM alerts GROUP BY region"; } } } $result2 = $db->sql_query($sql2); if (!($result2 = $db->sql_query($sql2))) { die("Database Query Failed" . mysql_error()); } $i = 1; while ( $row2 = $db->sql_fetchrow($result2) ) { $template->assign_block_vars('alerts', array( 'POS' => $i , 'REGION' => str_replace("&", " & ", $row2['region']), 'SPECIES' => str_replace("%", "'",$row2['species']), 'DATE' => $row2['Date'], 'TIME' => $row2['time'], 'COMMENTS' => str_replace("'", "%",$row2['comments']), ) ); $i++; } $template->assign_vars(array( 'USERNAME' => htmlspecialchars($userdata[username]), 'REGION_FILTER' => str_replace("&", " & ", $region_filter_options), 'SPECIES_FILTER' => $species_filter_options, ) ); $result = $db->sql_query($sql); if (!($result = $db->sql_query($sql))) { die("Database Query Failed" . mysql_error()); } // This is where you would add a new VARS Array if you intend to use your own custom VARS. while ($row = $db->sql_fetchrow($result)) { $selected = (isset($_GET['REGION_FILTER']) AND $_GET['REGION_FILTER']==$row['region']) ? ' selected="selected"' : '' ; $region_filter_options .= "<option value=\"{$row['region']}{$selected}>{$row['region']}</option>\n"; } $result = $db->sql_query($sql3); if (!($result = $db->sql_query($sql3))) { die("Database Query Failed" . mysql_error()); } // This is where you would add a new VARS Array if you intend to use your own custom VARS. while ($row = $db->sql_fetchrow($result)) { $selected = (isset($_GET['SPECIES_FILTER']) AND $_GET['SPECIES_FILTER']==$row['species']) ? ' selected="selected"' : '' ; $species_filter_options .= "<option value=\"{$row['species']}{$selected}>{$row['species']}</option>\n"; } $template->assign_vars(array( 'USERNAME' => htmlspecialchars($userdata[username]), 'REGION_FILTER' => str_replace("&", " & ", $region_filter_options), 'SPECIES_FILTER' => $species_filter_options, ) ); $template->assign_vars(array( 'USERNAME' => htmlspecialchars($userdata[username]), 'DATE_FILTER' => $date_filter_options, ) ); // Build the page $template->pparse('body'); // standard page footer include(IP_ROOT_PATH . 'includes/page_tail.'.PHP_EXT); } ?> regards Link to comment https://forums.phpfreaks.com/topic/218133-an-option-problem/#findComment-1131918 Share on other sites More sharing options...
Psycho Posted November 8, 2010 Share Posted November 8, 2010 As my signature states, I don't test my code, so there may be typos. I expect that once the code is dropped into the application that the person with the code can find and fix them. Anyway, I left out the ending double quote for the value inside the option tag. This line should be correct: $region_filter_options .= "<option value=\"{$row['region']}\"{$selected}>{$row['region']}</option>\n"; Link to comment https://forums.phpfreaks.com/topic/218133-an-option-problem/#findComment-1131940 Share on other sites More sharing options...
FifeBirder Posted November 8, 2010 Author Share Posted November 8, 2010 mjdamato thanks alot for that more elegant solution. I am still digesting it but do get the jist of it. One little problem i have with the drop down box now is that if i select the firt option it does not work, all others do. Any ideas ? regards Link to comment https://forums.phpfreaks.com/topic/218133-an-option-problem/#findComment-1131972 Share on other sites More sharing options...
OldWest Posted November 8, 2010 Share Posted November 8, 2010 Do you have a blank value in your mysql table field where this is being pulled from? Or you can probably reset() the fetched array back at 0... Link to comment https://forums.phpfreaks.com/topic/218133-an-option-problem/#findComment-1131976 Share on other sites More sharing options...
FifeBirder Posted November 8, 2010 Author Share Posted November 8, 2010 Blank value in mySQL , no Reset -- Can you explain ? Link to comment https://forums.phpfreaks.com/topic/218133-an-option-problem/#findComment-1131982 Share on other sites More sharing options...
OldWest Posted November 8, 2010 Share Posted November 8, 2010 I did not really read through your entire thread in detail, so I don't know if this will even be of any use, but if the array pointer is starting at position 1 as opposed to 0, then your problem MIGHT happen, so there is a function to reset the array pointer back at 0 which is reset() .. you can find out more about it here: http://php.net/manual/en/function.reset.php Link to comment https://forums.phpfreaks.com/topic/218133-an-option-problem/#findComment-1131983 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.