我正在嘗試使用 cookie 創建一個 php 待辦事項串列,但是我正在努力將 cookie 存盤在一個陣列中,以便我可以添加多個 cookie。
當我提交表單時,添加了一個 cookie,但是當我去添加另一個時,第一個被替換。
我想將 cookie 存盤在一個變數中,將其推送到一個陣列中,然后將其保存到串列的末尾,而不是替換當前的 cookie。
這是我到目前為止的代碼:
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');
}
我不確定我到底哪里出錯了,有人能幫忙嗎?
uj5u.com熱心網友回復:
當您存盤具有相同名稱的 cookie 時,它??會被覆寫。您似乎還存盤了單個任務而不是陣列。如果您想安全地存盤陣列,可以嘗試將其存盤為 JSON。
它看起來像這樣:
if (isset($_POST['submit'])) {
$task = htmlentities($_POST['task']);
//Check if the cookie exists already and decode it if so, otherwise pass a new array
$tasks = !empty($_COOKIE['tasks']) ? json_decode($_COOKIE['tasks']) : [];
//if(isset($_COOKIE[$task])) {
array_push($tasks, $task);
// echo $_COOKIE[$task];
//}
$encodedTasks = json_encode($tasks);
setcookie('task', $encodedTasks, time() 3600);
header('Location: index.php');
}
您似乎正在檢查 post 變數的值是否是陣列中的鍵,而不是使用您在 setcookie 中設定的“任務”鍵。您不需要查看陣列是否再次存在,因為您將解碼陣列或空陣列作為“任務”傳遞
uj5u.com熱心網友回復:
您的代碼有一些問題。首先,您不能在 cookie 中存盤陣列,只能存盤字串。您可以做的是在設定 cookie 時將其轉換為 JSON,并在獲取它時對其進行解碼。此外,當推送到您的陣列時,您推送到的陣列會在每次請求時重置。為了解決這個問題,首先從 cookie 中獲取資料。我會使用這樣的東西:
const COOKIE_NAME = 'tasks';
$tasks = ['one', 'two'];
setcookie(COOKIE_NAME, json_encode($tasks));
$newTask = 'another task';
if (isset($_COOKIE[COOKIE_NAME])) {
$tasks = json_decode($_COOKIE[COOKIE_NAME], true);
array_push($tasks, $newTask);
setcookie(COOKIE_NAME, json_encode($tasks));
}
var_dump(json_decode($_COOKIE[COOKIE_NAME], true)); // Every request after the first time a cookie is set "another task" is added to the cookie.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/405647.html
標籤:
