Использование selectbox для фильтрации результатов, а затем разбивки на страницы (проблема) - PullRequest
0 голосов
/ 16 июня 2011

Прежде всего - PHP noob, поэтому, пожалуйста, не кладите слишком много в мой код.Я скорее редактор, чем полностью занятый на dev ...

У меня есть проблема с разбивкой на страницы результатов, которые я фильтрую, используя selectbox.Клиент хочет иметь возможность выбрать должность, чтобы отображаемые вакансии относились к выбору.У меня это настроено по умолчанию, чтобы показать все задания в БД.Затем, когда пользователь выбирает параметр, содержимое на странице должно измениться.На странице должно быть не более 5 заданий на страницу.

У меня эта часть работает.Когда пользователь выбирает опцию, я включаю соответствующий код для этой работы, который выбирает работы из базы данных на основе выбора.

Это в vancancies.php

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<select name="jobtype" onchange="if(this.options.selectedIndex>0) window.location.href = 'vacancies.php?option='+this.options [this.options.selectedIndex].value"> 
  <option value="">Select a Job Title</option> 
  <option value="support">Support Workers</option> 
  <option value="care">Carers</option> 
  <option value="nurse">Nurses</option> 
  <option value="all">All</option> 

</select> 
</form> 
<?php 
$_GET['option'];
$jobtype = $_GET['option'];
    if ($jobtype == "")
     include("alljobs.php");
     elseif ($jobtype == "support")
     include("supportjobs.php");
     elseif ($jobtype == "care")
     include("carerjobs.php");
     elseif ($jobtype == "nurse")
     include("nursejobs.php");
?>

В зависимостина том, что выбрано, я решил включить файл, который будет получать соответствующие данные из БД.Может быть, не идеал, но это работает.

Проблема, с которой я столкнулся, заключается в том, что при выборе 'Support Workers' получается 15 результатов.Первые 5 показаны на первой странице, но переходя на стр. 2, он переходит ко второй странице результатов ALL.

Это мой код для supportjobs.php, который я включаю, когда выбрана поддержка.

<?PHP

include('xxxx.php'); 

    $tableName="jobs";
    $targetpage = "vacancies.php?option=support";
    $limit = 5; 

    $query = "SELECT COUNT(*) as num FROM jobs WHERE title LIKE '%" . $jobtype . "%'";
    $total_pages = mysql_fetch_array(mysql_query($query));
    $total_pages = $total_pages[num];

    $stages = 3;
    $page = mysql_escape_string($_GET['page']);
    if($page){
        $start = ($page - 1) * $limit;
    }else{
        $start = 0;
        }   

//-query the database table
//$sql="SELECT * FROM jobs WHERE title LIKE '%" . $search . "%'";

    // Get page data
    $query1 = "SELECT * FROM jobs WHERE title LIKE '%" . $jobtype . "%' ORDER BY id DESC LIMIT $start, $limit";
    $result = mysql_query($query1);

    // Initial page num setup
    if ($page == 0){$page = 1;}
    $prev = $page - 1;
    $next = $page + 1;
    $lastpage = ceil($total_pages/$limit);
    $LastPagem1 = $lastpage - 1;                    

    $paginate = '';
    if($lastpage > 1)
    {   

        $paginate .= "<div class='paginate'>";
        // Previous
        if ($page > 1){
            $paginate.= "<a href='$targetpage?page=$prev'>previous</a>";
        }else{
            $paginate.= "<span class='disabled'>previous</span>";   }

        // Pages
        if ($lastpage < 7 + ($stages * 2))  // Not enough pages to breaking it up
        {
            for ($counter = 1; $counter <= $lastpage; $counter++)
            {
                if ($counter == $page){
                    $paginate.= "<span class='current'>$counter</span>";
                }else{
                    $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}
            }
        }
        elseif($lastpage > 5 + ($stages * 2))   // Enough pages to hide a few?
        {

// Beginning only hide later pages
            if($page < 1 + ($stages * 2))
            {
                for ($counter = 1; $counter < 4 + ($stages * 2); $counter++)
                {
                    if ($counter == $page){
                        $paginate.= "<span class='current'>$counter</span>";
                    }else{
                        $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}
                }
                $paginate.= "...";
                $paginate.= "<a href='$targetpage?page=$LastPagem1'>$LastPagem1</a>";
                $paginate.= "<a href='$targetpage?page=$lastpage'>$lastpage</a>";
            }

// Middle hide some front and some back
            elseif($lastpage - ($stages * 2) > $page && $page > ($stages * 2))
            {
                $paginate.= "<a href='$targetpage?page=1'>1</a>";
                $paginate.= "<a href='$targetpage?page=2'>2</a>";
                $paginate.= "...";
                for ($counter = $page - $stages; $counter <= $page + $stages; $counter++)
                {
                    if ($counter == $page){
                        $paginate.= "<span class='current'>$counter</span>";
                    }else{
                        $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}
                }
                $paginate.= "...";
                $paginate.= "<a href='$targetpage?page=$LastPagem1'>$LastPagem1</a>";
                $paginate.= "<a href='$targetpage?page=$lastpage'>$lastpage</a>";
            }

            // End only hide early pages
            else
            {
                $paginate.= "<a href='$targetpage?page=1'>1</a>";
                $paginate.= "<a href='$targetpage?page=2'>2</a>";
                $paginate.= "...";
                for ($counter = $lastpage - (2 + ($stages * 2)); $counter <= $lastpage; $counter++)
                {
                    if ($counter == $page){
                        $paginate.= "<span class='current'>$counter</span>";
                    }else{
                        $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}
                }
            }           

        }

                // Next
        if ($page < $counter - 1){
            $paginate.= "<a href='$targetpage?page=$next'>next</a>";
        }else{
            $paginate.= "<span class='disabled'>next</span>";
            }

        $paginate.= "</div>";       

}
 echo "<p>We have <span class='highlight'>$total_pages</span> vacancies currently available.<p>";
 // pagination
 echo $paginate;

?>

<?php 

       function makeClickableLinks($makeemail) { 
       $makeemail = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})', 
           '<a href="mailto:\\1">\\1</a>', $makeemail); 
       return $makeemail; 
       } 


        while($row = mysql_fetch_array($result))
        {

?>
    <a name="<?PHP echo '' . $row["ID"] . '';?>"></a>
    <h4><?PHP echo '' . $row["title"] . '';?></h4>
    <?PHP $makeemail = nl2br($row["description"]); ?>
    <p><?PHP echo makeClickableLinks($makeemail);?></p>
    <p><span class="highlight">Location:</span> <?PHP echo '' . $row["location"] . '';?>
    <br>
    <!--<p><?PHP echo '' . $row["duration"] . '';?></p>-->
    <span class="highlight">Salary:</span> <?PHP echo '' . $row["salary"] . '';?></p>
    <hr/>
<?PHP
}
 echo $paginate;
 mysql_close($DB);

?>

Я немного не уверен, как заставить это работать.Я пробовал жестко запрограммировать «vacancies.php? Option = support» в целевой URL-адрес, чтобы посмотреть, перейдет ли это на страницу 2 результатов поддержки, но ничего не возвращает.

Любой вклад будет принята с благодарностью.Большое спасибо.

1 Ответ

0 голосов
/ 16 июня 2011

Попробуйте изменить эти переменные:

   $start = (($page - 1) * $limit) + 1; // 1, 6, 11..

   $lastpage = $page * $limit;  // 5, 10, 15..
...