¿Cómo almacenar un arreglo de PHP dentro de una cookie?
Estoy tratando de crear una lista de tareas en PHP usando cookies, sin embargo, estoy teniendo problemas para almacenar la cookie dentro de un arreglo para poder agregar más de una cookie.
Cuando envío el formulario, se agrega una cookie, pero cuando intento agregar otra, la primera se reemplaza.
Quiero guardar la cookie en una variable, agregarla a un arreglo y luego guardarla al final de la lista en lugar de reemplazar la cookie actual.
Aquí está el código que tengo hasta ahora:
if (isset($_POST['submit'])) {
$task = htmlentities($_POST['task']);
$tasks = array();
if (isset($_COOKIE[$task])) {
array_push($tasks, $task);
echo $_COOKIE[$task];
} else {
}
setcookie('task', $task, time() + 3600);
header('Location: index.php');
}
No estoy seguro exactamente de dónde me estoy equivocando, ¿alguien podría ayudarme?
davy.ai
Hay algunos problemas con el código que has proporcionado.
En primer lugar, estás creando un nuevo array vacío para
$tasks
cada vez que se envía el formulario. Esto significa que el array no tendrá ninguna tarea almacenada previamente. En su lugar, debes inicializar el array$tasks
fuera del bloqueif (isset ($_POST['submit']))
para que mantenga sus valores entre envíos.En segundo lugar, solo estás comprobando si existe una cookie con el nombre de la tarea enviada. Si existe, agregas el nombre de la tarea al array
$tasks
, pero no haces nada con el array. En lugar de eso, primero deberías recuperar cualquier tarea existente de la cookie y agregarlas al array antes de agregar la nueva tarea.Aquí tienes una versión modificada de tu código que debería funcionar:
En este código, inicializamos
$tasks
fuera del bloqueif (isset ($_POST['submit']))
para que mantenga sus valores entre envíos.Cuando comprobamos si la cookie
tasks
existe, decodificamos su valor de una cadena JSON a un array utilizando la funciónjson_decode()
.Luego agregamos la nueva tarea al array
$tasks
utilizandoarray_push()
, y codificamos el array actualizado de nuevo en una cadena JSON utilizandojson_encode()
.Finalmente, guardamos el array
$tasks
codificado en JSON en la cookietasks
y redirigimos al usuario de nuevo a la página de índice.Con este código, cada nueva tarea se agregará a la lista existente de tareas en la cookie
tasks
, en lugar de reemplazarla.