2013-03-28 38 views
1

我試圖從數據庫中檢索數據填充兩個表單域,以便用戶更新它們。該表被稱爲records,這是很簡單的:從數據庫使用Codeigniter填充表單域

RECORD_ID
標題
內容

我的模型:

function get_data() 
{ 
    $r = $this->uri->segment(3); 

    $query = $this->db->get_where('records', array('Record_ID' => $r)); 
    return $query->result(); 
} 

我的控制器:

function set_values() 
{ 
    $data = $this->entries_model->get_data(); 
    $this->load->view('update_view', $data);      
} 

和我的更新記錄視圖:

<?php 

echo form_open('site/update',$data);?> 
Title: 
<?php echo form_input('title',set_value('title'));?> 
Content: 
<?php echo form_input('content',set_value('content')); 
echo form_submit('submit', 'Submit');?> 

<?php echo form_close();?> 

的問題是,我得到以下錯誤:

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: data

Filename: views/update_view.php

Line Number: 10

我的問題是雙重的:

  1. 我如何在我看來,形式訪問這些數據和
  2. 如何我是否使用它填充各個字段?

我是新來的Codeigniter,我的問題可能看起來很簡單,但任何幫助將不勝感激。提前致謝。

回答

0

有幾件事會在這裏:

  1. $ data是一個數組或對象,它是passed to a view。它的ELEMENTS可以在視圖中作爲變量使用。因此,控制器中的$ data ['myelement'] ='somevalue'將在視圖中以$ somevalue的形式訪問。

  2. 如果將第二個參數傳遞給form_open()方法,則預期它將成爲將生成的標記的鍵/值對的屬性。 ('class'=>'form_class','id'=>'form_id')

  3. 如果要設置表單輸入的值,請使用視圖幫助函數set_value()。在你的情況下,使用控制器來設置要傳遞給視圖的$ data數組中的元素。$data['form_values'] = array('title' => $title, 'content' => $content);

然後,在視圖中:

+0

感謝所有的信息,它確實幫助我理解了一些東西。但我怎麼去在視圖中的set_value()? Alredy嘗試了umefarooq提出的語法,但我得到錯誤,即<?php echo form_input('title',set_value((is_object($ mydata)?$ mydata-> title:'')));?>「> 並且收到 A PHP錯誤遇到 嚴重性:注意 消息:數組字符串轉換 文件名:助手/ form_helper.php 行號:在一排1010 三次 – user2220713

+0

下面是從我的應用程序之一是如何的例子我這樣做: <?php echo form_input('cluster',set_value('cluster',$ envs ['cluster']))在這種情況下,控制器設置一個值$ data ['envs' ] ...設定值w作爲包含元素「集羣」的數組,如:$ data ['envs'] = array('name'=> $ envName,'cluster'=> $ clusterName)。所以,當$ data被傳遞給視圖時,$ envs成爲視圖中可用的Array類型的變量。 set_value()將表單元素name = cluster的值設置爲值$ envs ['cluster']。 有意義嗎? – jcorry

+0

非常感謝jcorry,幾天後我發現這個解決方案完全和你說的一樣。再次感謝您的時間和回覆。 – user2220713

0

你應該傳遞一個數組到你的視圖文件。所以更換:

$data = $this->entries_model->get_data(); 

有:

$data['entries_data'] = $this->entries_model->get_data(); 

,並在你的視圖文件替換:

echo form_open('site/update',$data);?> 

有:

echo form_open('site/update',$entries_data);?> 
+0

感謝您的答覆,已經這樣做。它似乎無法讀取我放入setvalue()函數中的值。 – user2220713

0

首先你需要在適當的方式傳遞數據

更換

$data = $this->entries_model->get_data(); 

with: 

$data['data'] = $this->entries_model->get_data(); 

在SET_VALUE設定值,你需要做的在線條件檢查檢查任何一個數據是否是對象如果對象然後把其他數值放在空只是空的

<?php echo form_input('title',set_value((is_object($data)?$data->title:'')));?> 

你必須做同樣的事情,你的所有表單域

+0

謝謝你的回覆,我這樣做,並得到了以下錯誤: – user2220713

+0

一個PHP錯誤遇到 嚴重性:注意 消息:數組字符串轉換 文件名:助手/ form_helper.php 行號:1010 – user2220713

+0

這裏你得到多個記錄與$ query-> result(),如果你只編輯一條記錄,那麼你需要返回$ query-> row()只有一行 – umefarooq

0

Jcory已經回答了你的問題,但讓我一點點添加到它。

  1. 在你,而不是模擬的return $query->result();做到這一點return $query->row();這是因爲使用返回返回對象要求,你應該通過視圖中的結果集循環
  2. 代替$data = $this->entries_model->get_data();做到這一點$data['entry'] = $this->entries_model->get_data();
  3. 您認爲做這<?php echo form_input('title',set_value('title',$entry->title));?> 我希望這些更改可能會解決問題