web-dev-qa-db-fra.com

Stockage et récupération d'un tableau dans un cookie PHP

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. :)

17
728883902

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

  1. charger le tableau comme ci-dessus
  2. $savedCardArray['CARD XX']=array('FRONT XX', 'BACK XX');
  3. enregistrez le tableau comme ci-dessus, mais maintenant bien sûr $savedCardArray et non $cardArray.
43
davidkonrad

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.

3
Jules Bartow

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

?>
1
Tom