簡體   English   中英

對於動態創建輸入字段,僅接收數據庫的數組符號,而在Codeigniter中未接收到輸入值

[英]Receiving only Array notation to data base for dynamic create input field ,not received input values in Codeigniter

在這里,為了接收數組的String值,我使用了動態創建的輸入字段。 我沒有收到任何錯誤日志,但是僅提交了數組符號(“ []”)之后。 在控制器上,我使用了foreach循環

**在視圖表單上** [動態創建的輸入字段] 在此處輸入圖片說明

在數據庫接收到的陣列符號 [數據庫陣列符號視圖] 在此處輸入圖片說明

查看表格

 $(document).ready(function() { var services_html = "<tr>"+ "<td><input name=\\"name_ofpost[]\\" class=\\"form-control name_ofpost service_data\\" type=\\"text\\" placeholder=\\"<?php echo display('name_ofpost') ?>\\"></td>"+ "<td><input name=\\"no_ofpost[]\\" class=\\"form-control no_ofpost\\" type=\\"text\\" placeholder=\\"<?php echo display('no_ofvacy') ?>\\" ></td>"+ "<td style=\\"text-align:center\\"><div class=\\"btn btn-group\\">"+ "<button type=\\"button\\" class=\\"addMore btn btn-sm btn-success\\">+</button>"+ "<button type=\\"button\\" class=\\"remove btn btn-sm btn-danger\\">-</button>"+ "</div></td>"+ "</tr>"; // add more field $('body').on('click', '.addMore', function() { $("#services").append(services_html); }); // remove field $('body').on('click', '.remove', function() { $(this).parent().parent().parent().remove(); }); }); 
 <?php echo form_open_multipart('jobupdate/dailyupdatejob/create','class="form-inner"') ?> <div> <tbody> <tr> <td> <input name="name_ofpost[]" class="form-control name_ofpost service_data" type="text" placeholder="<?php echo display('name_ofpost') ?>"> </td> <td> <input name="no_ofpost[]" class="form-control no_ofpost" type="text" placeholder="<?php echo display('no_ofvacy') ?>"> </td> <td style="text-align:center;"> <div class="btn btn-group"> <button type="button" class="addMore btn btn-sm btn-success">+</button> <button type="button" class="remove btn btn-sm btn-danger">-</button> </div> </td> </tr> </tbody> </div> <button class="btn btn-success"><?php echo display('save') ?></button> <?php echo form_close() ?> 

在控制器

 <?php public function create() { $this->form_validation->set_rules('jobtype_id', display('JS_job_type_name') ,'required'); $this->form_validation->set_rules('jobcategory_id', display('JS_job_category_name') ,'required'); $this->form_validation->set_rules('status', display('status') ,'required'); #-------------------------------# $sName = $this->input->post('name_ofpost[]'); $sNo = $this->input->post('no_ofpost[]'); if(is_array($sName) && is_array($sNo)) { $count = count($sName); $vacancyDtls = array(); for($i=0;$i<$count;$i++) { $vacDtls[$i] = array('name_ofpost' => $sName[$i], 'no_ofpost' => $sNo[$i]); } } $vacancyDtls = json_encode($vacancyDtls); #---------------------------------# $data['newjobcreate'] = (object)$postData = [ 'type' => $this->input->post('jobtype_id',true), 'category' => $this->input->post('jobcategory_id',true), 'vacancy_detail' => $vacancyDtls, 'created_date' => date('Ym-d'), 'status' => $this->input->post('status',true), ]; #-------------------------------# if ($this->form_validation->run() === true) { if (empty($postData['job_main_id'])) { if ($this->dailyupdatejob_model->create($postData)) { $this->session->set_flashdata('message', display('save_successfully')); } else { $this->session->set_flashdata('exception',display('please_try_again')); } redirect('jobupdate/Dailyupdatejob/create'); } else { $data['shorting_list'] = $this->job_bysorting_model->shorting_list(); $data['catagory_list'] = $this->jobcategory_model->catagory_list(); $data['content'] = $this->load->view('jobupdate/formoflistofjob',$data,true); $this->load->view('padashboard',$data); } } 

請使用下面的代碼。 系統返回空白數組,因為您使用了$ vacancyDtls = array()。

請使用下面的代碼,讓我知道。

$sName = $this->input->post('name_ofpost');
$sNo  = $this->input->post('no_ofpost');
$vacancyDtls = array();
$count = count($sName);
for($i=0;$i<$count;$i++)
            {
            $vacDtls[$i] = array(
                'name_ofpost' => $sName[$i],
                'no_ofpost' => $sNo[$i]
            );
        }
$vacancyDtls = json_encode($vacancyDtls);

您需要修復控制器上的兩件事。

首先,當您想從輸入中檢索值時,僅傳遞在輸入名稱上使用的鍵值。 在您的情況下,您在前端<input name="name_ofpost[]" {...}>因此您選擇的鍵是name_ofpost而不是name_ofpost[]

在各行中,您從后輸入中檢索值,從鍵名中刪除[]

$sName = $this->input->post('name_ofpost');
$sNo  = $this->input->post('no_ofpost');

其次,您在空數組上使用了每個數組。

$vacancyDtls = array(); //empty array
foreach($vacancyDtls as $vacDtls) {...} //there is nothing to foreach

而是使用$ sName或$ sNo上的count函數。 在使用count函數之前,需要確保該變量是一個數組,否則,您將收到此警告消息。 您可以通過以下方法完成此任務:

    // I assume you need both variables to be on the same size
    if(is_array($sName) && is_array($sNo)) { 
       $count= count($sName);
       $vacancyDtls = array();
       //from here you add a for loop and extract the values from the input variables
       for($i=0;$i<$count;$i++) {
            $vacDtls[$i] = array('name_ofpost' => $sName[$i],
                                 'no_ofpost'   => $sNo[$i]);
        }
    } else {
        //Make sure something came from the post or get resquest you just did from the front-end. 
        var_dump($this->input->post()); // will print every post parameter sent to the controller
        var_dump($sName);
        var_dump($sNo);
    }

在else語句print_r或var_dump上,輸入以檢查是否有剛來自您剛剛執行的請求的內容,這是一種調試發送給控制器的內容的方法。

您的前端代碼未顯示您如何發出請求。 目前尚不清楚您是要進行ajax調用還是使用表單,或者進行發布或獲取請求。 如果這是一個獲取請求,請使用$ this-> input-> get('key name');。

調試前端,並確保您使用的功能將某些內容傳遞給請求。

ERROR - 2018-09-10 07:27:03 --> Severity: Warning --> count(): Parameter must be an array or an object that implements Countable

由於我尚未聲明控制器函數數組因此出現錯誤 而且我已經更改了代碼,並且可以正常工作

控制器功能

 //input value from input field $sName = $this->input->post('name_ofpost'); $sNo = $this->input->post('no_ofpost'); //declared the array here $vacancyDtls = array(); $vacancyDt = array(); //used the count function for array if(is_array($sName) && is_array($sNo)) { $count = count($sName); for ($i=0; $i < $count; $i++) { $vacancyDt[$i] = array( 'name_ofpost' => $sName[$i], 'no_ofpost' => $sNo[$i] ); } } //to make the json format to database $vacancyDtls = json_encode($vacancyDt); 

輸出為 [{"name_ofpost":"post1","no_ofpost":"25"},{"name_ofpost":"post2","no_ofpost":"100"},{"name_ofpost":"post 3","no_ofpost":"58"}]

謝謝:弗朗西斯科·德卡斯特羅

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM