为“每页项目数”设置Cookie

时间:2013-01-14 03:11:51

标签: php cookies

我有一个新表单,允许用户在使用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>

2 个答案:

答案 0 :(得分:1)

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

任何时候$_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')) {...}

答案 1 :(得分:0)

在PHP中

setcookie("ipp", VALUE);

要检索它

$_COOKIE["ipp"]