问题验证startdate和enddate codeigniter

时间:2013-01-27 11:45:29

标签: php codeigniter validation date

我想验证startdate和endate codeigniter,如果stardate> enddate,不保存在我的数据库中,或显示错误消息 我的控制器就像这样

function buat_lagi() {
    if ($this->input->post('IDKategori')) {
        $this->MKalender->addEvents();
        $id = $_POST[IDKategori];
        $this->session->set_flashdata('message', 'Agenda Pimpinan baru telah dibuat !');
        redirect('admin/kalenderkategori/lihat/' . $id . '', 'refresh');
    } else {
        $data['title'] = "Tambah Agenda Pimpinan";
        $data['kategori'] = $this->MKalenderKategori->getKategoriDropDown();
        $data['main'] = 'admin/kalender/kalender_buat_lagi';
        $this->load->vars($data);
        $this->load->view('layout/dashboard');
    }
}

我的模特就是这样

function addEvents() {
    $data = array(
        'IDKategori' => $this->input->post('IDKategori'),
        'TanggalMulai' => $this->input->post('TanggalMulai'),
        'TanggalAkhir' => $this->input->post('TanggalAkhir'),
        'judul' => $this->input->post('judul'),
        'konten' => $this->input->post('konten'),
        'create_by' => $_SESSION['username'],
    );
    $this->db->insert('kalender', $data);
}

我的表格是这样的

<form action="<?= base_url(); ?>index.php/admin/kalender/buat_lagi/" method="post" enctype="multipart/form-data" name="form" id="form">
<?php
echo "<label for='ptitle'>Kegiatan / Lokasi :</label><br/>";
$data = array('class' => 'validate[required] text-input', 'name' => 'judul', 'id' => 'ptitle', 'size' => 80);
echo form_input($data);

echo "<p><label for='long'>Uraian Kegiatan / Keterangan / Catatan :</label><br/>";
$data = array('class' => 'validate[required] text-input', 'name' => 'konten', 'rows' => '13', 'cols' => '60', 'style' => 'width: 60%');
echo form_textarea($data) . "</p>";

echo "<p><label for='ptitle'>Waktu Mulai :</label><br/>";
$data = array('class' => 'validate[required] text-input', 'name' => 'TanggalMulai', 'id' => 'basic_example_1');
echo form_input($data) . "</p>";

echo "<p><label for='ptitle'>Waktu Akhir :</label><br/>";
$data = array('class' => 'validate[required] text-input', 'name' => 'TanggalAkhir', 'id' => 'basic_example_2', 'onblur' => 'function compareDate()');
echo form_input($data) . "</p>";

echo form_hidden('IDKategori', $this->uri->segment(4));
echo form_submit('submit', 'Tambah Even');
?>
&nbsp;&nbsp;<input type="button" value="Kembali" onClick="javascript: history.go(-1)" />

如何验证我的问题??

1 个答案:

答案 0 :(得分:1)

您还没有给出日期格式,甚至没有给出日期字段的格式(请记住,这里的大多数用户主要讲英语)您还没有说明您是否需要此检查服务器端或客户端。通过您的表单中调用的比较日期函数,我假设您至少需要它在客户端,我建议虽然表单验证需要在服务器端完成。客户端非常适合立即通知用户,但实际上保护表单服务器端的输入是没用的。

jQuery用于客户端(因为我不确定哪个字段是伪代码:

function compareDate()
    {
var startDate = Date.parse($("#startDate).val()");
var endDate = Date.parse($("#endDate).val()");
if(startDate>endDate)
{
alert("Your start date must be earlier than your end date.");
}
    }

Codeigniter函数(回调应该可以工作,但我还没有对它进行过测试。)你真的只需要在其中一个日期字段上运行该函数,你只想返回一个错误而且它与你返回它是无关的它正在比较两者。

//validation rule
$this->form_validtion->set_rules('endDate', 'End Date','trim|callback_compareDates');


function compareDates()
{
$start = strtotime($this->input->post('startDate'));
$end = strtotime($this->input->post('endDate'));
if($start > $end)
{
    $this->form_validation->set_message('compareDates','Your start date must be earlier than your end date');
    return false;
}