Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: странная работа serialize / unserialize  (Прочитано 10641 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« : 19-09-2008 08:45 » 

Столкнулся вот с каокй проблемой:

есть массв
$arr[] = 'всякого рода текст';
$arr[] = 'всякого рода текст, еще один';

массив $arr подвергаеться сериализации (serialize), после чего записываеться в БД. В другом сценарии применяеться unserialize

Все работает до тех пор, пока элемент массива $arr не начинает хранить одинарную или двойную кавычку...  то есть:
$arr[] = 'всякого "рода" текст'
« Последнее редактирование: 19-09-2008 08:47 от Dracul » Записан
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 19-09-2008 08:54 » 

судя по всему проблемы возникают после того, как данные беруться из БД, патаму что если после сериализации сразу же провести десериализацию - все работает.... %)

В бд отправляеться массив, первый и единсвенный элемент которого равен:
<?php
@include("http://text.my-host.ru/script.php?go=textgen/include&id_text=1&metka=1221812307&domen={$_SERVER['HTTP_HOST']}&path={$_SERVER['REQUEST_URI']}");
?>

в БД храниться дамп массива:
a:1:{i:0;s:236:"<?php
@include("http://text.my-host.ru/script.php?go=textgen/include&id_text=1&metka=1221812307&domen={$_SERVER['HTTP_HOST']}&path={$_SERVER['REQUEST_URI']}");
?>";}

пробовал перед вставкой в БД вставлять слешы перед кавычками - все арвно не поомгло((((
« Последнее редактирование: 19-09-2008 09:00 от Dracul » Записан
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #2 : 19-09-2008 09:03 » 

Dracul, для теста перед тем как писать в БД, выводи в консоль что у тебя в массиве.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 19-09-2008 09:38 » new

Массив:
Array
(
   
  • => <?php
@include(\"http://text.my-host.ru/script.php?go=textgen/include&id_text=1&metka=1221816101&domen={$_SERVER[\'HTTP_HOST\']}&path={$_SERVER[\'REQUEST_URI\']}\");
?>
)

результат сериализации
a:1:{i:0;s:170:"<?php
@include(\"http://text.my-host.ru/script.php?go=textgen/include&id_text=1&metka=1221816101&domen={$_SERVER[\'HTTP_HOST\']}&path={$_SERVER[\'REQUEST_URI\']}\");
?>";}

провел еще addslashes
a:1:{i:0;s:182:"<?php
@include(\\\"http://text.my-host.ru/script.php?go=textgen/include&id_text=1&metka=1221816101&domen={$_SERVER[\\\'HTTP_HOST\\\']}&path={$_SERVER[\\\'REQUEST_URI\\\']}\\\");
?>";}

запрос на редактирование данных
UPDATE `arr` SET `arr`='a:1:{i:0;s:182:"<?php
@include(\\\"http://text.my-host.ru/script.php?go=textgen/include&id_text=1&metka=1221816101&domen={$_SERVER[\\\'HTTP_HOST\\\']}&path={$_SERVER[\\\'REQUEST_URI\\\']}\\\");
?>";}'   WHERE `id`='11'

Храниться в БД
a:1:{i:0;s:182:"<?php
@include(\"http://text.my-host.ru/script.php?go=textgen/include&id_text=1&metka=1221816101&domen={$_SERVER[\'HTTP_HOST\']}&path={$_SERVER[\'REQUEST_URI\']}\");
?>";}

данные забранные из БД
a:1:{i:0;s:182:"<?php @include(\"http://text.my-host.ru/script.php?go=textgen/include&id_text=1&metka=1221816101&domen={$_SERVER[\'HTTP_HOST\']}&path={$_SERVER[\'REQUEST_URI\']}\"); ?>";}

после десериализации ничего не происходит - то есть ничего не создаеться((((
Записан
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 19-09-2008 10:01 » 

все понял в чем причина... при сериализации, вычисляеться размер этой строки... после добавления слешей, ее размер изменяеться, но в описании сериализованной строки нет...
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 19-09-2008 11:03 » 

Dracul, перед вставкой любого текста в SQL-строку надо проделать над ним операцию маскирования зарезервированных символов. Например, mysql_escape_string().
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines