сериализация и десериализация массива сеансов

0

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

function save(&$purchase_data,$purchase_id)
    {
        $success=false;

        //Run these queries as a transaction, we want to make sure we do all or nothing
        $this->db->trans_start();

        if($purchase_data)
        {
            if (!$purchase_id or !$this->exists($purchase_id))
            {  
                //$purchase_data['purchase_id'] = $purchase_id = $purchase_data['purchase_id'];
                $success = $this->db->insert('purchase_order',$purchase_data);
                $post_array['cart']=$this->session->userdata('data');
                /*print_r($post_array);
                exit;*/
                $purchase_id=$this->db->insert_id();
                $i=0;
    foreach($post_array['cart'] as $item)
    {
        //echo "<pre>"; print_r($item); echo "</pre>";
        $query = $this->db->query("SELECT name FROM phppos_items WHERE item_id='".$item['product_id']."'");
        foreach ($query->result() as $row)
{
    $product_name=$row->name;

}
        $product_id=$item['product_id'];
        $quantity=$item['quantity'];
        $unit=$item['unit'];
        $unit_rate=$item['unit_rate'];
        $query = $this->db->query("insert into phppos_productdetails(product_id,product_name,quantity,unit,unit_rate,purchase_id) values ('$product_id','$product_name','$quantity','$unit','$unit_rate','$purchase_id')");

        $i++;
    }
            }
}

Теперь этот код вставляет несколько строк в таблицу productdetails, но я хочу сериализовать $ post_array ['cart'] массив и хочу сохранить весь массив в одном столбце. Итак, как мне это сделать? Теперь Мои данные сохраняются, как показано ниже. Изображение 174551

Вы можете увидеть три продукта с помощью buy_id 17. Поэтому я хочу сохранить все товарные_ид, все имя продукта, все qty, unit, unit_rate в одном столбце. Короче говоря, я хочу вставить только одну строку в базу данных. Итак, какие изменения следует внести в цикл foreach?

Теги:
codeigniter
serialization

2 ответа

1

вы можете сериализовать массив или объект с помощью функции сериализации php, он вернет вам строку, которую вы можете сохранить в столбце таблицы varchar или текстового типа лучше для создания строки столбца типа текста, может быть длинной, если массив длинный, простой пример

$val = serialize(array('test','test2',"test3",'test4'=>'1'));

or 

$val = serialize($post_array['cart']);

когда вы получите столбец из таблицы, вы можете не инициализировать строку, которая даст вам массив назад

print_r(unserialize($val));

or 

$cart = print_r($row->column_name);

вы можете пройти через корзину, как вы делаете прямо сейчас.

  • 0
    пожалуйста, смотрите мои изменения выше ...
  • 0
    да, создайте многомерный массив всех предметов для purchase_id 17, сериализуйте массив и сохраните в таблице, это будет массив ('itme1' => массив (вся информация), 'item2' => массив (вся информация), 'item3' = > массив (вся информация)); и сериализовать его
0

Эти функции (из помощников PHP Session) могут помочь вам:

function decode_session($data){
  $temp = $_SESSION;
  session_decode($data);
  $out = $_SESSION;
  $_SESSION = $temp;
  return $out;
}

function encode_session($data){
  $temp = $_SESSION;
  $_SESSION = $data;
  $out = session_encode();
  $_SESSION = $temp;
  return $out;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню