Je cherche à stocker des données à partir de certaines fiches "virtuelles". Chaque carte a un recto et un verso, et l'utilisateur peut stocker plusieurs cartes. Chaque côté aura des données dessus.
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, mes diagrammes se sont un peu foirés. Mais vous obtenez le message. :)
Imaginez-le à partir des schémas ci-dessus. Je voudrais stocker les données de chaque carte (recto et verso) dans un cookie, sous forme de tableau (peut-être), puis pouvoir récupérer chaque valeur et l'insérer le cas échéant (sur une page différente).
Dans le même temps, gardez à l'esprit que l'utilisateur peut créer autant de cartes qu'il le souhaite. Je ne peux pas utiliser POST ou fonctions GET. Le bit de tableau est discutable, si vous pouvez penser à un moyen plus simple de stocker ces données dans un cookie, faites-le moi savoir. Veuillez noter: don ' Je suggère de le stocker dans une base de données, car cela ne sera pas pratique pour le projet. :)
Utilisez json_encode
/json_decode
Pour obtenir/définir des tableaux dans les cookies.
Tableau de test
$cardArray=array(
'CARD 1'=>array('FRONT I', 'BACK I'),
'CARD 2'=>array('FRONT 2', 'BACK 2')
);
convertir et écrire le cookie
$json = json_encode($cardArray);
setcookie('cards', $json);
la chaîne enregistrée ressemble à ceci
{"CARD 1":["FRONT I","BACK I"],"CARD 2":["FRONT 2","BACK 2"]}
récupérer le cookie
$cookie = $_COOKIE['cards'];
$cookie = stripslashes($cookie);
$savedCardArray = json_decode($cookie, true);
afficher le tableau restauré
echo '<pre>';
print_r($savedCardArray);
echo '</pre>';
les sorties
Array
(
[CARD 1] => Array
(
[0] => FRONT I
[1] => BACK I
)
[CARD 2] => Array
(
[0] => FRONT 2
[1] => BACK 2
)
)
Modifier
Si vous vous interrogez sur stripslashes
, c'est parce que la chaîne enregistrée est en fait
{\"CARD 1\":[\"FRONT I\",\"BACK I\"],\"CARD 2\":[\"FRONT 2\",\"BACK 2\"]}
setcookie
ajoute \
avant de partir pour les échapper. Si vous ne vous en débarrassez pas, json_decode
Échouera.
Édition II
Pour ajouter une nouvelle carte au cookie
$savedCardArray['CARD XX']=array('FRONT XX', 'BACK XX');
$savedCardArray
et non $cardArray
.La sérialisation/désérialisation fonctionne comme une alternative plus simple à json_encode/json_decode
setcookie ('cookiename', serialize (array), ...) pour enregistrer dans le cookie.
array = unserialize ($ _ COOKIE ['cookienam']) pour récupérer le tableau.
Jouez avec quelque chose comme ça
<?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
?>