Codeigniter在db中使用表格形式插入多行

时间:2013-04-24 14:38:51

标签: php mysql database codeigniter

我发现了类似的问题但是,我找不到任何适合我情况的答案。

使用Codeigniter: 我有一个产品的数据库表和一个库存的数据库表。我想在我的网站上显示一个html表,每一行都是一个产品。我已经包含了一张图片来帮助解释。

Table of Products

提交后,我想将每个产品数据行插入数据库中的单个行。

这是我最简单的控制器...

CONTROLLER ----------------------------------

function add_show_inventory() 
    {
        $data['products']=$this->product->get_products();

        $this->form_validation->set_rules('skuID', 'skuID', 'required');
        $this->form_validation->set_rules('brought-in', '"Brought In"', 'required');
        $this->form_validation->set_rules('finished-with', '"Finished With"', 'required');
        $this->form_validation->set_rules('deliveries', 'Deliveries');
        $this->form_validation->set_rules('add-1', 'Add 1');
        $this->form_validation->set_rules('add-2', 'Add 2');
        $this->form_validation->set_rules('band-comp', 'Band Comp');
        $this->form_validation->set_rules('other-comp', 'Other Comp');
        $this->form_validation->set_rules('half-sales', 'Half Sales');
        $this->form_validation->set_rules('half-amount', 'Half Amount');
        $this->form_validation->set_error_delimiters('<div class="error-module">', '</div>');

        if($this->form_validation->run()== FALSE){
            $this->load->view('header');
            $this->load->view('menu');
            $this->load->view('inventory/show-add-inventory', $data);
            $this->load->view('footer');
        } else {
            if($_POST){

                $data=array(
                    'brought-in'=>$_POST['brought-in'],
                );

                $this->inventory->insert_inventory($data);
                redirect(base_url().'shows/');
            }
        }
    }

获取产品型号-------------------------------

function get_products($num=10,$start=0) {
        $where= array('userID'=>$this->session->userdata('userID'), 'active'=>1);

        $this->db->select()
                         ->from('products')
                         ->where($where)
                         ->order_by('product','asc')
                         ->limit($num,$start);
        $query=$this->db->get();
        return $query->result_array();
    }

INSERT INV MODEL ------------------------------------------

function insert_inventory($data) {
    $product_count= $this->db->count_all('products');

    for ($i=0; $i < $product_count; $i++) { 
        $this->db->insert('inventory', array('brought-in'=>$_POST['brought-in']));
    }
    return $this->db->insert_id();
}

查看------------------------------------------

<form action="<?= base_url(); ?>inventories/add_show_inventory" method="post">

<?php if(!isset($products)){ ?>
    <p>There are currently no products posted yet.</p>
<?php } else {
    foreach($products as $row){
?>

    <td class="highlight">
        <input type="text" name="brought-in" value="0"> <!-- Brought In -->
    </td>

<?php } ?>

<input type="submit" name="submit" class="submit">

我从这段代码得到的结果是数据库的三个主题,这是我想要的但是所有行都与表单中的最后一行相同...意味着模型中的迭代只是迭代表格的最后一行......

再一次,代码被剥离到最简单的形式,所以我没有3页完整的代码......但是如果你想看到我没有展示的任何东西请告诉我......

任何和所有的帮助非常感谢...我已经在这个工作了几个星期......

1 个答案:

答案 0 :(得分:0)

在您看来

<?php $i=0; foreach($products as $row){ ?>

    <td class="highlight">
        <input type="text" name="<?php echo 'brought-in'.$i; ?>" value="0"> <!-- Brought In -->
    </td>

<?php $i++;} ?>


现在在你的控制器中

if(!empty($_POST)){
    $count = $this->inventory->fetch_prods_count(); //Write this function in ur model.
    for($i=0;$i<$count;$i++) {
     $data[$i]=array('brought-in'=>$_POST['brought-in'.$i]);
    }

    $this->inventory->insert_inventory($data,$count);
    redirect(base_url().'shows/');
}


在模型中

function insert_inventory($data,$count) {
    for($i=0;$i<$count;$i++) {
       $this->db->insert('inventory', $data[$i]);
    }
    return $this->db->insert_id(); //Or just return 1; As U are not processing this value in your controller.
}

<小时/> 的更新
在您的控制器inventories/add_show_inventory功能中,更改

$data = array($i=>array('brought-in'=>$_POST['brought-in'.$i]));

$data[$i]=array('brought-in'=>$_POST['brought-in'.$i]);