Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: serialize - неправильная запись цифр

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Aricus
Отправлено: 22 Августа, 2014 - 20:48:38
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




Мне нужно записать массивы в БД, методом serialize.
При их изменении проводится следующая последовательность действий: код загружается из базы данных, декодируется в массив, проводятся необходимые изменения, кодируется и записывается обратно в БД. Если кому интересно, код этой части:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $katStatus = mysql_fetch_row (mysql_query("SELECT `comment` FROM `admin room` WHERE `parametr` = 'Кат статус'",$link));
  2. $katStatusArray = unserialize ($katStatus[0]);
  3. ...
  4.                 if (count($katNameArray) !== $wrightTo)
  5.                         {for ($iD2 = count($katNameArray) - 1; $iD2 > $_POST['KatAddAfter']; $iD2--)
  6.                         {$iD2Next = $iD2 + 1;
  7.                         $katStatusArray[$iD1Next] = $katStatusArray[$iD1];}}
  8.         $katStatusArray[$wrightTo] = $_POST['KatAddStatus'];
  9.         $codeKatAdd2 = serialize ($katStatusArray);
  10. ...
  11.                         if (!mysql_query("UPDATE `admin room` SET `comment` = '{$codeKatAdd2}' WHERE `parametr` = 'Кат статус'",$link))
  12.                         {echo '<span class="textOrange"> Не удалось отправить добавленные категории в базу данных. </span> <br />'.mysql_error();}


Так вот, если в массиве записаны тексты, то всё происходит нормально. А если там записаны числа, то с каждой операцией массив начинает портиться. А точнее, новая цифра появляется, а одна из старых исчезает.
Вот это
CODE (SQL):
скопировать код в буфер обмена
  1. a:8:{i:0;s:1:"1";i:1;i:0;s:0:"";N;i:2;s:1:"1";i:3;i:0;i:4;i:0;i:5;i:0;i:6;i:0;}

должно было кодировать массив, в котором значениями элементов массива были только 0 или 1.
Почему это происходит?
 
 Top
Aricus
Отправлено: 26 Августа, 2014 - 03:53:44
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




Этим сообщением поднимаю тему, так как за 3 дня никто на неё не ответил.

(Отредактировано автором: 26 Августа, 2014 - 03:54:10)

 
 Top
Sail
Отправлено: 26 Августа, 2014 - 08:33:32
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Aricus, после второй строчки Вашего примера добавьте:

Перед 11-й:

Проанализируйте содержимое массивов...

(Отредактировано автором: 26 Августа, 2014 - 13:36:57)

 
 Top
Aricus
Отправлено: 28 Августа, 2014 - 04:20:50
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




Ну, та ересь, что была в БД

a:11{i:0;s:1:"0";i:1;s:1:"1";s:0:"";N;i:2;s:1:"0";i:3;N;i:4;s:1:"1";i:7;N;i:6;s:1:"1";i:5;s:1:"0";i:10;N;i:9;s:1:"1";}

то и расшифровалось

array(11) { [0]=> string(1) "0" [1]=> string(1) "1" [""]=> NULL [2]=> string(1) "0" [3]=> NULL [4]=> string(1) "1" [7]=> NULL [6]=> string(1) "1" [5]=> NULL [10]=> NULL [9]=> string(1) "1" }

Это - первая вставка.

дало почти то же самое, только вместо
[5]=> NULL
пишет
[5]=> string(1) "0"

Ну, и

кодирует ересь.
string(119) "a:11:{i:0;s:1:"0";i:1;s:1:"1";s:0:"";N;i:2;s:1:"0";i:3;N;i:4;s:1:"1";i:7;N;i:6;s:1:"1";i:5;s:1:"0";i:10;N;i:9;s:1:"1";}"
Отмечу только, что, хотя отправляется на сервер array(11), строчек там 12
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB