Прежде всего - 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 результатов поддержки, но ничего не возвращает.
Любой вклад будет принята с благодарностью.Большое спасибо.