Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

PHP CRUD Operations with PHP Creating Records Validating User Data

Renzo Salvador
Renzo Salvador
523 Points

validate date

Anyone spot the error?

<?php

function valid_sql_date($date) { //add code here $dateMatch = explode('-', $date);

if(count($dateMatch)!= 3 
        || strlen($dateMatch[0]) != 2
        || strlen($dateMatch[1]) != 2
        || strlen($dateMatch[2]) != 4
        || !checkdate($dateMatch[0], $dateMatch[1], $dateMatch[2]) )
        {
    $error_message = 'Invalid date!';
} else{
  return true;
}

}

index.php
<?php

function valid_sql_date($date) {
    //add code here
    $dateMatch = explode('-', $date);

    if(count($dateMatch)!= 3 
            || strlen($dateMatch[0]) != 2
            || strlen($dateMatch[1]) != 2
            || strlen($dateMatch[2]) != 4
            || !checkdate($dateMatch[0], $dateMatch[1], $dateMatch[2]) )
            {
        $error_message = 'Invalid date!';
    } else{
      return true;
    }
}

1 Answer

Hi Renzo;

Spotted 3 issues with your code.

First, the error you have says:

"Bummer: Make sure you return true for a valid date. Remember the function checkdate returns true if valid and false if not."

So the first thing I checked was the checkdate function documentation and notice you were using the parameter in the incorrect order. Your code was using it as checkdate(YEAR, MONTH, DAY) and it should be checkdate(MONTH, DAY, YEAR) order.

Second, you switched the comparison for year and day, you have to compare year to 4 character and day to 2 characters.

And Third, You will need to return FALSE if the check fails.

<?php

function valid_sql_date($date) {
  //add code here
  $dateMatch = explode('-', $date);
  if(count($dateMatch)!= 3
     || strlen($dateMatch[0]) != 4 //Issue 2 Fixed here
     || strlen($dateMatch[1]) != 2
     || strlen($dateMatch[2]) != 2 //Issue 2 and fixed here
     || !checkdate($dateMatch[1], $dateMatch[2], $dateMatch[0]) ) //Issue 01 Fixed Here
  {
    $error_message = 'Invalid date!';
    return False; //Issue 3 Fixed Here
  } else{
    return true;
  }
}
?>

Hope This helps you.

Manny Martinez (link: www.mannymartinez.net)