Php 可以从多个表单将多个数据插入到一个表中吗?
我正在使用codeigniter。我有多个表单,但只有在到达最后一个表单后,我才需要提交操作,该操作应插入所有表单中的所有数据。如何做到这一点? 我有一个控制器文件Php 可以从多个表单将多个数据插入到一个表中吗?,php,mysql,codeigniter,Php,Mysql,Codeigniter,我正在使用codeigniter。我有多个表单,但只有在到达最后一个表单后,我才需要提交操作,该操作应插入所有表单中的所有数据。如何做到这一点? 我有一个控制器文件 <?php class Admin_service extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('service_
<?php
class Admin_service extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('service_model');
if(!$this->session->userdata('is_logged_in')){
redirect('admin/login');
}
}
public function add1()
{
if ($this->input->server('REQUEST_METHOD') === 'POST')
{
$this->load->library('session');
$this->session->unset_userdata('service_detail');
$this->form_validation->set_rules('backbar', 'backbar');
$this->form_validation->set_error_delimiters('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a><strong>', '</strong></div>');
//if the form has passed through the validation
if ($this->form_validation->run())
{
$data_to_store = array(
'id' => $this->input->post('service_detail'),
'service_name' => $this->input->post('backbar')
);
if($this->service_model->store_service($data_to_store)){
$data['flash_message'] = TRUE;
$this->session->set_flashdata('flash_message', 'updated');
}else{
$data['flash_message'] = FALSE;
}
}
}
$data['category'] = $this->category_model->get_category();
$data['main_content'] = 'admin/service/add1';
$this->load->view('includes/template', $data);
}
public function add()
{
if ($this->input->server('REQUEST_METHOD') === 'POST')
{
$this->load->library('session');
$this->session->unset_userdata('service_detail');
$this->form_validation->set_rules('id', 'id');
$this->form_validation->set_rules('service_name', 'service_name','alpha');
$this->form_validation->set_rules('category', 'category');
$this->form_validation->set_rules('service_tax', 'service_tax');
$this->form_validation->set_rules('service_length', 'service_length','numeric');
$this->form_validation->set_rules('service_price', 'service_price','numeric');
$this->form_validation->set_error_delimiters('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a><strong>', '</strong></div>');
if ($this->form_validation->run())
{
$data_to_store = array(
'id' => $this->input->post('id'),
'service_name' => $this->input->post('service_name'),
'category' => $this->input->post('category'),
'service_tax' => $this->input->post('service_tax'),
'service_length' => $this->input->post('service_length'),
'service_price' => $this->input->post('service_price')
);
if($this->service_model->store_service($data_to_store)){
$data['flash_message'] = TRUE;
$this->session->set_flashdata('flash_message', 'updated');
$this->session->set_userdata('service_detail', ['service_price'=>$this->input->post('service_price'),"service_tax"=>$this->input->post('service_tax')]);
redirect(base_url().'admin/service/view');
}else{
$data['flash_message'] = FALSE;
}
}
}
$data['main_content'] = 'admin/service/add';
$this->load->view('includes/template', $data);
}
}
在用户提交表单的html页面上添加一个复选框:
<input type="checkbox" name="is_finish" value="1" />
将service\u model
模型上的store\u service
功能修改如下:
if ($this->form_validation->run())
{
$this->load->library('session');
$service_details[] = array(
'id' => $this->input->post('id'),
'service_name' => $this->input->post('service_name'),
'category' => $this->input->post('category'),
'service_tax' => $this->input->post('service_tax'),
'service_length' => $this->input->post('service_length'),
'service_price' => $this->input->post('service_price')
);
$service_details_sess = $this->session->userdata('service_details');
if($service_details_sess != "") {
$service_details[] = $service_details_sess;
}
$this->session->set_userdata('service_details',$service_details);
$finish = $this->input->post('is_finish');
if($finish == "1")
{
$this->service_model->store_service($service_details);
}
}
function store_service($service_details) {
$this->load->library('session');
$this->session->unset_userdata('service_details');
$this->db->insert_batch($service_details);
if ($this->db->affected_rows() > 0)
{
return TRUE;
}
return FALSE;
}
HTML部分:
<button id="store_data" type="button">Store</button>
<script type="text/javascript">
$("#store_data").click(function(event) {
$.ajax({
url: 'path to your controller that store data',
type: 'POST',
data: $("#your_form_id").serialize(),
})
.done(function() {
console.log("success");
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
});
</script>
存储
$(“#存储#u数据”)。单击(函数(事件){
$.ajax({
url:“存储数据的控制器的路径”,
键入:“POST”,
数据:$(“#您的表单id”).serialize(),
})
.done(函数(){
控制台日志(“成功”);
})
.fail(函数(){
控制台日志(“错误”);
})
.always(函数(){
控制台日志(“完成”);
});
});
您需要某种表单来形成数据存储。也许可以尝试使用会话?如何进行?你能帮我编码吗?我可以使用会话来完成这项工作,但我没有任何按钮可以将我的数据带到控制器检查:$this->session->set_userdata('service_detail',['service_price'=>$this->input->post('service_price'),“service_tax”=>$this->input->post('service_tax');。当我有一些按钮操作(如保存更改)时,此代码可以工作。但在这种情况下,我有一个选项卡,我需要在其中插入单击“保存”按钮的位置。如果我没有“提交”按钮,该怎么办。如何在没有提交按钮的情况下将值从视图发布到控制器?@SundarNivash,您可以使用ajax来帮助您在没有提交按钮的情况下提交表单。你们想要ajax代码吗?我已经修改了答案,你们必须有id为的元素和表单元素。享受吧!我是否应该为此添加一些文件,比如jquery?当然,您必须包括jquery库。看起来您需要了解基本的jquery。最好从这里学习: