Reputation: 507
I'm looking to store some data from some 'virtual' index cards. Each card has a front and a back, and the user can store multiple cards. Each side will have data on it.
I ----------------- I I CARD 1 FRONT I I------------------I
I --------------- I I CARD 1 BACK I I-----------------I
I ----------------- I I CARD 2 FRONT I I------------------I
I --------------- I I CARD 2 BACK I I-----------------I
OK, my diagrams got messed up a bit. But you get the message. :)
Imagine it from the diagrams above. I'd like to store each card's data (front and back) in a cookie, as an array (maybe), and then be able to pull each value back and insert it where applicable (on a different page).
At the same time, bear in mind that the user can make as many cards as they like. I can't use POST or GET functions. The array bit is debatable, if you can think of an easier way of storing this data in a cookie, let me know. Please note: don't suggest storing in a database, as it won't be convenient for the project. :)
Upvotes: 19
Views: 49136
Reputation: 966
Serialize/Unserialize works as a simpler alternative to json_encode / json_decode
setcookie('cookiename', serialize(array), ...) to save to cookie.
array = unserialize($_COOKIE['cookienam']) to retrieve array.
Upvotes: 3
Reputation: 85578
Use json_encode
/ json_decode
to get / set arrays in cookies.
Test array
$cardArray=array(
'CARD 1'=>array('FRONT I', 'BACK I'),
'CARD 2'=>array('FRONT 2', 'BACK 2')
);
convert and write the cookie
$json = json_encode($cardArray);
setcookie('cards', $json);
the saved string looks like this
{"CARD 1":["FRONT I","BACK I"],"CARD 2":["FRONT 2","BACK 2"]}
get the cookie back
$cookie = $_COOKIE['cards'];
$cookie = stripslashes($cookie);
$savedCardArray = json_decode($cookie, true);
show the restored array
echo '<pre>';
print_r($savedCardArray);
echo '</pre>';
outputs
Array
(
[CARD 1] => Array
(
[0] => FRONT I
[1] => BACK I
)
[CARD 2] => Array
(
[0] => FRONT 2
[1] => BACK 2
)
)
Edit
If you wonder about stripslashes
, it is because the string saved actually is
{\"CARD 1\":[\"FRONT I\",\"BACK I\"],\"CARD 2\":[\"FRONT 2\",\"BACK 2\"]}
setcookie
adds \
before quoutes to escape them. If you not get rid of those, json_decode
will fail.
Edit II
To add a new card to the cookie
$savedCardArray['CARD XX']=array('FRONT XX', 'BACK XX');
$savedCardArray
and not $cardArray
.Upvotes: 48
Reputation: 691
Play with something like this
<?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
?>
Upvotes: 2