Recipe 9.8. Validating Form Input: Dates and Times


9.8.1. Problem

You want to make sure that a date or time a user entered is valid. For example, you want to ensure that a user hasn't attempted to schedule an event for the 45th of August or provided a credit card that has already expired.

9.8.2. Solution

If your form provides month, day, and year as separate elements, plug those values into checkdate( ), as in Example 9-16. This tells you whether or not the month, day, and year are valid.

Checking a particular date

<?php if (! checkdate($_POST['month'], $_POST['day'], $_POST['year'])) {    print "The date you entered doesn't exist!"; } ?>

To check that a date is before or after a particular value, convert the user-supplied values to a timestamp, compute the timestamp for the threshhold date, and compare the two. Example 9-17 checks that the supplied credit card expiration month and year are after the current month.

Checking credit card expiration

<?php // The beginning of the month in which the credit card expires $expires = mktime(0, 0, 0, $_POST['month'], 1, $_POST['year']); // The beginning of next month // If date('n') + 1 == 13, mktime() does the right thing and uses // January of the following year. $nextMonth = mktime(0, 0, 0, date('n') + 1, 1); if ($expires < $nextMonth) {    print "Sorry, that credit card expires too soon."; } ?>

9.8.3. Discussion

checkdate( ) is handy because it knows about leap year and how many days are in each month, saving you from tedious comparisons of each component of the date. For range validations'making sure a date or time is before, after, or between other dates or times'it's easiest to work with epoch timestamps.

9.8.4. See Also

Chapter 3 discusses the finer points of date and time handling.




PHP Cookbook, 2nd Edition
PHP Cookbook: Solutions and Examples for PHP Programmers
ISBN: 0596101015
EAN: 2147483647
Year: 2006
Pages: 445

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net