通过超链接单击重新加载页面后保留表单值

时间:2012-02-02 09:01:21

标签: php validation post get

我正在尝试向搜索项页面添加分页功能。所以我添加了一个UL

的寻呼机
echo '<ul>';
for($i=1; $i<=$pageCount; $i++)
{
    echo '<li><a href="' . $_SERVER['PHP_SELF'] . '?page=' . $i . '">' .  $i . '</a>';
}
echo '</ul>';

当我点击寻呼机中的Page No时,我可以通过

获取页码
if (isset($_GET['page']))
{
    $pageNo = $_GET['page'];
}

但我无法保留用户输入的文字来搜索项目。我尝试了$_POST['txtSearchText'],但在刷新页面后它没有保留该值。

有没有办法在通过超链接点击自我加载页面后保留from值(不使用会话)

3 个答案:

答案 0 :(得分:6)

您可以让链接提交带有搜索参数的隐藏表单,也可以将它们序列化为查询字符串的参数,以便与页码一起发送。

在第一种情况下,您需要Javascript(因此您的“A”链接实际上会在表单中设置一个隐藏字段,并带有相应的页码,然后提交表单)。 在第二种情况下,您不需要它,但是您使查询字符串不那么人性化。

否则会有会话(您可以将搜索保存在会话对象中,也可以在分页链接中使用令牌,以便允许一次打开多个页面)甚至是cookie。

答案 1 :(得分:2)

如果您正在使用GET请求,则只需将搜索查询添加到链接:

echo '<ul>';
for($i=1; $i<=$pageCount; $i++)
{
    echo '<li><a href="' . $_SERVER['PHP_SELF'] . '?page=' . $i . '&query='.url_encode($search_query).'">' .  $i . '</a>';
}
echo '</ul>';

如果您希望使用POST请求,则应提交@Palantir表格或使用AJAX。

在两个浏览器标签中打开两个不同的查询时,由于可能发生冲突,我不会使用会话来存储搜索查询。

答案 2 :(得分:0)

对于基于GET的搜索分页,我所做的是创建一个名为“Params”的类,其中包括以下方法:readURLParams和generateURLParams。它还包含每个潜在参数的成员变量,例如搜索项,位置,页码,过滤器等。加载页面时,首先运行“readURLParams”,它将读取所有GET参数到对象的成员变量中。当您准备为分页功能创建链接时,您可以运行genereateURLParams,它将创建您将附加到分页链接的URL字符串。

现在您不再需要手动跟踪所有URL参数,如果要将方法更改为POST或其他形式的参数传递,则可以向该类添加其他功能。