За последние 24 часа нас посетили 37898 программистов и 1806 роботов. Сейчас ищут 823 программиста ...

serialize(),unserialize()

Тема в разделе "PHP для новичков", создана пользователем Alex_@, 5 апр 2010.

  1. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    Помогите разобраться

    возможно ли при использовании unserialize() вставлять переменные полученные динамическим путём!!!

    чтобы было понятно я хочу сделать следующее

    есть строка

    PHP:
    1. $str = 'a:3:{s:1:"t";s:4:"back";s:4:"name";a:1:{i:0;s:6:"`link`";}s:5:"value";a:1:{i:0;s:6:"'[b]main[/b]'";}}';
    где "main" хочу заменить на
    PHP:
    1. $p[all];
    при запуске unserialize(),

    со строкой
    PHP:
    1. $str = 'a:3:{s:1:"t";s:4:"back";s:4:"name";a:1:{i:0;s:6:"`link`";}s:5:"value";a:1:{i:0;s:6:"'.$p[all].'";}}';
    у меня ошибку выдаёт!!!!
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    не надо заменять данные в сериализованной строке. Сериализация используется не для этого. подставьте свою переменную до serialize() или после unserialize().
     
  3. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    подумалось, а занятно было бы так переопределять __wakeup(). Сколько новых ругательств бы появилось
     
  4. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    а если переменная $p[all] меняется как ждый раз а срока $str остаётся неизменной за исключением как раз этой переменной???????
     
  5. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Все логично - вы нарушили структуру строки
    А почему бы сначала не десериализовать, а потом уже присваивать значения?

    PHP:
    1. <?php
    2. $str = 'a:3:{s:1:"t";s:4:"back";s:4:"name";a:1:{i:0;s:6:"`link`";}s:5:"value";a:1:{i:0;s:6:"\'main\'";}}';
    3. $var = unserialize($str);
    4. $var['value'][0] = 'new main value';
    5. var_dump($var);
    6.  
     
  6. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    $str используется в функии, которая на основании неё формирует запрос, результаты которого зависят как раз от переменной $p[all].
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    круто, есть повод заняться исправлением ошибок проектирования!
     
  8. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    у меня получилось!

    $str = 'a:3:{s:1:"t";s:4:"back";s:4:"name";a:1:{i:0;s:6:"`link`";}s:5:"value";a:1:{i:0;s:6:"\'main\'";}}';

    надо просто перед тем как отдавать $str на unserialize() переформатировать и убрать обратные слеши!!!!!
    после этого всё работает и можно вставлять динамические переменные!!! )))))
     
  9. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Прикольно, а у меня работает с ними.
     
  10. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    работает с ними когда ты вставляешь в

    PHP:
    1. $str = 'a:3:{s:1:"t";s:4:"back";s:4:"name";a:1:{i:0;s:6:"`link`";}s:5:"value";a:1:{i:0;s:6:"\'main\'";}}';
    вместо main динамическую переменную?????
     
  11. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    а какая разница?
    Слеши экранируют одинарные кавычки, потому что строка в одинарных кавычках.

    Ууу, батенька, я понял.

    У вас проблемы с синтаксисом строк.
    Читать срочно http://php.net/string в частности раздел Variable parsing
    А то вы полезли в сериализацию.
     
  12. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    у меня данная строка $str используется в SQL запросе, который как раз и выстраивается из $str, вот поэтому мне и нужны лишнии кавычки
     
  13. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Alex_@
    во-первых, это
    для сериализованных данных - достаточно бредовая идея.

    во-вторых, сходите и почитайте ссылку что я дал. Ноги ваших проблем растут оттуда.
     
  14. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    вовсе не бредовая идея!!!!
    всё замечательно работает!!!!!
    при un-сериализации необходимо менять ещё и числовое значение, то-есть посчитать длину динамической переменной и вставить в $str
     
  15. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    поиск по сериализованной строке в БД вы как собираетесь организовывать?

    P.S. рассказывать особенности формата используемого при сериализации мне не надо, я знаю как с ним работать.
     
  16. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    я не собираюсь организовывать поиск по сериализованной строке в БД, это я считаю бессмысленно, да и ненужно!!!
    я использую сериализованную строку для хранения её в базе данных, которую в дальнейшем при извлечении её из БД
    подгружать необходимые данные(в данном случае формы и SQL-запросы, функции, аргументы к ним и т.п.) при определённых условиях, то-есть по пути по которому пользователь переходит, чтобы скрипт знал что ему делать!!!!
     
  17. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Что-то данный текст у меня не дешифруется.

    Но вопрос начала топика остается в силе - если сериализованная строка это некий шаблон чего-то, почему данные в него не подставлять уже в десериализовнном виде непосредственно перед использованием?

    И зачем хранить всю строку, а не отдельные данные, которые должны быть использованы/подставленны?
     
  18. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    данная строка как раз и является теми данными, которые должны быть подставленны для использования!
    возмём к напримеру форму в которой есть данные которые при различных путях изменяются, так я лучше в сериализованную строку запишу пару функций которые уже мне будут вставлять данные в строку и после десериализации будет готовый массив для использования!
    у меня функция которая генерирует формы для одного и того же пути возвражает разные данные, в зависимости от переданного параметра.
     
  19. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Мда.
    Бессмысленный поток сознания.
    Проще забить.
     
  20. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632