2014-01-08 193 views
1

我有2個文本框在循環 ,我想更新它們在數據庫中的值,當我按下按鈕。更新文本框值使用後提交(Codeigniter)循環

問題是,當我按下按鈕它只更新最後一個文本框的值。

以下是我的模型。

function approvedHrs($taskid,$data) 
{ 
    //$this->db->where('id', $id); 
    $this->db->where('taskid', $taskid); 
    $this->db->update(MILESTONE, $data); 
} 

以下是我的視圖(LOP是這裏)

<?php 
foreach ($result as $milestone_row) { 
?> 
<tr id="<?php echo $milestone_row->id; ?>"> 
    <?php 
    if ($is_master_admin) { 
     if ($i > 1) { 
      if ($milestone_row->userid == $userid) { 
      } else { 
       $userid = $milestone_row->userid; 
       echo $milestone_row->usertitle; 
      } 
     } else { 
      $userid = $milestone_row->userid; 
      echo $milestone_row->usertitle; 
     } 
    } 
    ?> 
<li class="in"> 
    <a href="">Add Bug</a> 
    <div class="message"> 
     <span class="arrow"></span> 
     <span class="body"> 
      <?php 
      echo '<b> <U> Task Title </U>:- </b> &nbsp'; 
      echo $milestone_row->tasktitle; 
      echo '<br/>'; 
      echo '<b> <U> Workspace Title </U>:- </b> &nbsp'; 
      echo $milestone_row->workspacetitle; 
      echo '<br/>'; 
      echo '<b> <U> Description </U>:- </b> &nbsp'; 
      echo $milestone_row->description; 
      echo '<br/>'; 
      echo '<b> <U> Hours </U>:- </b> &nbsp'; 
      echo $milestone_row->esthours; 
      echo 'hrs'; 
      echo '<br/>'; 
      echo '<b> <U> Minutes </U>:- </b> &nbsp'; 
      echo $milestone_row->estmin; 
      echo'mins'; 
      echo '<br/>'; 
      ?> 
      <b><u>Approved Hours:-</u></b>&nbsp;&nbsp;&nbsp; 

<input style="height:14px;font-size:10pt; width: 33px" type="text" id="hours" name="approvedhrs" data-required="1" value="<?php echo $milestone_row->esthours; ?>" placeholder="Hours" onkeypress="return isNumberKey(event)" /> 

<input style="height:14px;font-size:10pt; width: 33px" type="text" id="minutes" name="approvedmins" value="<?php echo $milestone_row->estmin; ?>" data-required="1" placeholder="Minutes" onkeypress="return isNumberKey(event)" /> 

      <a href="<?php echo base_url(); ?>milestone/editMilestone/<?php echo $milestone_row->id;?>/<?php echo $milestone_row->taskid;?>">Edit</a> 
      <?php echo " | ";?> 
      <a href="<?php echo base_url(); ?>milestone/deleteMilestone/<?php echo $milestone_row->id;?>/<?php echo $milestone_row->taskid;?>">Delete</a> 
      <!--<span class="datetime">at <?php //echo $milestone_row->createddate; ?></span> --> 
     </span> 
    </div> 
</li> 

Followinf是myController的

function approvedHrs($taskid) 
    { 
     if ($this->session->userdata('logged_in')){  
      $session_data = $this->session->userdata('logged_in'); 
      $id = $session_data['id']; 
      $username = $session_data['username']; 
      $is_master_admin = $session_data['master']; 
      $imagethumb = $session_data['imagethumb']; 
      $pendingbug = $this->bugmodel->getBug($id, $is_master_admin); 
      $pendingtask = $this->taskmodel->getTask($id, $is_master_admin); 

      $data = ''; 
       $data = array(
        'approvedhrs' =>$this->input->post('approvedhrs'), 
        'approvedmins'=>$this->input->post('approvedmins') 
       ); 
//    print_r($data); 
//    exit; 
       $result = $this->milestonemodel->approvedHrs($taskid,$data); 
//    $this->session->set_userdata('msg', $result); 
       redirect('task', 'refresh'); 
     } 
     else 
     { 
       redirect('login', 'refresh'); 
     } 
    } 

當我使用數組這樣它給了我下面的錯誤

PHP出錯:消息:Array對字符串的轉換

數據庫錯誤:未知列在 '字段列表' '陣列' UPDATE milestone SET approvedhrs =陣列,approvedmins =陣列,其中taskid = '17'

+0

這將讓你開始[鏈接](http://blog.themeforest.net /教程/刪除-多條記錄與 - PHP /)。 ..是啊,因爲在服務器端的PHP控制器,你需要接受它作爲數組,循環通過它來插入數據。 – siddharth

+0

上面的鏈接是用於刪除的,但是你會理解如何使用它來插入... – siddharth

+0

@siddharth你可以給我示例Codeigniter嗎? – Ritesh

回答

0

你應該簡化代碼這樣

$post = $this->input->post();    

$data['approvedhrs'] = $post['approvedhrs']; 
$data['approvedmins'] = $post['approvedmins']; 

print_r($data); 

$result = $this->milestonemodel->approvedHrs($taskid,$data); 

你應該確保$post['approvedhrs']$post['approvedmins']沒有數組。在表單定義這樣當

<input type='text' name="approvedhrs[]" /> 
<input type='text' name="approvedmins[]" /> 

編輯

當你在裏面循環使投入有兩個前和approvedhrsapprovedmins張貼陣列它們包含數組。哪一個在更新中造成問題。

編輯

你應該在你的循環中輸入類似這樣的

<input type='text' name="approvedhrs[]" /> 
<input type='text' name="approvedmins[]" /> 

做出行ID和任務ID

<input type='hidden' name="rowid[]" /> 
<input type='hidden' name="taskid[]" /> 
<input type='text' name="approvedhrs[]" /> 
<input type='text' name="approvedmins[]" /> 

隱藏的輸入而現在PHP的

$post = $this->input->post();    

$data['approvedhrs'] = $post['approvedhrs']; 
$data['approvedmins'] = $post['approvedmins']; 

for($i=0;$i<count($data['approvedhrs']);$i++){ 

    $update_data['approvedhrs']  = $data['approvedhrs'][$i]; 
    $update_data['approvedmins'] = $data['approvedmins'][$i]; 
    $taskid       = $data['taskid'][$i]; 
    print_r($update_data); 
    $result = $this->milestonemodel->approvedHrs($taskid,$update_data); 
    unset($update_data); 
    unset($taskid); 
} 
+0

張貼不過它給了我同樣的錯誤 一個PHP遇到錯誤:消息:數組到字符串轉換 發生數據庫錯誤: '字段列表'中的未知列'Array' UPDATE'milestone' SET'approvedhrs' = Array,'approvedmins' = Array WHERE'taskid' = '17' – Ritesh

+0

把你ajax代碼如何發佈數據沒有它什麼都不能解決這個問題 –

+0

只是我用 <?php echo form_open('milestone/approvedHrs /'。$ result [0] - > taskid);); ?> – Ritesh

0

因爲你是pas唱一串數據來更新,你可以使用update_batch mentod。

在您的控制器中,準備如下數據。

$k= 0 ; 
$data = array(); 
$aphrs = $this->input->post('approvedhrs'); // returns array 
$apmis = $this->input->post('approvedmins'); // 
foreach($aphrs as $hrs) 
{ 
    $data[] = array(
        'approvedhrs' =>$hrs, 
        'approvedmins'=>$apmis[$k] 
       ); 
    $k++; 
} 

//調用模型功能

$result = $this->milestonemodel->approvedHrs($taskid,$data); 

在你的模型功能:添加update_batch方法。因此,無需在forloop中調用更新方法。

for update_batch,請查看本教程。

http://ellislab.com/codeigniter/user-guide/database/active_record.html#update

+0

我應該使用update_batch而不是更新嗎? – Ritesh

+0

是的。參考教程。 –

+0

不能正常工作.... – Ritesh

0

查看

<input type='hidden' name="milestoneid[]" value ="<?php echo $milestone_row->id ?>" /> 
<input type="text" id="hours" name="approvedhrs[<?php echo $milestone_row->id ?>][]" value="<?php echo $milestone_row->esthours; ?>"/> 
<input type="text" name="approvedmins[<?php echo $milestone_row->id ?>][]" value="<?php echo $milestone_row->estmin; ?>"/> 

控制器

function approvedHrs($taskid) { 
     if ($this->session->userdata('logged_in')) { 
       $session_data = $this->session->userdata('logged_in'); 
       $id = $session_data['id']; 
       $username = $session_data['username']; 
       $is_master_admin = $session_data['master']; 
       $imagethumb = $session_data['imagethumb']; 
       $pendingbug = $this->bugmodel->getBug($id, $is_master_admin); 
       $pendingtask = $this->taskmodel->getTask($id, $is_master_admin); 
       $data = array(); 

       $milestoneIDs = $this->input->post('milestoneid'); 
       $approvedhrs = $this->input->post('approvedhrs'); 
       $approvedmins = $this->input->post('approvedmins'); 

       foreach ($milestoneIDs as $milestoneID) { 
         $data = array(
            'approvedhrs' => isset($approvedhrs[$milestoneID]) ? $approvedhrs[$milestoneID] : '', 
            'approvedmins' => isset($approvedmins[$milestoneID]) ? $approvedmins[$milestoneID] : '', 
         ); 
         $this->milestone_model->approvedHrs($milestoneID,$data);//change this model name as per you use 
         unset($data); 
       } 

       redirect('task', 'refresh'); 
     } else { 
       redirect('login', 'refresh'); 
     } 
} 

型號

function approvedHrs($milestoteid, $data) { 
//$this->db->where('id', $editid); 
     $this->db->where('milestoteid', $milestoteid); 
     $this->db->update(MILESTONE, $data); 
}