Проблема с постраничным выводом

dimich

Новичок
Проблема с постраничным выводом

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);
}
Челы, страдаю уже 3 дня над этим скриптом. При поиске разбивка по страницам работает не правильно. Должно выводить на каждой странице по 2 записи, а выводит только на первой 2(всё как надо). А на остальных страницах выводит нужные две + предыдущие записи. Объясните в чём проблема, что не так.
 

bgm

&nbsp;
PHP FAQ. Как разбить вывод из mysql постранично:

http://www.phpfaq.ru/paginator
 

dimich

Новичок
конкретно.. poisk_company там трабла... вроде делаю все по правильному... а оно как-то не так пахает..(
 

bgm

&nbsp;
Автор оригинала: dimich
конкретно.. poisk_company там трабла... вроде делаю все по правильному... а оно как-то не так пахает..(
Не пишите больше 10-15 строк кода. Никто не будет вникать в ваш код длиной 100 строк;

Согласись, что желающих разбираться в простыне твого кода - найти будет сложно? Тебе дали ссылку на место, где очень толково описана организация постраничного вывода. Что ещё?
 
Сверху