仅在字段更改时才在表单上发送电子邮件

时间:2011-11-24 12:09:19

标签: php email cakephp cakephp-1.3

我有一个表单来编辑一个作业,一个作业有一个状态列,可以是1,2或3

<?php echo $this->Form->input('status', array('label' => '', 'options' => $status)); ?>

当我提交表单时,我想检查状态值是否等于3,如果是,那么我想发送电子邮件。但是如果价值已经是3,我不想发送电子邮件。

在cakephp中有一种简单的方法可以检查新值的先前值等吗?

感谢。

3 个答案:

答案 0 :(得分:2)

  1. 在保存新记录之前,先从数据库中读取现有记录。然后,您可以将新数据与之比较。

  2. 或者,将状态存储在会话中并将新数据与其进行比较。

  3. 因此,当您从数据库中读取记录时,请将状态保存在会话中:

    $this->data = $this->Job->read(null, $id);
    $this->Session->write('JobStatus.'.$this->data['Job']['id'], $this->data['Job']['status']);
    

    编辑作业时,您可以检查旧值:

    if (!empty($this->data)) {
      if ($this->data['Job']['status'] == 3 && $this->Session->read('JobStatus.'.$this->data['Job']['id']) != 3) {
        /**
         * Send email
         */
      }
    }
    

答案 1 :(得分:2)

无需弄乱会话,或确实预先设置了值。

基本上,当您编辑记录时,您将从表中获取当前记录status值。如果它已经是3,我们不想发送电子邮件,所以设置一个布尔值。

根据需要更新记录。

如果status不是3,并且新状态为,请发送电子邮件。

我没有填写整个方法;但是你应该明白这个想法:

$send_email = true;    
$current_status = $this->Job->field('status');
if($current_status==3) {
    $send_email = false;
}

// save the record

if($send_email==true && $this->data['Job']['status']==3) {
   //send the email
}

答案 2 :(得分:1)

您可以使用源值设置隐藏字段,并根据提交的值检查其值。

<?php echo $this->Form->input('old_status', array('type' => 'hidden', 'default' => $old_status)); ?>