You'll definitely want to store them as DATE types in the database, as that makes it much easier to sort and do other "date math" operations as needed.
As far as user input, have them enter it in 3 separate fields for month, day, and year (in whichever order is typical for your locale). Then in your PHP form-handler script collect them into a PHP timestamp, which you can then easily format as needed via the [man]date/man function.
<!-- input form -->
<label>Month:<select name='month'></label>
<?php
$months = array(1 => 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
foreach($months as $n => $mon)
{
echo "<option value='$n'>$mon</option>\n";
}
?>
</select>
<label>Day:<select name='day'>
<?php
for($n = 1; $n <= 31; $n++)
{
echo "<option>$n</option>\n";
}
?>
</select>
<label>Year:<select name='year'>
<?php
$thisYear = date('Y');
for($n = $thisYear, $max = $thisYear + 10; $n < $max; $n++)
{
echo "<option>$n</option>\n";
}
?>
</select>
Then in your form-handler:
<?php
$month = (int)$_POST['month'];
$day = (int)$_POST['day'];
$year = (int)$_POST['year'];
// validate it:
if(checkdate($month, $day, $year) == false)
{
// error, have user resubmit it
}
// insert it to DB:
$timestamp = mktime(0, 0, 0, $month, $day, $year);
$evtDate = date('Y-m-d', $timestamp);
$sql = "INSERT INTO some_table (event_date) VALUES ('$evtDate')";
mysql_query($sql);
// get it back out of the DB as a timestamp:
$sql = "SELECT event_name, UNIX_TIMESTAMP(event_date) AS event_time
FROM some_table ORDER BY event_date DESC LIMIT 10";
$result = mysql_query($sql);
echo "<h3>Events:</h3>\n<ul>\n";
while($row = mysql_fetch_assoc($result))
{
echo "<li>Event: " . $row['event_name'] . ", Date: " . date('F j, Y') . "</li>\n";
}
echo "</ul>\n";