0

我有一个索引页面,其中包含搜索页面,当我提交它时,它通过操作和方法 post 将值传递给 find.php。代码如下

if($_POST['searchsubmit']=="Search"){
$cat=$_POST['searchcategory'];
$area=$_POST['searcharea'];
$term=$_POST['searchbox'];
}

上面的代码写在 find.php 上,现在当我尝试通过基本的分页方法实现分页时,使用 where 条件进行适当的搜索查询

$where="where approved='yes'";
        if($term!=""){
            $where.=" and name like '%$term%'";
        }
        if($cat!=""){
            $where.=" and category like '%$cat%'";
        }
        if($area!=""){
            $where.=" and area like '%$area%'";
        }
        $start=0;
        $end=5;
        if($_GET['page']!="")
        {
            $start=$_GET['page']*$end;
        }

$start 是我的初始限制,$end 是我的记录数。对于分页的第一页,我传递了一个变量 page,第一页为 0

<a href="find.php?page=<?php echo 0;?>">First</a>

我的搜索查询现在变成了

$que="select * from shops ".$where." ORDER BY likes DESC  limit $start,$end";

一旦我点击“第一个”,我的新链接就变成了“/find.php?page=0”,并且我从索引页面搜索栏收到的帖子值都丢失了。

有没有办法保留这些值?我虽然通过 url 再次发送它们的两种方法,或者另一种方法是将它们存储在会话中。有没有第三种方法可用?

4

2 回答 2

1

马克是绝对正确的。不要按原样使用代码。

作为您问题的替代解决方案 -

  • 您的页面 index.php(搜索表单)提交给自己
  • 将您的搜索查询组装为 index.php 中的查询字符串(如果它是一个帖子)
  • 使用组装的查询字符串重定向到 find.php
  • 每个搜索信息都将始终在查询字符串中。
  • 愉快地使用你的分页。
于 2013-07-23T19:52:21.747 回答
0

评论是正确的。

利用:

// Start the session
session_start();
// Save variables into session
$_SESSION['somevalue'] = $_POST['value'];

然后,当任何页面调用 session_start 时,它将有权访问 $_SESSION['somevalue']

此外,您对 SQL 注入持开放态度。清理您的值以确保没有人可以将任意 sql 代码放入字符串中。如果您使用的是 mysqli,它应该像这样简单:

// After connecting to the DB
$_POST['somevalue' = $mysqli->real_escape_string($_POST['somevalue']);

然后确保像你正在做的那样在字符串值周围硬编码引号。

如果你想更安全,你可以使用准备好的语句。

希望这可以帮助。

于 2013-07-23T19:51:02.860 回答