terungwa Posted February 17, 2014 Share Posted February 17, 2014 My date selection list below allows selection of 30th, 31st and 29th february (on non-leap year). Although I noticed the mysql database is treating those entries as invalid and records them as 0000-00-00. How may i remove this from the user input interface? <?php $monthName = array(1 => "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); $today = time(); //stores today's date $f_today = date("M-d-Y",$today); //formats today's date $startyear = date("Y")-60; echo "<div style = 'text-align: center'>\n"; echo "<form action='$_SERVER[PHP_SELF]' method='POST'>\n"; /* build selection list for the month */ $todayMO = date("n",$today); //get the month from $today echo "<select name='month'>\n"; for ($n=1;$n<=12;$n++) { echo " <option value=$n"; if ($todayMO == $n) { echo " selected"; } echo " > $monthName[$n]\n\n</option>"; } echo "</select>\n"; /* build selection list for the day */ $todayDay= date("d",$today); //get the day from $today echo "<select name='day'>\n"; for ($n=1;$n<=31;$n++) { echo " <option value=$n"; if ($todayDay == $n ) { echo " selected"; } echo " > $n</option>\n"; } echo "</select>\n"; /* build selection list for the year */ echo "<select name='year'>\n"; for ($n=$startyear;$n<=$startyear+200;$n++) { echo " <option value=$n"; if ($startyear == $n ) { echo " selected"; } echo " > $n</option>\n"; } echo "</select>\n"; echo "<p> <input type=\"submit\" name=\"insert\" value=\"Insert New Entry\" id=\"insert\"> </p></form></div>\n"; ?> Thanks. Link to comment https://forums.phpfreaks.com/topic/286253-removing-30th-and-31st-from-february-in-date-selection-list/ Share on other sites More sharing options...
terungwa Posted February 17, 2014 Author Share Posted February 17, 2014 Currently, I am subjecting the insert query to the PHP functioncheckdate(), which is smart enough to know when its a leap year and prevents mistakessuch as September 31. but again, If i can remove it from the front-end, the better. if (!checkdate($month,$day,$year)) { echo 'You have used an invalid date'; } else{ // create SQL $sql = 'INSERT INTO date ( date_value ) VALUES(?)'; if ($stmt->prepare($sql)) { // bind parameters and execute statement $stmt->bind_param('s', $date_value); // execute and get number of affected rows $stmt->execute(); if ($stmt->affected_rows > 0) { $OK = true; } } // redirect if successful or display error if ($OK) { header('Location: insert_success.php'); exit; } else { $error = $stmt->error; } }} Link to comment https://forums.phpfreaks.com/topic/286253-removing-30th-and-31st-from-february-in-date-selection-list/#findComment-1469201 Share on other sites More sharing options...
Barand Posted February 17, 2014 Share Posted February 17, 2014 Easiest way by far, for you and the user, is to use a datepicker (eg SCW or jQuery datepicker) Link to comment https://forums.phpfreaks.com/topic/286253-removing-30th-and-31st-from-february-in-date-selection-list/#findComment-1469208 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.