|
|
|
| Здравствуйте.
В текстовом поле таблицы БД храню в сериализованном виде масив с информацией о закаченных пользователем файлах, структура массива следующая: 'newname' => 'сгенерированное имя файла', 'name' => 'старое имя файла', 'note' => 'примечание к файлу'
Cначала пользователь прикрепляет файлы (точно также, как и на mail.ru, т.е. выбираешь файл -> кнопка "Прикрепить", потом снова выбрать файл ->прикрепить и т.д.), информация об этих файлах помещается в массив и записывается в сессию следующим образом:
$_SESSION["files"]=serialize($fls);
|
Затем, после того как все файлы прикреплены, массив помещается в БД следующим образом:
$fls=addslashes($_SESSION["files"]);
далее запись $fls в бд...
|
так вот, когда я выбираю все записи связанные с конкретным пользователем (их в бд может быть много, соответственно и массивов с инфой о закаченых файлах тоже может быть много ), и вывожу их в цикле, то чтение из результата выборки идет нормально до тех пор, пока не попадется запись с массивом хранящим информацию о файлах НЕ изображениях, т.е. если пользователь загружал изображения, то все нормально, а если это файл zip или какой другой, то цикл чтения результата выборки прерывается... хотя если не производить чтения поля с сериализованым масивом, то цикл отрабатывает до конца... Чтение массива произвожу следующим образом:
$fls=$answers->files_answer!="" ? unserialize($answers->files_answer) : array();
|
Я думаю причина ошибки не в том какие файлы загружал, пользователь, а в чем-то другом, может я не так записываю массив в БД... Подскажите пожалуйста, как правильно записать сериализованный массив в БД и извлеч его... | |
|
|
|
|
|
|
|
для: alba
(19.03.2007 в 09:49)
| | А щас еще выдал ошибку :
Notice: unserialize() [function.unserialize]: Error at offset 87 of 126 bytes in... в строке
$pics=$answers->files_answer!="" ? unserialize($answers->files_answer) : array();
|
Я так понимаю это что-то с магическими кавычками связано... | |
|
|
|
|
|
|
|
для: alba
(19.03.2007 в 09:49)
| | Какого типа поле используется для хранения массива? | |
|
|
|
|
|
|
|
для: Trianon
(19.03.2007 в 10:13)
| | типа TEXT | |
|
|
|
|
|
|
|
для: Alba
(19.03.2007 в 10:17)
| | лучше бы тип BLOB выбрать....
А размер достаточный? | |
|
|
|
|
|
|
|
для: Trianon
(19.03.2007 в 10:23)
| | размер достаточный... я явно не задавал его
А что за тип BLOB? я никогда его не использовал.. | |
|
|
|
|
|
|
|
для: Alba
(19.03.2007 в 10:26)
| | binary large object block - блок данных, структура которых определяется приложением - фактически то, что у Вас и происходит. | |
|
|
|
|
|
|
|
для: Trianon
(19.03.2007 в 10:32)
| | изменил тип и всеравно глюки... | |
|
|
|
|
|
|
|
для: Alba
(19.03.2007 в 10:42)
| | Дамп таблицы можете привести? Лучше - аттачем. | |
|
|
|
|
 889 байт |
|
|
для: Trianon
(19.03.2007 в 10:46)
| | держите... | |
|
|
|
|
|
|
|
для: Alba
(19.03.2007 в 10:57)
| | я делаю компонент конкурсов. нужно чтобы участники в рамках конкурса могли либо отвечать на вопросы в произвольной форме, либо отвечали на вопросы с вариантами ответов (тест типа) или же могли прикрепить файлы (прикольные фото, программы и т.д.)... ответы соответственно хранятся в полях: txt_answer, test_answer и files_answer. так же в этой таблице id конкурса и id участника | |
|
|
|
|
|
|
|
для: Alba
(19.03.2007 в 11:04)
| | ну кто-нибудь поможет мне?
я уже два дня с этой херью потерял, уже бесюся... | |
|
|
|
|
|
|
|
для: Alba
(19.03.2007 в 11:32)
| |
<?php
include ('config.inc.php');
$sql = "SELECT * FROM ngt_con_answers";
$res = mysql_query($sql);
for($base = array(); $row = mysql_fetch_assoc($res); $base[$row['id']] = $row)
if(isset($row['files_answer']) && $row['files_answer'] != 0)
$row['files_answer_array'] = $x = unserialize($row['files_answer']);
echo '<pre>';
print_r($base);
?>
|
Всё идет.
Одного не понимаю. Зачем вместо сериализированного объекта ноль в поле вписывать.
90% времени на этом убил. | |
|
|
|
|
|
|
|
для: Trianon
(19.03.2007 в 12:18)
| | Спасибо. Ща попробую
>Одного не понимаю. Зачем вместо сериализированного объекта ноль в поле вписывать.
>90% времени на этом убил.
да это я когда тип поля на blob, а потом обратно на текст менял нули сами подставились, а я даже и не подумал их убрать... :) | |
|
|
|
|
|
|
|
для: Alba
(19.03.2007 в 12:23)
| | Чет вообще гон какой-то...
Заменил вот это:
for($j=0, $n=count($pics); $j<$n; $j++){
$pic=$pics[$j];
|
вот на это:
и все заработало...
А ваш код оказался точно таким же как и мой, только написан немного подругому... | |
|
|
|
|
|
|
|
для: Alba
(19.03.2007 в 12:37)
| | Совершенно естественно, если элементы в массив укладывались по строковым ключам, а не нарастающим от нуля числовым индексам. | |
|
|
|
|
|
|
|
для: Trianon
(19.03.2007 в 12:40)
| | вот именно что по числовым индексам, вот что вывел print_r:
Array ( [0] => Array ( [newname] => usr_1174297814.jpg [name] => ЭТО ТОЖЕ.jpg [note] => Фотка )
[1] => Array ( [newname] => usr_1174297826.jpg [name] => моя фото.jpg [note] => Еще фотка )
[2] => Array ( [newname] => usr_1174297845.jpg [name] => ЭТО ТОЖЕ.jpg [note] => Третья фотка ) )
|
| |
|
|
|