Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Заковырка с постраничной навигацией на файлах
 
 автор: TetRiska   (13.12.2009 в 21:46)   письмо автору
 
 

Всем привет. Не пойму в чем дело когда перехожу на следующую страничку. На первой выводит 2 записи, как я поставил в ограничении $num, когда перехожу на вторую страничку, там пусто :( Привожу начало кода...Прошу помощи.
В файле 3 записи!
<?php $arr file("ver.txt");
    
    
$num 2;
    if(isset(
$_GET['page'])) $page $_GET['page'];
    else 
$page 1;
    
$posts count($arr);
    
$total = (($posts 1) / $num) + 1;
    
$total =  intval($total);
    
$page intval($page);
    if(empty(
$page) or $page 0$page 1;
      if(
$page $total$page $total;
    
$start $page $num $num;
    
    for(
$i=$start;$i<$num;$i++)
    {
        list(
$name,$ver,$path,$text) = explode(";",$arr[$i]);
        
        
$for .= '<form action="" method="post">
        <tr>
            <td align="center" width="50" style="border-right:solid 1px blue">'
.($i+1).'</td>
            <td align="center" width="150" style="border-right:solid 1px blue"><input name="id" type="hidden" value='
.($i+1).' /><input id="name_'.($i+1).'" size="20" name="name" type="text" value='.$name.' /></td>
            <td align="center" width="50" style="border-right:solid 1px blue"><input size="4" name="ver" type="text" value='
.$ver.' /></td>
            <td align="center" width="300" style="border-right:solid 1px blue"><input size="45" name="path" type="text" value='
.$path.' /></td>
            <td align="center" style="border-right:solid 1px blue"><textarea name="text" cols="42" rows="1">'
.$text.'</textarea></td>
            <td align="center"  width="30"><input src="images/ok.png" name="ok" type="image" onclick="submit()" title="Редактировать '
.($i+1).'-ю запись" /></td>
          </tr></form>'
;
    } 
?>

Ув. Модераторы, поправте тему, я допустил ошибку :)

  Ответить  
 
 автор: Trianon   (13.12.2009 в 21:54)   письмо автору
 
   для: TetRiska   (13.12.2009 в 21:46)
 

for($i=2;$i<2;$i++)

  Ответить  
 
 автор: TetRiska   (13.12.2009 в 22:05)   письмо автору
 
   для: Trianon   (13.12.2009 в 21:54)
 

не совсем понял...попробовал, везде пусто и на первой и на второй.

  Ответить  
 
 автор: Trianon   (13.12.2009 в 22:06)   письмо автору
 
   для: TetRiska   (13.12.2009 в 22:05)
 

Что Вы попробовали?
Прочтите и поймите, что я написал.

  Ответить  
 
 автор: TetRiska   (13.12.2009 в 22:11)   письмо автору
 
   для: Trianon   (13.12.2009 в 22:06)
 

это
for($i=$start;$i<$num;$i++)

заменил на
for($i=2;$i<2;$i++)

в итоге пусто

чтение файла идет с нуля, если поставить 0 - выведутся 2 записи, если 1 - одна...вот почему неверно подсчет ведет? :(
предполагаю дело в этом подсчете
$start = $page * $num - $num;

если страница = 1, а $num=2, то при первом круге будет 0,
а если страница = 2, при все том же $num=2, то будет 2....тобишь пусто выведет
Помогите запутался в край :(

  Ответить  
 
 автор: Trianon   (13.12.2009 в 22:27)   письмо автору
 
   для: TetRiska   (13.12.2009 в 22:11)
 

>это for($i=$start;$i<$num;$i++)
>заменил на for($i=2;$i<2;$i++)
>в итоге пусто
Зачем заменили?
Я подставил $start и $num - показал, как Вас работает цикл при обращении ко второй странице.

Вы полагаете, что for($i=2;$i<2;$i++) должен хоть раз выполниться?

  Ответить  
 
 автор: TetRiska   (13.12.2009 в 22:39)   письмо автору
 
   для: Trianon   (13.12.2009 в 22:27)
 

>Вы полагаете, что for ($i=2;$i<2;$i++) должен хоть раз выполниться?
нет, не полагаю.
($i=0;$i<2;$i++)

выводит 2 записи
($i=1;$i<2;$i++)

выводит одну запись
($i=2;$i<2;$i++)

ничего не должно выводить

вопрос собственно таков - где ошибка в расчете, что так некорректно подставляет...не могу никак найти

  Ответить  
 
 автор: Trianon   (13.12.2009 в 22:49)   письмо автору
 
   для: TetRiska   (13.12.2009 в 22:39)
 

Ошибка в расчете в операторе for($i=$start;$i<$num;$i++)
Более точно в условии повтора этого оператора.

Откуда Вы взяли подстановку с единицей ($i=1;$i<2;$i++) я не понял вообще.

Оператор for()

  Ответить  
 
 автор: TetRiska   (13.12.2009 в 23:19)   письмо автору
 
   для: Trianon   (13.12.2009 в 22:49)
 

$end = $page * $num;

    for($i=$start;$i<$end;$i++)
    {

почти верно, но в цикле создает лишнее поле, т.е.
на первой странице 2 записи
на второй тоже 2 записи: 1-я заполненная, 2-я пустая
хотя всего 3 записи в файле

  Ответить  
 
 автор: Trianon   (13.12.2009 в 23:21)   письмо автору
 
   для: TetRiska   (13.12.2009 в 23:19)
 

Выходит $end посчитано неверно?

  Ответить  
 
 автор: TetRiska   (13.12.2009 в 23:27)   письмо автору
 
   для: Trianon   (13.12.2009 в 23:21)
 

скорее, что да...
если извратиться
if($page == 1)
$end = $page * $num;
else
$end = $page * $num - 1;

то при 3-х записях нормально отработает, а далее фигня :(

  Ответить  
 
 автор: neadekvat   (13.12.2009 в 23:34)   письмо автору
 
   для: TetRiska   (13.12.2009 в 23:27)
 

<?php
$sum 
2;

$page = (int) $_POST['page'];

if (empty (
$page) || $page <= 0$page 1;

$start = ($page 1) * $sum;

  Ответить  
 
 автор: TetRiska   (13.12.2009 в 23:52)   письмо автору
 
   для: neadekvat   (13.12.2009 в 23:34)
 

хмм..у меня вроде бы так и написано

  Ответить  
 
 автор: Trianon   (13.12.2009 в 23:55)   письмо автору
 
   для: TetRiska   (13.12.2009 в 23:52)
 

Вы не отвлекайтесь, думайте.
В частности думайте над тем, почему у Вас не показывается вторая строка на второй странице.

  Ответить  
 
 автор: TetRiska   (14.12.2009 в 00:56)   письмо автору
 
   для: Trianon   (13.12.2009 в 23:55)
 

$start = $page * $num - $num;
    $end = $page * $num;

    for($i=$start;$i<$end;$i++)
    {

при таком раскладе на первой 2 записи - все ок
на второй тоже 2 записи - но одна (первая) - правильно, а вторая лишняя (пустая)

когда в файле 4 записи - все ок, когда 5, то
первая страница - 2
вторая страница - 2
третья тоже 2, но вторая пустая и ее не должно быть

  Ответить  
 
 автор: Trianon   (14.12.2009 в 01:01)   письмо автору
 
   для: TetRiska   (14.12.2009 в 00:56)
 

>когда 5, то первая страница - 2 вторая страница - 2
>третья тоже 2, но вторая пустая и ее не должно быть

>если извратиться if($page == 1)

так значит не первая страница отличается от остальных, а третья?

  Ответить  
 
 автор: TetRiska   (14.12.2009 в 01:09)   письмо автору
 
   для: Trianon   (14.12.2009 в 01:01)
 

когда в файле 4 записи - все ок, когда 5, то
первая страница - 2 записи
вторая страница - 2 записи
третья страница 2, но вторая запись пустая и ее не должно быть...должна быть лишь 1 запись
>так значит не первая страница отличается от остальных, а третья?
либо я Вас ввожу в заблуждения, либо хотите помучать...но ни черта не могу сообразить.

  Ответить  
 
 автор: neadekvat   (14.12.2009 в 01:17)   письмо автору
 
   для: TetRiska   (14.12.2009 в 01:09)
 

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

  Ответить  
 
 автор: Trianon   (14.12.2009 в 01:19)   письмо автору
 
   для: TetRiska   (14.12.2009 в 01:09)
 

Почему на третьей странице долж>когда в файле 4 записи - все ок, когда 5, то
>первая страница - 2 записи
>вторая страница - 2 записи
>третья страница 2, но вторая запись пустая и ее не должно быть...должна быть лишь 1 запись
>>так значит не первая страница отличается от остальных, а третья?
>либо я Вас ввожу в заблуждения,
да нет... все описываемое покамест достаточно правдиво.

>либо хотите помучать...

отнюдь, скорее Вы меня хотите помучить :)

>но ни черта не могу сообразить.
Что здесь соображать?
Я простейший вопрос задал. Какая страница отличается от остальных и почему?

  Ответить  
 
 автор: TetRiska   (14.12.2009 в 01:52)   письмо автору
 
   для: Trianon   (14.12.2009 в 01:19)
 

вроде бы решил :) сейчас протестирую основательно!
if($page == 1)
    $end = $page*$num;
    else
    $end = $start + (count($arr) - $start);


П.СЫ. Блин.....сейчас в файле 25 записей...вывожу по 10...
первая 10 - с 0-10
вторая 15 - с 11-25
третья 5 - с 21-25

ппц..........

ну его в баню...вроде бы все!!! нука посмотрите..
$end = $page * $num;
    
    if($page == $total)
        $end = count($arr);

вроде бы работает при любом кол. записей в файле и при любом значении $num

  Ответить  
 
 автор: neadekvat   (14.12.2009 в 00:01)   письмо автору
 
   для: TetRiska   (13.12.2009 в 23:52)
 

> так и написано
В каком месте?
$start = $page * $num - $num; (1)
$start = ($page - 1) * $num; (2)

Пусть $page = 3, а $num = 2.

$start = 3 * 2 - 2 = 4; (1)
$start = (3 - 2) * 2 = 2; (2)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования