2

我有一个新表单,允许用户在使用亚当分页方案显示的结果中选择“每页项目”。选择已经通过分页链接传递到下一页和上一页。如果我想将“每页项目”(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>
4

2 回答 2

1

设置时$_GET['ipp'],通过 将其值存储在 cookie 中setcookie()。在随后的页面上,首先检查是否$_GET['ipp']设置了,这意味着值正在被更改,然后检查是否$_COOKIE['ipp']设置了新值,如果没有传入新值$_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')) {...}
于 2013-01-14T03:17:44.277 回答
0

在 PHP 中

setcookie("ipp", VALUE);

检索它

$_COOKIE["ipp"]
于 2013-01-14T03:16:56.740 回答