2013-04-24 4 views
-2

Я нашел похожие вопросы, но я не могу найти ответы, которые подходят для моей ситуации.Codeigniter Вставьте несколько строк в db с табличной формой

Использование Codeigniter: У меня есть таблица db для продуктов и таблица db для инвентаря. Я хочу отобразить таблицу 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(); 
} 

VIEW ------------------------------------------

<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

, что приходит в $ _POST [ 'brought- в']. Единое значение или массив? –

+0

как вы получаете и передаете строку из модели для просмотра? –

+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. 
} 


Update:
В контроллер: inventories/add_show_inventory функции, изменить

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

в

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

Вы также можете напрямую обрабатывать значения POST в своей модели без ввода '$ data'. Это сэкономит ваше время ... Запустив цикл for только один раз. –

+0

Этот код, в частности, дает мне ошибку при отправке ... Неопределенный индекс: введенный .. Как это неопределено? –

+0

Я забыл увеличивать $ i в поле зрения. На самом деле это похоже на 'name = bring-in0' для 1-й строки,' name = bring-in1' для 2-й строки и т. Д. ... –

Смежные вопросы