Reputation: 135
I want to create a drop down list that allows the user to choose a Start and End "Year, Month, Day" as follows. When the page is updated, the choices are reverted to the "original" choices. How can I allow those selected values to save and remain when the page is updated?
<?php
if (isset($_POST['action']))
{
$action = $_POST['action'];
$startyear = $_POST['startyear'];
$startmonth = $_POST['startmonth'];
$startday = $_POST['startday'];
$endyear = $_POST['endyear'];
$endmonth = $_POST['endmonth'];
$endday = $_POST['endday'];
}
else
{
$action = "";
if (!isset($_POST['startyear']) || !isset($_POST['startmonth']) || !isset($_POST['startday'])
|| !isset($_POST['endyear']) || !isset($_POST['startmonth']) || !isset($_POST['startday']))
{
$startyear = "";
$startmonth = "";
$startday = "";
$endyear = "";
$endmonth = "";
$endday = "";
}
else
{
$startyear = $_POST['startyear'];
$startmonth = $_POST['startmonth'];
$startday = $_POST['startday'];
$endyear = $_POST['endyear'];
$endmonth = $_POST['endmonth'];
$endday = $_POST['endday'];
}
}
if ($action == "update")
{
echo "<h3>Start: $startyear-$startmonth-$startday | End: $endyear-$endmonth-$endday</h3>";
}
else
{
if ($startyear == "" || $endyear == "")
{
// something belongs here...not sure
}
echo "<h3>Start: $startyear-$startmonth-$startday | End: $endyear-$endmonth-$endday</h3>";
?>
Selections for start/end year,month,day are here:
<form name='update' action='testing.php' method='POST'>
Start: <select name='startyear'>
<option value="1">2012</option>
<option value="2">2011</option>
<option value="3">2010</option>
<option value="4">2009</option>
<option value="5">2008</option>
<option value="6">2007</option>
<option value="7">2006</option>
<option value="8">2005</option>
<option value="9">2004</option>
<option value="10">2003</option>
<option value="11'>2002</option>
<option value="12">2001</option>
<option value="13">2000</option>
<option value="14">1999</option>
<option value="15">1998</option>
</select>
<select name='startmonth'>
<option value="1">01</option>
<option value="2">02</option>
<option value="3">03</option>
<option value="4">04</option>
<option value="5">05</option>
<option value="6">06</option>
<option value="7">07</option>
<option value="8">08</option>
<option value="9">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<select name='startday'>
<option value="1">01</option>
<option value="2">02</option>
<option value="3">03</option>
<option value="4">04</option>
<option value="5">05</option>
<option value="6">06</option>
<option value="7">07</option>
<option value="8">08</option>
<option value="9">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
<br>
End:<select name ='endyear'>
<option value="1">2012</option>
<option value="2">2011</option>
<option value="3">2010</option>
<option value="4">2009</option>
<option value="5">2008</option>
<option value="6">2007</option>
<option value="7">2006</option>
<option value="8">2005</option>
<option value="9">2004</option>
<option value="10">2003</option>
<option value="11'>2002</option>
<option value="12">2001</option>
<option value="13">2000</option>
<option value="14">1999</option>
<option value="15">1998</option>
</select>
<select name='endmonth'>
<option value="1">01</option>
<option value="2">02</option>
<option value="3">03</option>
<option value="4">04</option>
<option value="5">05</option>
<option value="6">06</option>
<option value="7">07</option>
<option value="8">08</option>
<option value="9">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<select name='endday'>
<option value="1">01</option>
<option value="2">02</option>
<option value="3">03</option>
<option value="4">04</option>
<option value="5">05</option>
<option value="6">06</option>
<option value="7">07</option>
<option value="8">08</option>
<option value="9">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
<input type='submit' value='Compare'/>
</form>
<?php
}
?>
Upvotes: 0
Views: 210
Reputation: 46602
Instead of having such large HTML let php render it for you, this also allows you to determine if the selected attribute is rendered in the option.
To keep the values selected in the form the form needs tobe posted back to the same php script its being rendered from action=''
, and a little logic is required on the posted values to check if the value equals itself, check the form below.
<?php
//Build an array of values for your forms
$year = range(1998,2012);
$month = range(01,12);
$day = range(01,31);
//Handle POST, just an example
if($_SERVER['REQUEST_METHOD']=='POST'){
foreach($_POST as $key=>$value){
if(is_numeric($value)){
$$key = $value;
}
}
/**
* All POST keys like: startmonth ect will now be php variables like
* $startmonth
*/
//Do somthing with $startmonth ect
}
//A more tidy form
?>
<form name='update' action='' method='POST'>
Start: <select name='startyear'>
<?php foreach(array_reverse($year) as $y):?>
<option value="<?=$y?>"<?=((isset($startyear) && $startyear == $y)?' selected':null)?>><?=$y?></option>
<?php endforeach;?>
</select>
<select name='startmonth'>
<?php foreach($month as $m): $m = str_pad($m, 2, "0", STR_PAD_LEFT);?>
<option value="<?=$m;?>"<?=((isset($startmonth) && $startmonth == $m)?' selected':null)?>><?=$m;?></option>
<?php endforeach;?>
</select>
<select name='startday'>
<?php foreach($day as $d): $d = str_pad($d, 2, "0", STR_PAD_LEFT);?>
<option value="<?=$d;?>"<?=((isset($startday) && $startday == $d)?' selected':null)?>><?=$d;?></option>
<?php endforeach;?>
</select>
<br>
End: <select name='endyear'>
<?php foreach(array_reverse($year) as $y):?>
<option value="<?=$y?>"<?=((isset($endyear) && $endyear == $y)?' selected':null)?>><?=$y?></option>
<?php endforeach;?>
</select>
<select name='endmonth'>
<?php foreach($month as $m): $m = str_pad($m, 2, "0", STR_PAD_LEFT);?>
<option value="<?=$m;?>"<?=((isset($endmonth) && $endmonth == $m)?' selected':null)?>><?=$m;?></option>
<?php endforeach;?>
</select>
<select name='endday'>
<?php foreach($day as $d): $d = str_pad($d, 2, "0", STR_PAD_LEFT);?>
<option value="<?=$d;?>"<?=((isset($endday) && $endday == $d)?' selected':null)?>><?=$d;?></option>
<?php endforeach;?>
</select>
<input type='submit' value='Compare'/>
</form>
Upvotes: 1
Reputation: 10732
You need to add a little more to the HTML that's generating your page, to set up a default selected value for your dropdowns.
You'll need something like this:
<option value="1" <?php if ($_POST["startyear"] = "1") echo "selected"; ?>>2012</option>
You'll need to do that for each option, to see if this option's value is the same as the one from $_POST
; you might want to look into using a for
loop to create the HTML, in that case.
Upvotes: 1