有一个相对复杂的表单和提交过程。需要帮助减肥

时间:2014-01-14 23:31:54

标签: php mysql cakephp

我正在开发一个个人项目,这是一个允许用户记录药物使用情况的网站。这样做的目的是让用户能够在他们最后一次摄取X时快速参考,以及其他类似的统计数据。

用户还可以存储剂量和测量剂量的单位。这就是问题所在。在我的数据库中,我将每个度量单位与转换值相关联。计划是具有这个转换值,以便在创建诸如图形之类的东西时,存储的每个剂量都易于模塑和使用。

例如,克的转化值为1,而mg的转化值为.001。

这意味着如果用户输入1克X,则此数据通过我的表单提交功能,通过转换值(1)多次1克并将最终产品(1)存储在数据库中。 / p>

类似地,如果用户输入他需要300毫克的X,则300乘以.001得到0.3。

拥有这样的系统可以让我轻松添加两个值,并获得“1.3克的X”

我对这些复杂的东西没有经验,当我把它编码到网站时,这是一个临时修复,这是非常草率的。现在我知道我需要找到一种更好的方法来存储它。

下面我将添加呈现表单的代码以及处理表单的代码。

形式:

<?php
    echo $this->Form->input('Record.dose_date', array('placeholder' => 'Date of Dose', 'label' => false,'type' => 'text','id' =>'datepicker'));    
    echo $this->Form->input('RecordDrugUnit.drug_id', array('placeholder' => 'Substance', 'options'=>$drugList,'label' => false,'type' => 'select')); 
    echo $this->Form->input('RecordDrugUnit.dose', array('placeholder' => 'Dose', 'label' => false, 'class' => 'colLarge left')); 
    echo $this->Form->input('RecordDrugUnit.unit_id', array('placeholder'=>'Unit', 'options'=>$unitList, 'label' => false,'type'=>'select', 'class' => 'colSmall right')); 
    echo $this->Form->submit('SUBMIT', array('class' => 'button')); 
    echo $this->Form->input('RecordDrugUnit.route_id', array('placeholder'=>'Unit', 'options'=>$routeList, 'label' => false,'type'=>'select', 'class' => 'colLarge right'));
    echo $this->Form->input('Record.title', array('placeholder' => 'Title', 'label' => false,'type' => 'text'));
    echo $this->Form->input('Record.report', array('placeholder' => 'Your Report','label' => false,'type' => 'textarea')); 
?>

控制器:

if ($this->request->is('post')) {
    $this->Record->create();
    $conv_val = $this->Unit->find('first', array(
        'conditions' => array(
            'id' => $this->request->data['RecordDrugUnit']['unit_id']),
        'fields' => array('conversion')
    ));
    $this->request->data['RecordDrugUnit']['dose'] = (float)$this->request->data['RecordDrugUnit']['dose'] * (float)$conv_val['Unit']['conversion'];
    $this->request->data['Record']['user_id'] = $this->Auth->user('id');
   if ($this->RecordDrugUnit->saveAssociated($this->request->data, array('deep' => TRUE))) {
        $this->Session->setFlash('Your post has been saved.');
        $this->redirect(array('action' => 'index'));
    } else {
        $this->Session->setFlash('Unable to add your post.');
    }
}

寻找有关如何简化此

的建议

1 个答案:

答案 0 :(得分:0)

我认为将转换存储在表格中是不必要的,因为单位不会发生变化。你可以让你的表单有一个“单位”下拉代码,使用硬编码选项array('1' => 'grams', '.001' => 'milligrams', etc.,),然后剂量将等于(float)$this->request->data['RecordDrugUnit']['dose'] * (float)$this->request->data['RecordDrugUnit']['unit'];