-1

So I have a form in the CI framework and in this form a user can select a date but also a date in the past. But I don't want users to be able to select a date in the past. So for example if someone fills out the form they can't select a date before 04-04-2018 (which is today). that is what I want. Right now someone can select a date from 1980 for example

This is my form code in my view:

<?php  echo form_open('index.php/Jongeren_activiteiten/Add_activiteit'); ?>
        <br>
        <center>Naam van activiteit:</center>
            <div class="form-group">
                <input class="form-control" name="activiteit" id="activiteit" type="text">
            </div>
            <center>Begindatum:</center>
             <div class="form-group">
                <input class="form-control" name="begindatum" id="begindatum" placeholder="Startdatum cursus" type="date">
            </div>
            <center>Einddatum:</center>
             <div class="form-group">
                <input class="form-control" name="einddatum" id="einddatum" placeholder="einddatum cursus" type="date">
            </div>

            <div>
                <button class="btn btn-primary" name="Add_activiteit" >Toevoegen</button>
            </div>
        </form>    

beginddatum and einddatum are both dates.

controller function of form with validation rules:

public function Add_activiteit()
    {
    if (isset($_POST['Add_activiteit'])) {
            $this->form_validation->set_rules('activiteit', 'Activiteit', 'required|is_unique[activiteit.activiteit]');
            $this->form_validation->set_rules('begindatum', 'Begindatum', 'required');
            $this->form_validation->set_rules('einddatum', 'Einddatum', 'required');
            //If form validation true
            if ($this->form_validation->run() == TRUE) {
               // echo 'form validated';

                $data = array (
                    'activiteit'=>$_POST['activiteit'],
                    'begindatum'=>$_POST['begindatum'],
                    'einddatum'=>$_POST['einddatum'],
                    );
                $this->db->insert('activiteit',$data);

                $this->session->set_flashdata("success", "u heeft een nieuwe activiteit toegevoegd");
                redirect("index.php/Jongeren_activiteiten", "refresh");
            }
        }


    }

So yeh how can I fix this? probably with form validation rule?

thanks any kind of help is appreciated

Jeremy
  • 35
  • 7

2 Answers2

0

You can compare dates with DateTime class

$begindatum = $_POST['begindatum'];

$date = new DateTime($begindatum)->format('Y-m-d');
$today = new DateTime()->format('Y-m-d');

if($date < $today) {
   echo 'Date is in the past';
}

If you want to use CI form validation, you can add callback function like this 'rules' => 'required|compare_date'. And in compare_date() function you can use above code

ArmKh
  • 435
  • 9
  • 31
0

Use HTML5 validation in client side so your html will be

     <div class="form-group">
        <input class="form-control" name="begindatum" id="begindatum" placeholder="Startdatum cursus" min="<?php echo $today_date;?>" type="date">
    </div>

HTML input

And for codeigniter use custom validation rule

function custom_date_validation($date)
{
  //return true or false
}
//then used it you form validation
$this->form_validation->set_rules('begindatum', 'Begindatum', 'required|callback_custom_date_validation');
Mohd Alomar
  • 953
  • 1
  • 13
  • 30