【问题标题】:Php search and pagination not workingPHP搜索和分页不起作用
【发布时间】:2018-04-16 21:54:25
【问题描述】:

我有一个搜索 mysql 数据库并返回结果的搜索表单。我还有一个 searchmodel.php 文件,它应该对结果进行分页。但是,分页不会返回第 2 页和其他页面的结果。搜索表单如下所示:

<?php

?>
<html>
<form action = "searchmodel.php" method = "GET">
            <select name = "choice">
                <!--<option value = "<?php echo $_GET['title']; ?>" name = "title">title</option>-->
                <option value = "title" name = "title">title</option>
                <option value = "author" name = "author"> author</option>
                <option value = "scc" name = "scc"> SCC_NO</option>
            </select>
                <input name= "term" type ="text" size="65" maxlength = "88" style = "display:inline">
                <input name = "mysearch" type="submit"  style = "display:inline">

        </form>

</html>

searchmodel.php 文件如下所示:

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
error_reporting(E_ERROR | E_PARSE);
include "data.php";
$con = dbConnect();
$perpage = 20;
echo ($pagenumber = isset($_GET['page']) ? $_GET['page'] : 1) . '<br />';

$offset = ($pagenumber-1) * $perpage;
$term = isset($_GET['term']) ? $_GET['term'] : null;
$choice = isset($_GET['choice']) ? $_GET['choice'] : '';
            if(empty($term) && ($choice == 'title' || $choice == 'author')){
                header ('Location: ' . 'search.php');   
                }

                if($choice == 'title') {
            $sth = $con->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM manuscript WHERE title 
            LIKE '%$term%' LIMIT {$offset},{$perpage}");
            $sth->execute();
            //$results = $sth->rowCount();
            //echo '<b>' . $results . '</b>'. '<br />';
            $results = $sth->fetchAll();
            $x=1;


            foreach($results as $key => $value){
                echo $x++ . ':' .$value['title'] . '<br />';


            }   
        }

            $total = $con->query("SELECT FOUND_ROWS() as total")->fetch()['total'];
            var_dump($total);
            $pages = ceil($total/$perpage);
            echo $pages . '<br />';



        for ($x=1; $x<=$pages; $x++){
        //echo $x;

        echo " <a href='{$_SERVER['PHP_SELF']}?page=$x'>$x</a> ";
    //echo "<a href='?pagenumber=$x'>$x</a>";

    }

我在这个网站(stackoverflow)上搜索了一个与我类似的问题,并找到了这两个。 This onethis one。但是,提供的答案似乎不适用于我的情况。我的问题是,我可能做错了什么?是 $_GET['choice'] 变量导致问题吗?提前谢谢你

【问题讨论】:

  • 您正在滥用准备好的语句并且对 SQL 注入持开放态度。在第 2 页等上,SQL 的输出是什么?
  • 谢谢@chris85。注射目前不是主要的担忧。相反,主要担心的是如何进行分页工作
  • 这可能会导致您的查询出现问题;这可能是您当前的问题。请解决我评论的第二部分On page 2 etc. what does the SQL come out as?
  • page 2 etc 我得到一个空白页。实际上,如果我点击任何分页链接,包括page 1 我得到一个空白页
  • 有错吗?例如你得到一个 500 状态码?

标签: php pagination


【解决方案1】:

改变这一行

echo " <a href='{$_SERVER['PHP_SELF']}?page=$x'>$x</a> ";

<a href = "?choice=<?php echo $_GET['choice'].'&term='.$_GET['term'].'&mysearch=Submit+Query&page=' . $x; ?>"><?php echo $x;?></a>

问题出在查询链接上。

【讨论】:

  • 像魅力一样工作。谢谢@tom sawyer
猜你喜欢
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
  • 2021-08-09
相关资源
最近更新 更多