HTML and PHP, editing birthday - php

If I store birthday as 1990-01-01
When a user edits his profile, how do i show his current birthday?
<select name="ctl00$ctl00$cphContent$cphContent$cphContentLeft$DatePicker1$days" id="ctl00_ctl00_cphContent_cphContent_cphContentLeft_DatePicker1_days">
<option selected="selected" value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</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>
<select name="ctl00$ctl00$cphContent$cphContent$cphContentLeft$DatePicker1$months" id="ctl00_ctl00_cphContent_cphContent_cphContentLeft_DatePicker1_months" style="width:100px;">
<option selected="selected" value="1">januar</option>
<option value="2">februar</option>
<option value="3">marts</option>
<option value="4">april</option>
<option value="5">maj</option>
<option value="6">juni</option>
<option value="7">juli</option>
<option value="8">august</option>
<option value="9">september</option>
<option value="10">oktober</option>
<option value="11">november</option>
<option value="12">december</option>
</select>
<select name="ctl00$ctl00$cphContent$cphContent$cphContentLeft$DatePicker1$years" id="ctl00_ctl00_cphContent_cphContent_cphContentLeft_DatePicker1_years">
<option selected="selected" value="1950">1950</option>
<option value="1951">1951</option>
<option value="1952">1952</option>
<option value="1953">1953</option>
<option value="1954">1954</option>
<option value="1955">1955</option>
<option value="1956">1956</option>
<option value="1957">1957</option>
<option value="1958">1958</option>
<option value="1959">1959</option>
<option value="1960">1960</option>
<option value="1961">1961</option>
<option value="1962">1962</option>
<option value="1963">1963</option>
<option value="1964">1964</option>
<option value="1965">1965</option>
<option value="1966">1966</option>
<option value="1967">1967</option>
<option value="1968">1968</option>
<option value="1969">1969</option>
<option value="1970">1970</option>
<option value="1971">1971</option>
<option value="1972">1972</option>
<option value="1973">1973</option>
<option value="1974">1974</option>
<option value="1975">1975</option>
<option value="1976">1976</option>
<option value="1977">1977</option>
<option value="1978">1978</option>
<option value="1979">1979</option>
<option value="1980">1980</option>
<option value="1981">1981</option>
<option value="1982">1982</option>
<option value="1983">1983</option>
<option value="1984">1984</option>
<option value="1985">1985</option>
<option value="1986">1986</option>
<option value="1987">1987</option>
<option value="1988">1988</option>
<option value="1989">1989</option>
<option value="1990">1990</option>
<option value="1991">1991</option>
<option value="1992">1992</option>
<option value="1993">1993</option>
<option value="1994">1994</option>
<option value="1995">1995</option>
</select>
So it has the user's birthday as selected=.
Its stored in the database and i get out the full birthday like this:
<?php echo $v["birthday"]; ?>

Courtesy to “ Richard Fearn” and “Karem”, I have completed the month and year combo box. Full source code is below:
<?php
$month = date("n"); //without leading zero(o)
$year = date("Y"); //four digit format
$st_year = "2010"; //Starting Year
$month_names = array("January", "February", "March","April", "May", "June", "July", "August", "September", "October", "November", "December");
?>
<form name="Month_Year" id="Month_Year" action="<?php $SITE['REQURI'] ?>" method="post">
<select name="month" id="month">
<?php
for ($i=1; $i<=12; $i++) {
echo "<option ";
if ($i == $month) {
echo "selected=\"selected\" ";
}
echo "value=\"$i\">", $month_names[$i-1], "</option>\n";
}
?>
</select>
<select name="year" id="year">
<?php
for ($i=$st_year; $i<=$year; $i++) {
echo "<option ";
if ($i == $year) {
echo "selected=\"selected\" ";
}
echo "value=\"$i\">$i</option>\n";
}
?>
</select>
<input type="submit" name="submit" id="submit" value="Submit" />
</form>
<?php
$month = $_POST['month'];
$year = $_POST['year'];
$final_val = $month ."-". $year ;
echo $final_val;
?>

If you use a for loop to generate the <option> elements, such as:
for ($i=1; $i<=31; $i++) {
echo "<option value=\"$i\">$i</option>\n";
}
Then you can just modify this slightly to insert the selected attribute on the appropriate element:
// Assuming $day is the user's day of birth
for ($i=1; $i<=31; $i++) {
echo "<option ";
if ($i == $day) {
echo "selected=\"selected\" ";
}
echo "value=\"$i\">$i</option>\n";
}
You would use similar loops for the month and year. In the case of months, where you don't want to output a number but want the month name, you can store the names in an array and index into that array in the loop:
$month_names = array("Jan", "Feb", "Mar", ...);
for ($i=1; $i<=12; $i++) {
echo "<option ";
if ($i == $month) {
echo "selected=\"selected\" ";
}
echo "value=\"$i\">", $month_names[$i-1], "</option>\n";
}
To get the day/month/year from your yyyy-mm-dd date of birth strings, use the explode function, as shown by Sabeen Malik.

Instead of using hardcoded HTML, print the combo box with a for loop and based on what the user has selected, print "selected" in the relevant "option"
to get the date parts you can do something like:
list($year , $month , $day) = explode("-" , $dob);

I thought I would add my method of doing this as an answer. Maybe it will be useful to someone.
This uses an abbreviated months array.
list() idea from Sabeen.
<?php
·
·
·
list( $dob['year'], $dob['month'], $dob['day'] ) = explode( "-", $user['birthday'] );
$user['dob'] = $dob;
?>
<select id="dob-day" name="dob-day">
<?php
foreach( range(1, 31) as $day )
printf( "<option%s>$day</option>", $day == $user['dob']['day'] ? ' selected' : '' );
?>
</select>
<select id="dob-month" name="dob-month">
<?php
$months = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
foreach( $months as $key => $month )
printf( "<option%s>$month</option>", $key + 1 == $user['dob']['month'] ? ' selected' : '' );
?>
</select>
<select id="dob-year" name="dob-year">
<?php
foreach( range( date('Y'), date('Y') - 105 ) as $year )
printf( "<option%s>$year</option>", $year == $user['dob']['year'] ? ' selected' : '' );
?>
</select>
?>

Related

PHP select menu starting from current year

I am using Bootstrap and PHP. The formmail works however the last option value (the year) in the code below prints the value from the previous option value (the day). I am not sure where I went wrong.
Values post to email:
Serve by Month.: 1
Serve by Day.: 2
Serve by Year.: 2 (year is the same as day)
<select id="Serve_by_Month" name="Serve_by_Month" required>
<option value="">Month*</option>
<?for($xx=1;$xx<13;$xx++){?>
<option value="<?=$xx?>"<?if($xx==$exp_mo)echo " selected";?>>
<?=sprintf("%02d",$xx)?>
</option>
<?}?>
</select>
<br class="hidden-lg">
<select id="Serve_by_Day" name="Serve_by_Day" required>
<option value="">Day*</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</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>
<select id="Serve_by_Year" name="Serve_by_Year" required>
<option value="">Year*</option>
<?
$year = date("Y");
$yearto = date("Y")+10;
while ($year <= $yearto)
{
echo "<option value='".$year."'>".$year."</option>";
$year++;
}
?>
</select>
It's been a long time since I did any php, but could this issue have something to do with date("Y") returning a string and not an int?
Try changing the $year assignment to
$year = intval(date("Y"));
$yearto = $year+10;
Try this, it should solve your problem
<?php
if(isset($_POST['submit-form'])){
$selectedMonth = $_POST['Serve_by_Month']; //This will give you the month
$selectedDay = $_POST['Serve_by_Day']; //This will give you the day
$selectedYear = $_POST['Serve_by_Year']; //This will give you the year
echo 'date: '.$selectedMonth.'-'.$selectedDay.'-'.$selectedYear;
echo '<br>';
}
?>
<form method="post">
<select id="Serve_by_Month" name="Serve_by_Month" required>
<option value="">Month*</option>
<?php
for($i=1;$i<13;$i++){
$selected = $i==$exp_mo ? 'selected' : '';
?>
<option value="<?=$i?>" <?=$selected?>>
<?=sprintf("%02d",$i)?>
</option>
<?php } ?>
</select>
<br class="hidden-lg">
<select id="Serve_by_Day" name="Serve_by_Day" required>
<option value="">Day*</option>
<?php
for($i = 1; $i <= 31; $i++){ ?>
<option value="<?=$i?>"><?=$i?></option>
<?php }
?>
</select>
<select id="Serve_by_Year" name="Serve_by_Year" required>
<option value="">Year*</option>
<?php
for($i = date('Y'); $i <= date('Y')+10; $i++){?>
<option value="<?=$i?>"><?=$i?></option>
<?php }
?>
</select>
<input type="submit" name="submit-form"/>
</form>

Trouble with displaying current time in timezone

Can someone explain why the page stops working if i add
<?php
date_default_timezone_set("$tidszon");
echo "Klockan är " . date("h:i:sa")" i tidszonen du angav.";
?>
to the display input section of the code? everything else works fine but if i add that the page doesnt even load..
This is the default code without timezone added:
<?php
// define variables and set to empty values
$y1 = $m1 = $d1= $y2 = $m2 = $d2= $tidszon = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$y1 = test_input($_POST["y1"]);
$m1 = test_input($_POST["m1"]);
$d1 = test_input($_POST["d1"]);
$y2 = test_input($_POST["y2"]);
$m2 = test_input($_POST["m2"]);
$d2 = test_input($_POST["d2"]);
$tidszon = test_input($_POST["tidszon"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h2>Lookup how many days between which dates?</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<br><br>
Date 1:
<br>
<select name="y1" size="4">
<option value="2001">2001</option>
<option value="2002">2002</option>
<option value="2003">2003</option>
<option value="2004">2004</option>
<option value="2005">2005</option>
<option value="2006">2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
<option value="2013">2013</option>
<option value="2014">2014</option>
</select>
<select name="m1" size="4">
<option value="1">January</option>
<option value="2">February</option>
<option value="3">Mars</option>
<option value="4">April</option>
<option value="5">May</option>
<option value="2006">June</option>
<option value="2007">July</option>
<option value="2008">August</option>
<option value="2009">September</option>
<option value="2010">October</option>
<option value="2011">November</option>
<option value="2012">December</option>
</select>
<select name="d1" size="4">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</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>
<br>
Date 2:
<br>
<select name="y2" size="4">
<option value="2001">2001</option>
<option value="2002">2002</option>
<option value="2003">2003</option>
<option value="2004">2004</option>
<option value="2005">2005</option>
<option value="2006">2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
<option value="2013">2013</option>
<option value="2014">2014</option>
</select>
<select name="m2" size="4">
<option value="1">January</option>
<option value="2">February</option>
<option value="3">Mars</option>
<option value="4">April</option>
<option value="5">May</option>
<option value="2006">June</option>
<option value="2007">July</option>
<option value="2008">August</option>
<option value="2009">September</option>
<option value="2010">October</option>
<option value="2011">November</option>
<option value="2012">December</option>
</select>
<select name="d2" size="4">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</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><br>
Timezone:<input type="text" name="tidszon">
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
echo "<h2>Your Input:</h2>";
echo "<br>";
echo "<br>";
echo "Date 1: ";
echo $y1;
echo "/";
echo $m1;
echo "/";
echo $d1;
echo "<br>";
echo "Date 2: ";
echo $y2;
echo "/";
echo $m2;
echo "/";
echo $d2;
echo "<br>";
echo "<br>";
echo "Timezone: ";
echo $tidszon;
echo "<br>";
echo "<br>";
echo "<br>";
?>
<br>
<br>
<?php
require_once 'Date.php';
try {
// create two Pos_Date objects new
$dat1 = new Pos_Date();
$dat2 = new Pos_Date();
// calculate the number of days
$dat1->setDate($y1,$m1,$d1);
$dat2->setDate($y2,$m2,$d2);
$diff = Pos_Date::dateDiff($dat1, $dat2);
$unit = abs($diff) > 1 ? 'days' : 'day';
echo "There is " . abs($diff) . " $unit between the dates";
} catch (Exception $e) {
echo $e;
}
?>
</body>
</html>
You are missing a . after date(): echo "Klockan är " . date("h:i:sa") . " i tidszonen du angav."
Put error reporting on so in the future you get informational messages concerning typos and other errors.
And on the sidenote. It's easier for you and everyone else to read the source code if you could use for example utf-8 encoding instead of html entities.
Remove after date("h:i:sa") than use and in it
<?php
date_default_timezone_set("$tidszon");
echo "Klockan är " . date("h:i:sa")." i tidszonen du angav.";
?>

Calculate age from birthdate in php 5.2 [duplicate]

This question already has answers here:
PHP calculate age
(36 answers)
Closed 9 years ago.
i can't upgrade my php to 5.3 due to upgrade costs and such. Anyone knows how to calculate age using birthdate in php 5.2 ?
I made a simple form that takes in the day month and year of a person's birthdate in select boxes. it goes in the form of dd,mm,yyyy. When submitted, the function should calculate the age of the person.
Calculate Age
<?php
if (isset($_POST['submit'])) {
$d=$_POST['day'];
$m=$_POST['month'];
$y=$_POST['year'];
//converting Inputed DOB in "dd-mm-yyyy" format
$dob=$d.' '.$m.' '.$y;
//Create a new date object with current system date
//$bday=new DateTime($dob);
//Differentiating both dates
//$age = $bday->diff(new DateTime);
//$birthdate = mysql_prep($dob);
//$c_age = $age->y;
//$dob = new DateTime('$dob');
$dob = new DateTime('$dob');
$now = new DateTime('now');
echo year_diff($now, $dob);
function year_diff($date1, $date2) {
list($year1, $dayOfYear1) = explode(' ', $date1->format('Y z'));
list($year2, $dayOfYear2) = explode(' ', $date2->format('Y z'));
return $year1 - $year2 - ($dayOfYear1 < $dayOfYear2);
}
}
?>
<form action="testage.php" method="post">
Date Of Birth:<br />
<td>Day<br/>
<select name="day"> <!-- To Select Day -->
<option value="01" selected="selected">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">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>
<option value="32">32</option>
</select>
Month
<select name="month"><!--TO Select Month-->
<option value="01" selected="selected">Jan</option>
<option value="02">Feb</option>
<option value="03">Mar</option>
<option value="04">Apr</option>
<option value="05">May</option>
<option value="06">Jun</option>
<option value="07">Jul</option>
<option value="08">Aug</option>
<option value="09">Sep</option>
<option value="10">Oct</option>
<option value="11">Nov</option>
<option value="12">Dec</option>
</select>
Year
<select name="year"><!--To Select Year-->
<option value="2013" selected="selected">2013</option>
<option value="2012">2012</option>
<option value="2011">2011</option>
<option value="2010">2010</option>
<option value="2009">2009</option>
<option value="2008">2008</option>
<option value="2007">2007</option>
<option value="2006">2006</option>
<option value="2005">2005</option>
<option value="2004">2004</option>
<option value="2003">2003</option>
<option value="2002">2002</option>
<option value="2001">2001</option>
<option value="2000">2000</option>
<option value="1999">1999</option>
<option value="1998">1998</option>
<option value="1997">1997</option>
<option value="1996">1996</option>
<option value="1995">1995</option>
<option value="1994">1994</option>
<option value="1993">1993</option>
<option value="1992">1992</option>
<option value="1991">1991</option>
<option value="1990">1990</option>
<option value="1989">1989</option>
<option value="1988">1988</option>
<option value="1987">1987</option>
<option value="1986">1986</option>
<option value="1985">1985</option>
<option value="1984">1984</option>
<option value="1983">1983</option>
<option value="1982">1982</option>
<option value="1981">1981</option>
<option value="1980">1980</option>
<option value="1979">1979</option>
<option value="1978">1978</option>
<option value="1977">1977</option>
<option value="1976">1976</option>
<option value="1975">1975</option>
<option value="1974">1974</option>
<option value="1973">1973</option>
<option value="1972">1972</option>
<option value="1971">1971</option>
<option value="1970">1970</option>
<option value="1969">1969</option>
<option value="1968">1968</option>
<option value="1967">1967</option>
<option value="1966">1966</option>
<option value="1965">1965</option>
<option value="1964">1964</option>
<option value="1963">1963</option>
<option value="1962">1962</option>
<option value="1961">1961</option>
<option value="1960">1960</option>
<option value="1959">1959</option>
<option value="1958">1958</option>
<option value="1957">1957</option>
<option value="1956">1956</option>
<option value="1955">1955</option>
<option value="1954">1954</option>
<option value="1953">1953</option>
<option value="1952">1952</option>
<option value="1951">1951</option>
<option value="1950">1950</option>
<option value="1949">1949</option>
<option value="1948">1948</option>
<option value="1947">1947</option>
<option value="1946">1946</option>
<option value="1945">1945</option>
<option value="1944">1944</option>
<option value="1943">1943</option>
<option value="1942">1942</option>
<option value="1941">1941</option>
<option value="1940">1940</option>
<option value="1939">1939</option>
<option value="1938">1938</option>
<option value="1937">1937</option>
</select>
<input type="submit" name="submit" value="Submit"/>
</form>
I think this is correct.
function CurrentAge($d, $m, $y)
{
$years = date('Y') - $y;
$months = date('m') - $m;
$days = date('d') - $d;
if (substr($months, 0, 1) == '-') {
$years = $years - 1;
$months = 12 - substr($months, 1);
}
if (substr($days, 0, 1) == '-') {
$days = date('t') - substr($days, 1);
}
return $years;
}
echo CurrentAge('21', '02', '1993');

How to setup drop down list to update and save?

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
}
?>
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>
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.

PHP: How to make "Birthday"

So in my community I really want a birthday in the profiles, but I don't know how to do it.
What I want to do is in the profiles theirs e.g "16" years old" if he chose in his settings: 1994-01-01, so like it counts out how old he is from the birthday he pickd in his settings.
How should i do this? I started out with 3 select´s, days, months & years.
<select name="days" id="days">
<option selected="selected" value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</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>
<select name="months" id="months" style="width:100px;">
<option selected="selected" value="1">januar</option>
<option value="2">februar</option>
<option value="3">marts</option>
<option value="4">april</option>
<option value="5">maj</option>
<option value="6">juni</option>
<option value="7">juli</option>
<option value="8">august</option>
<option value="9">september</option>
<option value="10">oktober</option>
<option value="11">november</option>
<option value="12">december</option>
</select>
<select name="years" id="years">
<option selected="selected" value="1950">1950</option>
<option value="1951">1951</option>
<option value="1952">1952</option>
<option value="1953">1953</option>
<option value="1954">1954</option>
<option value="1955">1955</option>
<option value="1956">1956</option>
<option value="1957">1957</option>
<option value="1958">1958</option>
<option value="1959">1959</option>
<option value="1960">1960</option>
<option value="1961">1961</option>
<option value="1962">1962</option>
<option value="1963">1963</option>
<option value="1964">1964</option>
<option value="1965">1965</option>
<option value="1966">1966</option>
<option value="1967">1967</option>
<option value="1968">1968</option>
<option value="1969">1969</option>
<option value="1970">1970</option>
<option value="1971">1971</option>
<option value="1972">1972</option>
<option value="1973">1973</option>
<option value="1974">1974</option>
<option value="1975">1975</option>
<option value="1976">1976</option>
<option value="1977">1977</option>
<option value="1978">1978</option>
<option value="1979">1979</option>
<option value="1980">1980</option>
<option value="1981">1981</option>
<option value="1982">1982</option>
<option value="1983">1983</option>
<option value="1984">1984</option>
<option value="1985">1985</option>
<option value="1986">1986</option>
<option value="1987">1987</option>
<option value="1988">1988</option>
<option value="1989">1989</option>
<option value="1990">1990</option>
<option value="1991">1991</option>
<option value="1992">1992</option>
<option value="1993">1993</option>
<option value="1994">1994</option>
<option value="1995">1995</option>
</select>
What should i do know? How should i store them in the "birthday" field just like this: days/months/years? Is there a specific way to do this, so you can count the age later? How do you count the age..
Thank you!
If you want to calculate an age given you have when they were born, you can simply do (PHP 5.3+):
$birth = new DateTime("1986-12-02");
$now = new DateTime();
$age = $now->diff($birth)->format("%y");
echo $age; //23
Here is a solution that works with php versions below 5.3 (most hosts still use versions below):
<?php
list($year, $month, $day) = explode('-', $date);
$year = date('Y') - $year;
$month = date('m') - $month;
$day = date('d') - $day;
if ($month < 0 || ($month == 0 && $day < 0)) // Have we had a birth this year?
$year--;
echo 'Age is ' . $year;
This requires the format to be yyyy-mm-dd. However, this is easily changed with the use of strtotime if anyone wants.

Categories