[英]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.