dimich
Новичок
Проблема с постраничным выводом
Челы, страдаю уже 3 дня над этим скриптом. При поиске разбивка по страницам работает не правильно. Должно выводить на каждой странице по 2 записи, а выводит только на первой 2(всё как надо). А на остальных страницах выводит нужные две + предыдущие записи. Объясните в чём проблема, что не так.
PHP:
function link_bar_poisk($link, $countx, $pages_countx, $show_linkx)
{
// $show_link - это количество отображаемых ссылок;
// нагляднее будет, когда это число будет парное
// Если страница всего одна, то вообще ничего не выводим
if ($pages_countx == 1) return false;
$sperator = ' '; // Разделитель ссылок; например, вставить "|" между ссылками
// Для придания ссылкам стиля
$style = 'style="color: #808000; text-decoration: none;"';
$begin = $link - intval($show_linkx / 2);
unset($show_dots); // На всякий случай :)
// Сам постраничный вывод
// Если количество отображ. ссылок больше кол. страниц
if ($pages_countx <= $show_linkx + 1) $show_dots = 'no';
// Вывод ссылки на первую страницу
if (($begin > 2) && !isset($show_dots) && ($pages_countx - $show_linkx > 2)) {
echo '<a '.$style.' href='.$_SERVER['SCRIPT_URI'].'?page=poisk&link=1> |< </a> ';
}
for ($j = 0; $j < $link; $j++) {
// Если страница рядом с концом, то выводить ссылки перед идущих для того,
// чтобы количество ссылок было постоянным
if (($begin + $show_linkx - $j > $pages_countx) && ($pages_countx-$show_linkx + $j > 0)) {
$page_link = $pages_countx - $show_linkx + $j; // Номер страницы
// Если три точки не выводились, то вывести
if (!isset($show_dots) && ($pages_countx-$show_linkx > 1)) {
echo ' <a '.$style.' href='.$_SERVER['SCRIPT_URI'].'?page=poisk&link='.($page_link - 1).'><b>...</b></a> ';
// Задаем любое значение для того, чтобы больше не выводить в начале "..." (три точки)
$show_dots = "no";
}
// Вывод ссылки
echo ' <a '.$style.' href='.$_SERVER['SCRIPT_URI'].'?page=poisk&link='.$page_link.'>'.$page_link.'</a> '.$sperator;
} else continue;
}
for ($j = 0; $j <= $show_linkx; $j++) // Основный цикл вывода ссылок
{
$i = $begin + $j; // Номер ссылки
// Если страница рядом с началом, то увеличить цикл для того,
// чтобы количество ссылок было постоянным
if ($i < 1) {
$show_linkx++;
continue;
}
// Подобное находится в верхнем цикле
if (!isset($show_dots) && $begin > 1) {
echo ' <a '.$style.' href='.$_SERVER['SCRIPT_URI'].'?page=poisk&link='.($i-1).'><b>...</b></a> ';
$show_dots = "no";
}
// Номер ссылки перевалил за возможное количество страниц
if ($i > $pages_countx) break;
if ($i == $link) {
echo ' <a '.$style.' ><b>'.$i.'</b></a> ';
} else {
echo ' <a '.$style.' href='.$_SERVER['SCRIPT_URI'].'?page=poisk&link='.$i.'>'.$i.'</a> ';
}
// Если номер ссылки не равен кол. страниц и это не последняя ссылка
if (($i != $pages_countx) && ($j != $show_linkx)) echo $sperator;
// Вывод "..." в конце
if (($j == $show_linkx) && ($i < $pages_countx)) {
echo ' <a '.$style.' href='.$_SERVER['SCRIPT_URI'].'?page=poisk&link='.($i+1).'><b>...</b></a> ';
}
}
// Вывод ссылки на последнюю страницу
if ($begin + $show_linkx + 1 < $pages_countx) {
echo ' <a '.$style.' href='.$_SERVER['SCRIPT_URI'].'?page=poisk&link='.$pages_countx.'> >| </a>';
}
return true;
} // Конец функции
// POISK
function poisk_company($n_company, $obl, $dzejnast, $keyword, $link, $countx, $pages_countx, $show_linkx) {
include("inc/connect.inc"); // Файл коннекта к базе MySQL
include("inc/connect.inc");
// Подготовка к постраничному выводу
$perpage = 2; // Количество отображаемых данных из БД
if (empty($_GET['link']) || ($_GET['link'] <= 0)) {
$link = 1;
} else {
$link = (int) $_GET['link']; // Считывание текущей страницы
}
// Общее количество информации
$sel = mysql_query("SELECT * FROM catalog WHERE lockd = '2' ");
$countx = mysql_num_rows($sel);
$pages_countx = ceil($countx / $perpage); // Количество страниц
// Если номер страницы оказался больше количества страниц
if ($link > $pages_countx) $link = $pages_countx;
$start_pos = ($link - 1) * $perpage; // Начальная позиция, для запроса к БД
$poisksql = mysql_query("SELECT * FROM catalog WHERE lockd = '2' LIMIT $start_pos,$perpage");
$maxznach1 = 0;
while ($row = mysql_fetch_array($poisksql)):
if ($maxznach1 < $row[id]):
$maxznach1 = $row[id]; // Макс. значение ID
endif;
endwhile;
$count2 = $maxznach1;
$onewas = 0;
while ($count2 >= 1):
$poisksql1 = mysql_query("SELECT * FROM catalog WHERE id = '$count2' ");
$error = mysql_error();
print "$error";
$a_row = mysql_fetch_array($poisksql1);
if((eregi($n_company, $a_row[name_company]) OR $n_company == FALSE) AND (eregi($keyword, $a_row[opisanie]) OR eregi($keyword, $a_row[adres]) OR eregi($keyword, $a_row[mail]) OR eregi($keyword, $a_row[www]) OR $keyword == FALSE) AND (eregi($a_row[region], $obl) OR $obl == FALSE) AND ($dzejnast == $a_row[deyatelnost] OR $dzejnast == FALSE) AND $a_row[lockd] <> 1 AND $a_row[name_company] == TRUE AND $a_row[region] == TRUE AND $a_row[deyatelnost] == TRUE):
if ($onewas == 0) :
print "<b><h2>Результаты поиска:</h2><table border=0 width=500>";
print "<tr bgcolor=#cccccc>
<td><b>Название компании</b></td>
</tr>";
$onewas = 123;
endif;
print "<tr>\n";
print "\t<td><a href=\"show.php?page=show&edit_ok=yes&company_id=$a_row[id]\">$a_row[name_company]</a></td>\n";
print "</tr>\n";
endif;
$count2--;
endwhile;
print "</table>\n</a>";
link_bar_poisk($link, $countx, $pages_countx, 3);
}