Codeigniter : Записване на цял масив в база данни.

index

Super Moderator
Имам два масива записани в базата данни, първият е копиран от UserGuide им, а вторият съм го писал аз.
Първият няма проблем и си го вадя :
Код:
$table_setings = $this->sets->conf['table_setings'] ;
if(is_array($table_setings) ) 
{  echo " ok " ; }  else {  echo " epic fail"; }
все ми връща ок, както трябва да сие ...

Обаче при моят въпросен масив при
Код:
$subs_up  = $this->sets->conf['subs_up'];
if(is_array($subs_up) ) 
{  echo " ok " ; }  else {  echo " epic fail"; }
Резултата все е epic fail.

Tова е първият масив , от сайта им :
Код:
array (                     'table_open'          => '<table border="0" >',                      'heading_row_start'   => '<tr>',                     'heading_row_end'     => '</tr>',                                     'row_start'           => '<tr>',                     'row_end'             => '</tr>',                     'cell_start'          => '<td>',                     'cell_end'            => '</td>',                      'row_alt_start'       => '<tr>',                     'row_alt_end'         => '</tr>',                     'cell_alt_start'      => '<td>',                     'cell_alt_end'        => '</td>',                      'table_close'         => '</table>'               );

Това е моят масив :
Код:
array(  'zip',                     'rar',                     'txt',                     'sub',                     'str',                     'srt',                     'info',                     'idx',                     'ttxt',                     'aqt',                     'ssa',                     'aas',                     'php');
Пробвах всички начини за вкарване на масив. Този в който в момента ви показвам ако го рънна като чист масив в PHP е ок, но от базата данни се пробвалям.
Код:
$subs_up = array(  'zip',                     'rar',                     'txt',                     'sub',                     'str',                     'srt',                     'info',                     'idx',                     'ttxt',                     'aqt',                     'ssa',                     'aas',                     'php');
if(is_array($subs_up) ) 
{  echo " ok " ; }  else {  echo " epic fail"; }

Някаква идея как мога да го оправя ? И това ми е супер интересно защо при 1 масив всичко работи перфектно,а при друг - пълен провал.
 
Опита ли eval(), попринцип би трябвало да го приеме за string след като го вземе от базата данни
 
Разликата между двата масива, която виждам е, че единия е с индексите по подразбиране 0,1,2,3..., а другия е с имена стрингове. Силно ме съмнява да е това, но ако може да видя какво точно е тоя клас sets, защото сигурно 3 пъти съм чел userguide и такова нещо не помня ;)
 
adrian каза:
Разликата между двата масива, която виждам е, че единия е с индексите по подразбиране 0,1,2,3..., а другия е с имена стрингове. Силно ме съмнява да е това, но ако може да видя какво точно е тоя клас sets, защото сигурно 3 пъти съм чел userguide и такова нещо не помня ;)
Пробвах и с индекси на стойностите и без индекси не ства. А това Сетс съм го създал аз.То е просто прави връската с базата данни
Код:
SELECT * 
FROM  `config`
 
Пробвах и да въведа масива като сериализиран....
http://img2.pict.com/f0/fe/32/3937555/0/untitled.png
Като се опитам да го върна в масив.....
Код:
 a:13:{i:0;s:3:"zip";i:1;s:3:"rar";i:2;s:3:"txt";i:3;s:3:"sub";i:4;s:3:"str";i:5;s:3:"srt";i:6;s:4:"info";i:7;s:3:"idx";i:8;s:4:"ttxt";i:9;s:3:"aqt";i:10;s:3:"ssa";i:11;s:3:"aas";i:12;s:3:"php";}


Някой някакви идеи ?
Или поне да каже "откажи се " ?
 
Towa което се сещам е да пробваш да въведеш и изведеш този масив през обикновен PHP файл да не би CI да прави някакви шашми заради защитите си. Ако тръгне така пробвай да го кодираш с base64 след serialize.

Друг вариант, според мен по-бързо работещ от горния е да въведеш разширенията разделени със запетайки и после explode :?
 
Единствения начин да запазиш в база данни масив е чрез serialize.
Начина по който да превърнеш един serialized низ в масив е чрез unserializе.

т.е.
при insert: POST['array'] = serialize(POST['array'])
при select: row['array'] = unserializе(row['array'])
 
akolevutd каза:
Единствения начин да запазиш в база данни масив е чрез serialize.
Начина по който да превърнеш един serialized низ в масив е чрез unserializе.

т.е.
при insert: POST['array'] = serialize(POST['array'])
при select: row['array'] = unserializе(row['array'])
http://img2.pict.com/f0/fe/32/3937555/0/untitled.png
Виж какво става като се опитам да го върна от сериализ.
А сега , докато си правех яденето , ми дойде друга идея , към sets да създам 1 функция която да търси в базта данни key = subs_up
пак ще върне масив ....
Но май ще се откажа от него и направо ще го въведа не с запетайки ами с |
отфесни черти и направо към upload настройките
 
akolevutd каза:
Правиш и мислиш групости...
Виж примерите за серилизация. Доста елементарно нещо е.
Възможно, не отричам !
error at offset 0 of 195 byte
Само това не мога да го разбера защо ми връща грешка
Код:
 a:13:{i:0;s:3:"zip";i:1;s:3:"rar";i:2;s:3:"txt";i:3;s:3:"sub";i:4;s:3:"str";i:5;s:3:"srt";i:6;s:4:"info";i:7;s:3:"idx";i:8;s:4:"ttxt";i:9;s:3:"aqt";i:10;s:3:"ssa";i:11;s:3:"aas";i:12;s:3:"php";}
 
Код:
<?php
$array = array( 'part 1', 'part 2' );

$serializеdArray = serialize( $array );
$unserializеdArray = unserialize( $serializеdArray );

echo $serializеdArray.'<br>';
print_r($unserializеdArray);
 
Няма никакъв проблем:
Код:
<?php
$unserializеdArray = unserialize( 'a:13:{i:0;s:3:"zip";i:1;s:3:"rar";i:2;s:3:"txt";i:3;s:3:"sub";i:4;s:3:"str";i:5;s:3:"srt";i:6;s:4:"info";i:7;s:3:"idx";i:8;s:4:"ttxt";i:9;s:3:"aqt";i:10;s:3:"ssa";i:11;s:3:"aas";i:12;s:3:"php";}' );
print_r($unserializеdArray);
този код дава този резултат:
Array
(
[0] => zip
[1] => rar
[2] => txt
[3] => sub
[4] => str
[5] => srt
[6] => info
[7] => idx
[8] => ttxt
[9] => aqt
[10] => ssa
[11] => aas
[12] => php
)
 
akolevutd каза:
Няма никакъв проблем:
Код:
<?php
$unserializеdArray = unserialize( 'a:13:{i:0;s:3:"zip";i:1;s:3:"rar";i:2;s:3:"txt";i:3;s:3:"sub";i:4;s:3:"str";i:5;s:3:"srt";i:6;s:4:"info";i:7;s:3:"idx";i:8;s:4:"ttxt";i:9;s:3:"aqt";i:10;s:3:"ssa";i:11;s:3:"aas";i:12;s:3:"php";}' );
print_r($unserializеdArray);
този код дава този резултат:
Array
(
[0] => zip
[1] => rar
[2] => txt
[3] => sub
[4] => str
[5] => srt
[6] => info
[7] => idx
[8] => ttxt
[9] => aqt
[10] => ssa
[11] => aas
[12] => php
)


Така и предполагам, но не мога да разбера защо ми дава грешката.
няма смисъл да се бавя повече и ще го запиша в базата данни :
zip|rar|php|txt|sub|......



Благодаря ви много ! :)
ПО-нататък ще се мъча да го оправя, :)
 
Пример:
Код:
	function insert(){
		$subs_up = array('zip','rar','txt','sub','str','srt','info','idx','ttxt','aqt','ssa','aas','php'); 
		$this->db->set('arr', serialize($subs_up))->insert('test');
	}
	function select(){
		$query = $this->db->get('test');
		print('<pre>');
		foreach ($query->result() as $row)
		{
			print_r(unserialize($row->arr));
		}
	}
Таблицата е test, колоната arr (TEXT)(utf8_unicode_ci)
Записът през phpMyAdmin изглежда така:
a:13:{i:0;s:3:"zip";i:1;s:3:"rar";i:2;s:3:"txt";i:3;s:3:"sub";i:4;s:3:"str";i:5;s:3:"srt";i:6;s:4:"info";i:7;s:3:"idx";i:8;s:4:"ttxt";i:9;s:3:"aqt";i:10;s:3:"ssa";i:11;s:3:"aas";i:12;s:3:"php";}
През екшън select изглежда така:
Код:
Array
(
    [0] => zip
    [1] => rar
    [2] => txt
    [3] => sub
    [4] => str
    [5] => srt
    [6] => info
    [7] => idx
    [8] => ttxt
    [9] => aqt
    [10] => ssa
    [11] => aas
    [12] => php
)
Предполагам, че sets ти бърка нещата.
 

Back
Горе