为“每页项目”设置cookie


Setting a cookie for "items per page"

我有一个新表单,允许用户在使用Adam的分页方案显示的结果中选择"每页项"。选择已经通过分页链接传递到下一页和上一页。如果我想将"每页条目"(ipp)存储为cookie,并且能够回忆使用类似方案的其他页面,那么最好的方法是什么?下面是我的表单:

<form action="product_list_by_category_ipp.php" method="get" name="ippForm" id="ipp_changer" class="ipp_changer">
<label>
  #pp:</label>
<select name="ipp" style="display:inline!important;margin:4px;" onchange="document.forms['ipp_changer'].submit()"> 
<option value="<?php echo $ipp; ?>"><?php echo $_GET['ipp']; ?></option>
<option value="5">5</option>
<option value="15">15</option>
<option value="25">25</option>
<option value="All">All</option>
</select>
<input type="hidden" name="cat" value="<?php echo $product_category; ?>" />

</form>

设置$_GET['ipp']时,通过setcookie()将其值存储在cookie中。在随后的页面中,首先检查$_GET['ipp']是否设置,这意味着该值正在更改,然后检查如果$_GET中没有传递新值,则cookie $_COOKIE['ipp']是否设置,最后,如果两者都不存在,则提供默认值。

任何时候$_GET['ipp']存在,它将覆盖现有的cookie,直到另一个$_GET['ipp']覆盖它。

// If the value was passed in $_GET and is an int or "All"...
if (isset($_GET['ipp']) && (ctype_digit($_GET['ipp']) || $_GET['ipp'] == 'All')) {
  // Store it in the cookie
  setcookie('ipp', $_GET['ipp']);
  // And save in a variable
  $ipp = $_GET['ipp'];
}
// Then check existing cookies
else if (isset($_COOKIE['ipp']) && (ctype_digit($_COOKIE['ipp']) || $_COOKIE['ipp'] == 'All')) {
  $ipp = $_COOKIE['ipp'];
}
// Finally use a default value if none was set
else {
  // Default to 3 for example:
  $ipp = 3;
}

在后面的标记中,您只需要使用值$ipp,因为它的源已经从$_GET, $_COOKIE中解析出来了,或者使用默认值。由于我们将其验证为整数,因此不需要通过htmlspecialchars()进行额外的转义。

<option value="<?php echo $ipp; ?>"><?php echo $ipp; ?></option>

如果你真的想严格验证$_GET['ipp']是你提供的选项之一,使用in_array()

// Make sure it's one of your allowed values...
if (isset($_GET['ipp']) && in_array($_GET['ipp'], array(5,15,20,25,'All')) {...}

In PHP

setcookie("ipp", VALUE);

检索

$_COOKIE["ipp"]