dcjones,
I am a newb to this forum but, I am not a newb to PHP/MySQL. Let me first address some of your questions:
1) Storing the date as a string. This is fine as it will not break anything and MySQL actually stores dates as strings. Now, there are some advantages to using dates. 1) It forces a date format. If somehow, the user gets some text by you, then, it can make it into the DB. With a date field, MySQL will try and make sense of it all but ultimately if it can not, it will put something in the YYYY-MM-DD format. another advantage is the use of date functions. There are a ton of them, shame to loose out on them. Lastly, searching on date ranges may not work correctly if you can not ensure the proper format in the db. Maybe 1 screen allows mm-dd-yyyy and another yyyy-mm-dd. Well, if you search on the date, one will work and the other wont.
phew, long and short of it, use dates.
now, lets say MySQL stores the date as YYYY-MM-DD and you want to display it in MM/DD/YY format for the user, then use the smarty date_format modifier like so:
value="{$user.departuredate|date_format:'%m/%d/%y'}"
Lastly as far as how to ensure the user enters a know format. I do this.
1) Make a readonly input box:
<input type="text" name="myDate" id="myDate" value="" size="10" readonly="readonly">
2) use a date picking application (I use SCW - simple calendar widget (http://www.garrett.nildram.co.uk/calendar/scw.htm - it is the bomb yo!). Then have the calendar widget change value of the input. This way, the user never enters a date and you can configure what format you want ( and there is not any problems mentioned before with the 10/12/07 problems, etc.)
3) Setup the server side to pick apart the date and convert to MySQL format. There are so many ways to do this, you could use strtotime (my favorite and real powerful). I happen to have a date class that uses strtotime and then stores the date as a Unix timestamp, then you can call $objDate->mGetFormattedDate( "Y-m-d') which just calls the date function against the stored timestamp. I can post code if you really want to see it. I call it cUniDate.
Hope this helps.
Mike