There are many options. You can have 3 boxes for date/month/year, you could have a date picking widget using Javascript, you could require a specific format for entry with validation, etc. What I like to do, is use PHP's strtotime() function. You will still want to give the user a hint as to the format (ie mm/dd/YYYY is not the same as dd/mm/YYYY but your code won't know that!). So this method isn't 100% full proof, but, it gets the job done in many situations and is very simple.
Code:
function sql_date_format($value)
{
if (gettype($value) == 'string') $value = strtotime($value);
return date('Y-m-d H:i:s', $value);
}
$birthday = $_POST['birthday'];
// Note: Clean up and validate "birthday" variable here
$birthday = sql_date_format($birthday);
$birthday = mysql_real_escape_string($birthday);
$sql = "INSERT INTO some_table (birthday) VALUES ('$birthday')";
mysql_query($sql) or die('Insert failed for birthday = '.$birthday);