2009-02-05 2 views
0

У меня есть следующий код, который является основой для разбивки на страницы в более крупном приложении. Однако это не работает, поскольку, хотя я должен получать значение pg из url, pg никогда не выходит выше 2. По какой-то причине next = pg + 1; кажется, всегда видит pg как 1, независимо от того, что передается по URL-адресу. Это аналогичная проблема с последним. Я полагаю, что я переоцениваю значение, полученное от GET, но я не уверен, где.проблема с возрастанием pagination

Проблема заключается в том, как я разрабатываю $ max и предел, а вместо 0, 10, -10, 10 передается. Также ifcode, прежде чем $ макс, похоже, не удалось остановить пг от того, 0.

<?php 
if (isset($_GET["pg"])) { 
    $pg = $_GET["pg"]; 
} else $pg = 1; 
$con = mysql_connect("localhost","",""); 
if(!$con) { 
    die('Connection failed because of' .mysql_error()); 
} 
mysql_select_db("ebay",$con); 

if ($pg < 1) { 
    $pg = 1; 
} elseif ($pg > $last) { 
    $pg = $last; 
} 
$table = 'AUCTIONS'; 
$page_rows = 10; 
$max = ' limit ' .($pg - 1) * $page_rows .', ' .$page_rows; 
$rows = getRowsByArticleSearch($query, $table, $max); 
$rowcount = count($rows); 
echo $rowcount; 
$last = ceil($rowcount/$page_rows); 
$page_rows = 10; 
$rowcount = 2; 
// Would normally obtain the number of rows returned, but database stuff is snipped for brevity 
$last = ceil($rowcount/$page_rows); 
if ($pg < 1) { 
    $pg = 1; 
} elseif ($pg > $last) { 
    $pg = $last; 
} 
$self = htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES,'utf-8'); 
echo " <a href='$self?pg=1'> <<-First</a> "; 
$previous = $pg-1; 
echo " <a href='$self?pg=$previous'> <-Previous</a> "; 
echo "---------------------------"; 
$next = $pg+1; 
echo " <a href='$self?pg=$next'>Next -></a> "; 
echo " <a href='$self?pg=$last'>Last ->></a> "; 

ответ

0

на основе теперь пересмотренном вопрос:

$rowcount = count($rows); 

естественно всегда возвращать 10, так как вы ограничиваете результат

... LIMIT 10; 

Но это может помочь:

SQL CALC FOUND ROWS Пример :

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name 
    -> WHERE id > 100 LIMIT 10; 
mysql> SELECT FOUND_ROWS(); 

Первый запрос по-прежнему будет возвращать ваши статьи, в то время как второй будет возвращать количество строк предыдущего выбора, если бы не использовалось предложение LIMIT.

Надеюсь, что это поможет.

+0

Спасибо за ваш ответ, я посмотрю. Я основывал свой код на учебнике здесь, у вас есть идея, почему theres работает, а мой не будет? http://php.about.com/od/phpwithmysql/ss/php_pagination_3.htm – 2009-02-05 10:37:31

+0

Да. // Здесь мы подсчитываем количество результатов $ data = mysql_query ("SELECT * FROM topsites"); $ rows = mysql_num_rows ($ data); см. Http://php.about.com/od/phpwithmysql/ss/php_pagination.htm Они делают то, что я предложил: подсчитывая количество полных строк перед вычислением количества страниц. –

+0

ОК, я пробовал, что, ничто не потушится. Интересно, можете ли вы проверить весь мой код (все еще короткий), поскольку теперь ничего не выводится, и я не хочу задавать новый вопрос только для этого. http://pastebin.com/d65cc6b30 – 2009-02-05 11:17:19

1

Вот ваша проблема:

$last = ceil($rowcount/$page_rows); 

Это восседает $ в прошлом, чтобы быть 1, а затем у вас есть:

if ($pg > $last) { 
    $pg = $last; 
} 

Edit: Интересно, если вы имели в виду это, вместо того, чтобы:

$last = ceil($page_rows/$rowcount); 

Edit еще раз: согласно ответу Касси, вы, вероятно, на самом деле просто нужно установить правильные значения для этих переменных:

$page_rows = 10; 
$rowcount = 2; 
+0

Привет, Бен, Спасибо за ваш ответ. Проблема заключается в том, что я получаю ряд строк, но поскольку я ограничиваю результаты, это всегда 10. – 2009-02-05 10:07:33

1

код является правильным, однако, данные неправильно.

Если у вас есть

$page_rows = 10; 
$rowcount = 2; 

это фактически означает, что у вас есть 2 строки, отображаемые на страницах, которые будут отображаться 10 строк каждая. Это составляет 1 страницу.

Изменить его

$page_rows = 10; 
$rowcount = 200; 

и вуаля, вы получите пагинацию.

Смежные вопросы