2015-01-16 1 views
-1

im все еще изучать codeigniter и возникли проблемы. То есть Вы должны использовать метод «set» для обновления записи.Невозможно обновить таблицу продуктов. Вы должны использовать метод «set», чтобы обновить запись

Я пытаюсь обновить таблицу: продукт, который содержит имя product_name, product_desc и т. Д. Ниже, - это мой контроллер, просмотр и модель. Я не могу понять, что я делаю неправильно. Я всегда проверял print_r ($ array) ; это дает мне пустой массив ... хотя я действительно получаю информацию о товаре, отображаемую в полях ввода по ссылке: ci/index.php/admin/product/1 ..

публикация половины кода для просмотра в виде кода просмотра длинный ..

контроллер:

// **** Для редактирования продукта **** //

public function edit_products(){ 


        $data = array ('product_name'=>$this->input->post('product_name'), 
        'product_desc'=>$this->input->post('product_desc'), 
        'product_stock'=>$this->input->post('product_stock'), 
        'product_sku'=>$this->input->post('product_sku'), 
        'inventory_date'=>$this->input->post('inventory_date'), 
        'product_price'=>$this->input->post('product_price'), 
        'featured_product'=>$this->input->post('featured_product'), 
        'best_seller'=>$this->input->post('best_seller'), 
        'brand_id'=>$this->input->post('brand_id'), 
        ); 

        $upd_pr = $this->mainmodel->update_product($_POST); 
        if($upd_pr){ 
         $this->session->set_flashdata('messages', 'Updated Sucessfully'); 


         redirect('admin/editing_products'); 

          }else{ 
         $this->session->set_flashdata('error', 'Updation Failed'); 
          redirect('admin/editing_products'); 
           } 
      } 



    public function editing_products(){ 


$data['product']=$this->mainmodel->set_pro2(); 
     //$data['images'] = $this->products->images($id); 
     $data['content']='admin/edit_products'; 

     $this->load->view('admin/main',$data);  
      } 

Модель:

/*for update Product*/ 
    public function update_product($array){ 

     extract($array); 


     //print_r($array); 
     //die; 

    $this->db->update('product',array('product_name'=>$product_name,'product_desc'=>$product_desc,'inventory_date'=>$inventory_date,'product_price'=>$product_price,'featured_product'=>$featured_product,'best_seller'=>$best_seller,'brand_id'=>$brand_id)); 

$this->db->update('product'); 



        return ; 
    } 


function set_pro2(){ 
     $q = $this->db->query('SELECT * FROM product,product_image,category_product WHERE product.product_id = category_product.product_id AND product.product_id = 1 LIMIT 1'); 

если ($ q-> num_rows()> 0) {

 foreach($q->result() as $row){ 

     $data[] = $row; 

     } 
     return $data; 
     } 
} 

Вид:

<form class="form-horizontal form-row-seperated" enctype="multipart/form-data" action="<?php echo site_url('admin/edit_products') ?>" method="post"> 

<div class="form-group"> 
        <?php foreach($product as $pro){ ?> 
                <label class="col-md-2 control-label">Name:<span class="required"> 
                * </span> 
                </label> 
                <div class="col-md-10"> 
                 <input type="text" class="form-control" name="product_name" placeholder="" value="<?php echo $pro->product_name; ?>"> 
                </div> 
               </div> 
               <div class="form-group"> 
                <label class="col-md-2 control-label">Description: <span class="required"> 
                * </span> 
                </label> 
                <div class="col-md-10"> 
                 <input type="text" class="form-control" name="product_desc" value="<?php echo $pro->product_desc; ?>"> 
                </div> 
               </div> 
+0

В вашей модели в рамках функции update_product у вас есть 2 функции обновления. Удалите вторую и посмотрите, работает ли это ... – Craig

+0

Спасибо большое, я удалил второе обновление, и оно сработало .. но оно обновляет все продукты .. но не тот, который выбирается ... –

+0

Вы, мне нужно установить ГДЕ. $ this-> db-> где ('product_name', $ array ['product_name']); что предполагается, что имя продукта уникально. – Craig

ответ

0

В некоторых случаях CodeIgniter требуется обновление/вставка this->db->set, если в массиве. Я также не рекомендовал бы помещать два db->update в ту же таблицу, что и вы добавили в модель.

Активная запись руководство http://www.codeigniter.com/user_guide/database/active_record.html

Update

// $brand_id = 0, $data are from the edit function on controller 
public function name($brand_id = 0, $data) { 
$product_name = $this-input->post('product_name'); 
$product_desc = $this-input->post('product_desc'); 
$inventory_date = $this-input->post('inventory_date'); 
$product_price = $this-input->post('product_price'); 
$featured_product = $this-input->post('featured_product'); 
$best_seller = $this-input->post('best_seller'); 

$data = array(
'product_name'=> $product_name, 
'product_desc'=> $product_desc, 
'inventory_date'=>$inventory_date, 
'product_price'=>$product_price, 
'featured_product'=> $featured_product, 
'best_seller'=> $best_seller, 
'brand_id'=> $this->uri->segment(what_ever) 
); 
$this->db->set($data); 
$this->db->update('product'); 
} 

Или вставить

$data = array(
'product_name'=> $product_name, 
'product_desc'=> $product_desc, 
'inventory_date'=>$inventory_date, 
'product_price'=>$product_price, 
'featured_product'=> $featured_product, 
'best_seller'=> $best_seller, 
'brand_id'=>$brand_id 
); 
$this->db->set($data); 
$this->db->insert_id(); 
$this->db->insert('product'); 

Сообщение Обновление

Установить маршруты $route['function/edit/(:any)'] = 'folder/products_list/edit/$1';

Если необходимо обновить продукт, вам необходимо установить функцию под названием редактировать на

Модель Получить

public function model_get_products() { 
return $this->db->get($this->db->dbprefix . 'products')->result_array(); 
} 

контроллер для Uri сегмента помогают http://www.codeigniter.com/user_guide/libraries/uri.html

public function edit() { 
    Form validation 
    $this->load->library('form_validation'); 

    $this->form_validation->set_rules('what ever'); 

    if ($this->form->validation->run() == TRUE) { 
    $this->load->model('folder/model_update_product'); 

    //Example uri segment admin/product_list/edit/id_number $this->uri->segment('4') 

    $this->model_update_product->name($this->uri->segment('what_ever_is'), $this->input->post()) 

    redirect('function/product_list'); 

    } else { 
    // Load Your Form View i.e. $this->get_form(); 
    } 
} 

public function index() { 

$this->load->model('folder/model_get_products'); 

$results = $this->model_get_products->get(); 

$data['products'] = array(); 

//Example uri segment admin/product_list/edit/id_number $this->uri->segment('4') 

// Add What Else You Need to here and then you can add it to view 

foreach($results as $result) { 
    $data['products'][] = array(
    'brand_id' => $result[brand_id], 
    'edit' => site_url('controller_name/edit'). '/' .$result[brand_id] // site_url must match what you set in routes for edit. 
    ); 
} 

return $this->load->view('folder/products_list', $data); 
} 

public function get_form() { 
//Example uri segment admin/product_list/edit/id_number $this->uri->segment('4') 

// Make sure you set another model function in your get model where can get by id. 

$product_info = $this->get_products_by_id->get($this->uri->segment('4')); 

    $product_name = $this->input->post('product_name'); 

    if (isset($product_name)) { 
    $data['product_name'] = $product_name; // for name="" in input 
    } elseif (!empty($product_info)) { 
    $data['product_name'] = $product_info['product_name']; // for value="" in input 
    } else { 
    $data['product_name'] = ''; 
    } 

    $this->load->view('folder/product_form', $data); 

product form contents 
} 

Просмотреть список продуктов

<form> 
<table> 
<thead> 
</thead> 
<tbody> 
<?php if ($products) { ?> 
<?php foreach ($products as $product) { ?> 
<tr> 
<td><?php echo $product['brand_id'];?></td> 
<td><a href="<?php echo $edit;?>"> Edit Product</a></td> 
</tr> 
<?php } ?> 
<?php } ?> 
</tbody> 
</table> 
</form> 
+0

Thankyou очень много я снял второе обновление, и она работала .. но это обновление всех продуктов .. но не тот, который выбран ... \t функция update_product общественности ($ массив) { \t \t \t \t \t \t экстракт ($ array); \t \t $ this-> db-> обновление ('продукт', массив ('product_name' => $ product_name, 'product_desc' => $ product_desc, 'inventory_date' => $ inventory_date, 'PRODUCT_PRICE' => $ PRODUCT_PRICE, 'featured_product' => $ featured_product, 'best_seller' => $ best_seller, 'Brand_ID' => $ Brand_ID)); \t \t \t \t \t \t \t \t возвращение $ this-> db-> get_where ('продукт', массив ('product_id' => $ user_id)) -> результат (а); ; \t \t} \t \t ' –

+0

Thankyou я проверил свой код и он получит меня, что я хотел, но я также попробовал другой путь вокруг, что было пропускание скрытого поля ID в форме, а затем получить его в функции. Таким образом, это дало мне идентификатор продукта, теперь он обновляет только один продукт, а не все из них:) ... Спасибо всем за то, что помогли мне :) ... –

+0

Вам нужно установить флажок и еще много других функций , Сложно обновлять все продукты вместе – user4419336

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