2012-09-24 58 views
0

我有一個'report'函數,它提供了一個選項下拉和一個提交按鈕。一旦選擇一個選項,它將該選項的ID傳遞給另一個名爲「generatePatientInfo($ id = null)」的函數,然後生成一個csv。我的問題是ID在第一個數字後被截斷。像2,5,6,9等單個數字的id都按照他們應該的方式工作,但是如果ID是2044,則它將該ID截斷爲2並且提供用於2的id的選擇的信息而不是2044.這很令人困惑,我不知道如何解決它。以下是我的控制器和操作的視圖代碼。id字段在cakephp中被截斷

function report(){ 
$this->set('alldrugs', $this->Drug->find('list', array(
    //'cache' => 'drugList', 
    //'cacheConfig' => 'sql', 
    'fields' => array('id', 'generic'), 
    'order' => 'Drug.generic', 
    'recursive' => -1, 
))); 
if (!empty($this->data['DrugCalls'])) { 
    $this->Session->setFlash(sprintf($this->data['DrugCalls']['DrugList']['id'])); 
    //$this->redirect(array('controller'=>'drugs','action'=>'generatePatientInfo',$this->data['DrugCalls']['DrugList']['id'])); 
    } 
    } 

    function generatePatientInfo($id=null) { 
    $this->layout = 'ajax'; 
    // get drug info 
    $drug = $this->Drug->read(
     array(
     'Drug.id', 'Drug.generic' 
    ), 
     $id 
    ); 
    $this->set('drug',$drug); 
    $patients = $this->Drug->query('SELECT patients.id, calls.id call_id, patients.first_name, patients.last_name, patients.phone, patients.email, calls.created ' 
     . 'FROM drugs, drug_lactation_links, lactation, calls, patients ' 
     . 'WHERE drugs.id = ' . $id . ' AND drugs.id = drug_lactation_links.drug_id AND ' 
     . 'drug_lactation_links.lactation_id = lactation.id AND lactation.call_id = calls.id AND calls.patient_id = patients.id ' 
     . 'UNION ' 
     . 'SELECT patients.id, calls.id call_id, patients.first_name, patients.last_name, patients.phone, patients.email, calls.created ' 
     . 'FROM drugs, drug_pregnancy_links, pregnancies, calls, patients ' 
     . 'WHERE drugs.id = ' . $id . ' AND drugs.id = drug_pregnancy_links.drug_id AND ' 
     . 'drug_pregnancy_links.pregnancy_id = pregnancies.id AND pregnancies.call_id = calls.id AND calls.patient_id = patients.id ' 
     . 'ORDER BY created DESC' 
    ); 
    $this->set(compact('patients')); 
    $this->set('title_for_layout', 'Patient contact information for ' . $drug['Drug']['generic']); 
    } 

瀏覽:

<?php //report.ctp ?> 
<div> 

<?php echo $form->create('DrugCalls', array('url' => array('controller' => 'drugs', 'action' => 'report')));?> 
<?php //echo $form->create('Patient Calls');?> 
    <fieldset> 
    <legend><?php printf('Calls for Generic Report'); ?></legend> 
    <?php 
    echo $form->input('DrugList', array('type' => 'select', 'id' => 'DrugList', 'label' => 'Select generic drug:', 
     'empty' => 'Select', 'options' => $alldrugs) 
    ); 
    echo '<br />NOTE: Select a drug above to generate a list of patients who called about it.' . 
      '<br/>' . 'The report will need to be imported into Excel.'; 
    echo $form->end(__('Submit', true)); 
    ?> 
    </fieldset> 
</div> 



<?php 
//generate_patient_info.ctp 
// add the header row 
$header = array('First Name','Last Name','Phone Number','Email'); 

$csv->addRow(array('Enter Generic: ' . $drug['Drug']['generic'])); 
$csv->addRow(array('Drug ID: ' . $drug['Drug']['id'])); 
$csv->addRow($header); 

// add all the data 
foreach($patients as $patient) { 
    $csv->addRow(array(
    $patient[0]['first_name'], 
    $patient[0]['last_name'], 
    $patient[0]['phone'], 
    $patient[0]['email'], 
)); 
} 
$csv->addRow(array()); 

// render the CSV file 
echo $csv->render('Patients-list.csv'); 
?> 
+1

在'generatePatientInfo()'函數內執行'debug($ id);退出;' - 函數實際上是通過正確的ID?使用'Model :: query'通常是不好的做法,因爲使用Cake的ORM可以達到99%的需求。如果你仍然使用它;確保你正確清理'$ id' – Ross

+0

@Ross我知道它沒有得到正確的ID,我不知道爲什麼ID會像他們那樣被截斷。他們都是有效的身份證號碼,但是在第一個號碼後切斷。如果它是一個數字,則generatePatientInfo函數可以正常工作。 – Jonathan

+1

是的,但是'$ id'確實包含正確的數字,而Cake會以某種方式破壞它,或者'$ id'到達已經損壞的腳本?這將表明你的JavaScript,或表單正在搞亂數據。如果'2044'正在被傳遞給查詢,那麼問題在別處。 – Ross

回答

0

我把範圍縮小到我訪問下拉列表信息的方式。在我的報告功能中,我錯誤地訪問了它。我不得不將其更改爲:$this->data['DrugCalls']['DrugList']而不是$this->data['DrugCalls']['DrugList']['id']