我怎样才能让这个分页在这里工作?

时间:2014-02-19 11:56:48

标签: php

我对编码很新,所以我很乐意接受批评和帮助。我正在尝试将分页应用于我的搜索结果。我已经返回了我需要的结果,应用了限制并设法让分页控件正确显示。但是,当我选择“下一个”或“上一个”时,页面没有结果。我确信有一些根本性的错误,但我无法发现它。

?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>';
 }

?>

2 个答案:

答案 0 :(得分:1)

这种 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'];

答案 1 :(得分:0)

您需要在searchnext按钮中再次传递previuos。快速解决方法是:

$_POST更改为$_REQUEST

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

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

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

previous按钮相同。

正如有人所说,你应该在任何数据库查询之前做一些输入卫生。