Intereting Posts
назначить вывод выполнения скрипта PHP переменной? PHP Неустранимая ошибка: вызов функции-члена fetch_object () в boolean Оптимизация одновременных запросов ImageMagick с использованием redis / php-resque Загрузите несколько изображений с тем же именем, что и массив Retrofit 2.0.0-beta2 LendingClub.com API 500 Ошибка при покупке заметок на вторичном рынке Вставка целого числа и datetime из PHP в MySQL 5.0 db error Что делает eval на base64 закодированной переменной $ _POST ? Получить ограниченное слово строки Проверка файлов cookie и перенаправление с помощью Apache добавление информации в регистрационную форму php Woocommerce: загружаемые файлы исчезают после восстановления базы данных Сортировка массива несколькими ключами в определенном порядке Общая ошибка: 1366 Неверное целочисленное значение с обновлением Doctrine 2.1 и Zend Form PHP, sql, кодировка UTF-8 Как установить ширину + высоту для загруженного изображения PHP

Хранение и извлечение массива в PHP-файле cookie

Я хочу хранить некоторые данные из некоторых «виртуальных» карточек. Каждая карта имеет переднюю и заднюю стороны, и пользователь может хранить несколько карт. На каждой стороне будут данные.

I ----------------- II CARD 1 FRONT I I------------------I I --------------- II CARD 1 BACK I I-----------------I I ----------------- II CARD 2 FRONT I I------------------I I --------------- II CARD 2 BACK I I-----------------I 

Хорошо, мои диаграммы немного перепутались. Но вы получите сообщение. 🙂

Представьте себе это на диаграммах выше. Я хотел бы сохранить данные каждой карты (спереди и сзади) в файле cookie, как массив (возможно), а затем иметь возможность вытащить каждое значение обратно и вставить его там, где это применимо (на другой странице).

В то же время помните, что пользователь может сделать столько карт, сколько им нравится. Я не могу использовать функции POST или GET. Бит массива является спорным, если вы можете подумать о более легком способе хранения этих данных в cookie, сообщите мне. Обратите внимание: не рекомендуется хранить в базе данных, так как это не будет удобно для проекта. 🙂

Используйте json_encode / json_decode для получения / установки массивов в json_decode cookie.

Контрольный массив

 $cardArray=array( 'CARD 1'=>array('FRONT I', 'BACK I'), 'CARD 2'=>array('FRONT 2', 'BACK 2') ); 

конвертировать и писать cookie

 $json = json_encode($cardArray); setcookie('cards', $json); 

сохраненная строка выглядит так:

 {"CARD 1":["FRONT I","BACK I"],"CARD 2":["FRONT 2","BACK 2"]} 

вернуть файл cookie

 $cookie = $_COOKIE['cards']; $cookie = stripslashes($cookie); $savedCardArray = json_decode($cookie, true); 

показать восстановленный массив

 echo '<pre>'; print_r($savedCardArray); echo '</pre>'; 

выходы

 Array ( [CARD 1] => Array ( [0] => FRONT I [1] => BACK I ) [CARD 2] => Array ( [0] => FRONT 2 [1] => BACK 2 ) ) 

редактировать
Если вы задаетесь вопросом о stripslashes , это потому, что фактически сохраненная строка

 {\"CARD 1\":[\"FRONT I\",\"BACK I\"],\"CARD 2\":[\"FRONT 2\",\"BACK 2\"]} 

setcookie добавляет \ перед клятвами, чтобы избежать их. Если вы не избавитесь от них, json_decode завершится неудачно.


Редактировать II

Чтобы добавить новую карту в файл cookie

  1. загрузить массив, как указано выше
  2. $savedCardArray['CARD XX']=array('FRONT XX', 'BACK XX');
  3. сохраните массив, как указано выше, но теперь, конечно, $savedCardArray а не $cardArray .

Сериализация / Unserialize работает как более простая альтернатива json_encode / json_decode

setcookie ('cookiename', serialize (array), …) для сохранения в cookie.

array = unserialize ($ _ COOKIE ['cookienam']) для извлечения массива.

Играйте с чем-то вроде этого

 <?php $card_id = '123'; $value = 'im a black lady'; setcookie("card[$card_id][front]", $value); // reload page to actually read the cookie echo $_COOKIE['card'][$card_id]['front']; // im a black lady ?>