繁体   English   中英

我如何获得分页在这里工作?

[英]How can I get the pagination to work here?

我对编码还很陌生,因此我既乐意批评也乐于帮助。 我正在尝试将分页应用于搜索结果。 我已经返回了所需的结果,应用了限制并设法使分页控件正确显示。 但是,当我选择“下一个”或“上一个”时,这些页面都没有结果。 我敢肯定有些根本上是错误的,但是我无法发现它。

?php
include_once("db_connex.php");
if (isset ($_POST ['search']))  {
    $searchq = $_POST ['search'];
    $count_query = mysql_query("SELECT * FROM activejobs WHERE jobtitle LIKE '%$searchq%' OR region LIKE '%$searchq%' AND status= '1'");
    $count = mysql_num_rows($count_query);
    // pagination starts here
    if (isset($_GET['page'])) {
      $page = pre_replace("#[^0-9]#","",$_GET['page']);
    }
    else {
       $page = 1;
    }

    $perPage = 3;
    $lastPage = ceil($count / $perPage);

    if ($page < 1) {
       $page = 1;
    } 
    else if ($page > $lastPage) {
       $page = $lastPage;
    }

    $limit = "LIMIT " . ($page - 1) * $perPage. ", $perPage";
    $query = mysql_query("SELECT * FROM activejobs WHERE jobtitle LIKE '%$searchq%' OR region LIKE '%$searchq%' AND status= '1' ORDER BY jobid DESC $limit");
 }
 if ($lastPage != 1) {
    if ($page != $lastPage) {
       $next = $page + 1;
       $pagination .= '<a href="jobsearch.php?page='.$next.'">Next</a>';
    }

    if ($page != 1) {
       $prev = $page - 1;
       $pagination .= '<a href="jobsearch.php?page='.$prev.'">Previous</a>';
    }
 }

 while ($row = mysql_fetch_array($query)) {
        $jobtitle = $row['jobtitle'];
        $region = $row['region'];
        $salary = $row['salary'];
        $jobdescription = $row ['jobdescription'];
        $joburl = $row ['joburl'];

        $output .= '<div id= "searchresults"><a href = "http://www.nursestation.co.uk/jobdetails.php?id=' . $jobid . '"><div id= "applybutton">Details</div></a><font id= "resultstitle">'.$jobtitle.'&nbsp-&nbsp'.$region.'&nbsp-&nbsp'.$salary.'</font><br>'.$jobdescription.'</div>';
 }

?>

这种if-else地狱:

// pagination starts here
if (isset($_GET['page'])) {
  $page = pre_replace("#[^0-9]#","",$_GET['page']);
}
else {
   $page = 1;
}

可以这样解决(默认情况是在开始时):

// pagination starts here
$page = 1;
if (isset($_GET['page'])) {
  $page = pre_replace("#[^0-9]#","",$_GET['page']);
}

甚至(如果您喜欢冒险):

$page = (isset($_GET['page']) ? pre_replace("#[^0-9]#","",$_GET['page']) : 1);

进行大量If-else的创建很容易,一开始就很困难,因此,通过减少无所事事的时间来简化操作。 使您的代码更小, 更接近任何解决方案。

这也是常见的:

...
while ($row = mysql_fetch_array($query)) {
   $jobtitle = $row['jobtitle'];
   $region = $row['region'];
...

为什么将$jobtitle分配给$row['jobtitle']; 它不会使您的代码更容易,它只会添加更多的代码并使您阅读起来更困难。 直接给$row['X']

另外,正如@ojovirtual所说,您每次都需要传递“ $ search”参数,否则整个代码块将被忽略(未设置“ $ search”

最后,在使用MySQL时,您需要检查输入查询的值,在本例中为$searchq 恶意编码人员可能使$searchq看起来像查询的一部分。 有一个简单的解决方法:

而不是简单的:

$count_query = mysql_query("SELECT * FROM activejobs WHERE jobtitle LIKE '%$searchq%' OR region LIKE '%$searchq%' AND status= '1'");

养成这样做的习惯:

$searchq = mysql_real_escape_string($searchq);
$count_query = mysql_query("SELECT * FROM activejobs WHERE jobtitle LIKE '%$searchq%' OR region LIKE '%$searchq%' AND status= '1'");

不是通用解决方案,而是在作为入门者进入新技术之前的入门者。 这是用户名,密码等字段的必填项。

最后,从:

if (isset ($_POST ['search']))  {
    $searchq = $_POST ['search'];

至:

if (isset ($_GET['search']))  {
    $searchq = $_GET['search'];

您需要通过search你再nextpreviuos按钮。 一个快速的解决方法是:

$_POST更改$_POST $_REQUEST

if (isset ($_REQUEST ['search']))  ...

将搜索添加到您的nextprevious按钮:

$pagination.= '<a href="jobsearch.php?search='.urlencode($_REQUEST["search"]).'&page='.$next.'">Next</a>';

与上previous按钮相同。

就像有人说的那样,您应该在进行任何数据库查询之前进行一些输入清理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM