Помогите написать функцию обработки массива, полученного из BLOB

Crutis

Новичок
Помогите написать функцию обработки массива, полученного из BLOB

Опыта с работой с PHP и MuSQL немного, возник такой вопрос:

Есть табличка продукции с графой ID-шников настроек (csetting_id).
Код:
sql_query("
CREATE TABLE catalog (
id int auto_increment not null,
ctitle varchar(250),
csetting_id mediumblob,
primary key(id)
) ENGINE=MyISAM DEFAULT CHARSET=UTF-8 );
и табличка настроек - в html форме данные из нее выводится как multiple, при сохранении формы
в csetting_id таблицы продукции (сверху) записываются выбранные ID из таблицы:
Код:
sql_query("
CREATE TABLE cat_ids_settings (
id int auto_increment not null,
csettings varchar(100),
primary key(id)
ENGINE=MyISAM DEFAULT CHARSET=UTF-8 );
При сохранении формы с инфо о продукции в бд catalog записываются выделенные options из мультиселекта.

СУТЬ ВОПРОСА.

При редактировании продукта мне нужно выделить option's в мультиселекте.

в переменной $myres лежит строка, которая вытаскивается из blob'a в таком виде
Код:
a:2:{i:0;s:1:"1";i:1;s:1:"3";}
Структура тут, очевидно, такая:
Код:
a:2: - кол-во элементов в массиве
{
i:0;s:1:"1"; - первый, с ID=0 и значением 1
i:1;s:1:"3"; - второй  с ID=1 и значением 3
}
Т.е. при сохранении формы был выбран 1 и 3 элемент select multiple.

Мне надо сообразить функцию (для страницы редактирования) вывода этого select multiple с выделенными option.

Сейчас код такой (просто выводит селект со всеми options):
Код:
[PHP]echo "<select name='csetting_id[]' multiple size='15'>
<option value=0 disabled>Заголовок</option>";
$res1=sql_query("SELECT * FROM pref_"cat_ids_settings");
while($row1=mysql_fetch_assoc($res1)) {
echo "<option value='$row1[id]' class='optun'>$row1[csettings]</option>";
} echo "</select>[/PHP]
Выручайте, гуру!
Кто поможет - проставлюсь на пиво! =)
 

Фанат

oncle terrible
Команда форума
очень много текста, но в чем конкретная проблема, лично я не понял.
 

Crutis

Новичок
Проблема разобрать
Код:
a:2:{i:0;s:1:"1";i:1;s:1:"3";}
c целью написать функцию, формирующую мультиселект с выделенными options по ID

Мультиселект формируется на основе данных таблицы cat_ids_settings, а ID выделяемых опций - в поле csetting_id таблицы products в вышеуказанном формате.
 
Кажется так:
Код:
echo "<select name='csetting_id[]' multiple size='15'>

<option value=0 disabled>Заголовок</option>";

$res1=sql_query("SELECT * FROM pref_"cat_ids_settings");

while($row1=mysql_fetch_assoc($res1)) {

[b]if (in_array(unserialize('a:2:{i:0;s:1:"1";i:1;s:1:"3";}'), $row1['id'])) { [/b]
echo "<option value='$row1[id]' class='optun' [b]selected[/b]>$row1[csettings]</option>";
[b]} else {[/b]
echo "<option value='$row1[id]' class='optun'>$row1[csettings]</option>";
[b]}[/b]

} echo "</select>
 

Crutis

Новичок
Loshadka, спасибо большое, это очень похоже на то.
Даже могу сказать это ТО.

Однако, in_array не хочет работать и ругается на тип данных второго аргумента мои кривые руки:
Код:
Warning:  in_array() [<a href='function.in-array'>function.in-array</a>]:
Wrong datatype for second argument in <b>/home/.../edit_product.php</b>
on line <b>236</b>
А в этой строчке (236) как раз мой злополучный АНсериализатор %(

Условие срабатывает только на ELSE (селект выводится, но не выделяет).
Код:
[PHP]while($row1=mysql_fetch_assoc($res1)) {
		if (in_array(unserialize('$myres'), $row1['id'])) { 
			echo "<option value='$row1[id]' class='optun' selected>$row1[csettings]</option>";
		} else {
			echo "<option value='$row1[id]' class='optun'>$row1[csettings]</option>";
		}
	}[/PHP]
Фaнaт, спасибо за внимание к моему вопросу, но вы слишком высокого мнения о моем уровне владения PHP =)
 

Фанат

oncle terrible
Команда форума
А такое мнение тут ко всем по умолчанию. Это форум людей, занимающихся или изучающих РНР. А к тем, кому "вот щас тут срочно надо по-быстрому поправить" отношение постольку-поскольку. Зайдет такая лошарка - будет тебе код. Не зайдет - остальных твое пиво не сильно возбуждает.
 

Crutis

Новичок
Фaнaт, это не совсем так.

Я не ищу готовое решение, стараюсь все писать сам.
Эта функция - 1/30 часть проделанной работы, на все другое моего опыта и любознательности хватало.

Вышеописанную же проблему решить не смог по причине малой освещенности данного вопроса
в РУнете. Искал и читал сам много по этому вопросу, однако везде лишь теория без практических примеров.

PS: Я занимаюсь и изучаю PHP. Почему вы подумали, что это не так?
А форум - место где люди менее опытные спрашивают совета у более опытных.
Разве не так?
 

Фанат

oncle terrible
Команда форума
Ты уверен, что выбрал правильное слово? Именно совета? А не "напишите за меня код, чтобы я его вставил и у меня все сразу заработало"?
Мне кажется, по твоим ответам, что тебе ближе второе.

если все-таки первое, то почитай [m]types.string[/m] и исправь, для начала, первый аргумент.

Остальную беллетристику даже комментировать не буду. " любознательности хватало". "малой освещенности данного вопроса в РУнете.". Ню-ню.
 

fixxxer

К.О.
Партнер клуба
вот есть у тебя
$data = unserialize($string)
допустим
напиши после него

var_export($data)

и увидишь php код массива

вот и работай дальше так как ты бы стал работать с этим массивом

а если и это не получается то тебе явно надо изучать самые основы синтаксиса php
 

Crutis

Новичок
Фaнaт, нет, я именно хотел разобраться.
Проблему решил, правда на "разборы" ушло часа 2 %(

Подсказка от fixxxer очень помогла, спасибо!
После того как увидел код массива - вопрос решился почти мгновенно.
 

DiMA

php.spb.ru
Команда форума
> В итоге все получилось гораздо проще, чем ожидалось:

поверь, эти "открытия" никому не нужны .-)

> Подсказка от fixxxer очень помогла, спасибо!
> После того как увидел код массива - вопрос решился почти мгновенно.

остальные "откровения" ты сможешь почерпнуть в разеле "На танке" .-)
 

Crutis

Новичок
DiMA, спасибо за конструктивный пафос.
Учту на будущее.
 
Сверху