使用旧字段值进行数据验证

时间:2014-07-29 08:06:10

标签: php mysql cakephp validation

我在CakePHP上开发了一个应用程序,但我是一个有数据验证的新手。 我需要的是在修改字段时检查日期时间值,因此我需要检查旧日期时间值并验证新值是否等于或更高。 我认为最好的是使用自定义验证,但不知道如何获得该字段的旧值,以及如何区分从创建到编辑。

这里有一个简单的例子:

1)我在我的数据库中注册一个新事件,它有名称,开始日期,结束日期,ecc ......

2)我想编辑这个事件,所以我插入一个新的开始和一个新的结束日期,现在我需要这个验证:

如果旧的结束值在新结束之前:

更新记录;

否则:

数据验证失败,不更新记录;

2 个答案:

答案 0 :(得分:1)

数据验证在您的模型中进行(如果您真的需要,可以在您的控制器中完成,但如果在模型中完成,则Cake会使事情变得更容易。)

在“事件”模型中:

$public validate = array(    //each field can have its own validation rule set here
    'end_date' => array(
        'rule' => 'customEndDateValidation',    //the name of our custom validation function to use
        'on' => 'update',    //only do this when we update a record
        'message' => 'New end date must be greater than previous end date'    //message if validation fails
    )
);

public function customEndDateValidation($check) {
    //get previous end date
    $old_record = $this->find(
        'all',
        array(
            'conditions' => array(
                'Event.id' => $this->data[$this->alias]['id']
            ),
            'fields' => array(
                'Event.end_date'
            )
        )
    );

    //if the new end date is greater than the old one return true - otherwise it will reach the return false
    if (strtotime($check['end_date']) > strtotime($old_record['Event']['end_date'])) {
        return TRUE;
    }
    return FALSE;
}

有关Cake中验证的更多信息,请查看http://book.cakephp.org/2.0/en/models/data-validation.html

答案 1 :(得分:0)

只需添加表格的两个属性:“created”和“modified”

这是CakePHP的标准

if isn't the answer that you search


//我的表

Project
[0]--Id
[1]--Name
[2]--DateEdit
[3]--OlderDateEdit
[4]--modified
[5]--created

// http://book.cakephp.org/2.0/en/models/data-validation.html#adding-your-own-validation-methods

//视图

<?php 
echo $this->Form->input('Project.DateEdit',array("label"=>"Date edit"));
echo $this->Form->hidden('Project.OlderDateEdit');

// CONTROLLER

<?php
public function edit($id = null) {
        if (empty($this->data)) {
            $this->Project->id = $id;
            $this->data = $this->Project->read();

            $this->data['Project']['OlderDateEdit']=$this->data['Project']['DateEdit'];
        } 
        else {

            if ($this->Project->save($this->data['Project'])) {

            }
        }
    }

// MODEL

<?php
class Project extends AppModel {
    public $validate = array(
        'verif_date' => array(
            'rule'    => array('comparison-Dte','OlderDateEdit'),
            'message' => 'ur datetime is older'
        )
    );

// AppModel //

<?php
public function comparison-Dte($check, $limit) {

        $valeur = array_values($check);
        $valeur = $valeur[0];
        $OldDateEdit = $limit;
        ));
        return $NewDateEdit > $OldDateEdit;
    }
}