我需要将最后 3 次搜索保存在 cookie 中并显示

I need that the last 3 searches are saved in a cookie and displayed

我希望将最近 3 次搜索保存在 Cookie 中并显示在“

”标签中。 这是我的 HTML 代码:

    <form class="Dform" method="POST" action="index.php">
           <input type="text" name="search" value="">
           <input type="submit" name="" value="Search">
    </form>

我只显示了之前的搜索,但我不知道如何执行前 2 个搜索,这是我的 php 代码:

<?php
  if (!empty($_POST['search']))
    {
      setcookie('PreviousSearch', $_POST['search'], time()+60*60,'',localhost);
    }
?>

<?php
    $r1 = htmlspecialchars($_COOKIE['PreviousSearch']);
    echo '<p> Previous search (1) : '.$r1.'</p>'; 
?>

有多种方法可以实现这一点。 虽然我更喜欢数据库方法,但我会保持简单并向您展示序列化方法。

您的 Cookie 中当前拥有的内容:上次搜索。
您在 Cookie 中想要的内容:最后三个搜索。

所以,我们需要一个数组在Cookie中。但是我们不能在里面放一个普通的数组。有一些解决方法。我将使用 serialize 方法。但我们也可以使用 json,逗号分隔的列表,...

您的代码应执行如下操作:

// Gets the content of the cookie or sets an empty array
if (isset($_COOKIE['PreviousSearch'])) {
    // as we serialize the array for the cookie data, we need to unserialize it
    $previousSearches = unserialize($_COOKIE['PreviousSearch']);
} else {
    $previousSearches = array();
}

$previousSearches[] = $_POST['search'];
if (count($previousSearches) > 3) {
    array_shift($previousSearches);
}
/*
 * alternative: prepend the searches
$count = array_unshift($previousSearches, $_POST['search']);
if ($count > 3) {
    array_pop($previousSearches);
}
 */

// We need to serialize the array if we want to pass it to the cookie
setcookie('PreviousSearch', serialize($previousSearches), time()+60*60,'',localhost);

我的代码未经测试,因为我已经很久没有使用 cookie 了。但它应该有效。