[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с пагинацией
dov31
Вывожу данные из CSV файла, всё работает, но т.к. данных много, нужна пагинация, помогите, пожалуйста, пересмотрел множество готовых скриптов, применить не получается sad.gif ..только начинаю изучать PHP. Заранее благодарен
<?php
$fh = fopen ( 'test.csv', 'r' );
while ( ( $info = fgetcsv ($fh, 1000, ";") ) !== false )
echo "Имя: " . $info[0] . "<br>
Должность: " . $info[3] . "<br>
Телефон: " . $info[2] . "<br>";
fclose ( $fh );
?>
jetistyum
Алгоритм такой... fgetcsv выводит при каждом запросе строку из csv таблицы, чтобы показать постранично, тебе на второй страничке надо пропустить первые N строк, и показать вторые N строк.
Миша
У вас происходит полный проход по массиву, для пагинации нужно:
 - определить количество элементов в массиве
- проверить исходя из количества элементов, нужны ли ссылки туда - сюда
- отдать контент от и до количества записей


count, for

_____________
Принимаю заказы, писать в ЛС
Undertaker
Смотри пагниация как правило всегда ориентируется на GET-переменную
Например: /index.php?page=

Для начала определяешься с количеством элементов на странице (20шт.)
Затем проверяешь не пустой ли GET
Если GET пустой то номер страницы = 1 если нет, то номер страницы = GET
Теперь нам нужен счёт первая запись и последняя запись на странице
Последняя запись = GET (например 1) *20
Первая запись = GET * 20 -20
Далее идёт цикл от нуля до первой записи
Потом цикл от первой до последней записи, где выводиться контент
Снизу выводиться строка пагинации
Подсчитываем количество строк в файле
    $file = file('test.csv');
$count_rows=count($file);

Делим это количество на 20 с округлением в большую сторону
Функция ceil

И выводим строку пагинации тем же for

for ($i=1; $i<=количество страниц пагинации; $i++)
{
echo '<a href="/index.php?page='.$i.'">'.$i.'</a>
}


Ну это в общих чертах, ещё можно повесить проверку равно ли GET переменной $i в пагинации и если равно то выводить без ссылки и другим цветом
Так же обязательно должна висеть проверка соответствия GET на нужное тебе число, GET должен быть обязательно целым числом >=1 и <=количество страниц пагинации. В противном случае пере направление либо ошибка

_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
Valick
а можно импортировать CSV в базу данных, и не создавать себе проблем

_____________
Стимулятор ~yoomoney - 41001303250491
AllesKlar
Valick Возможно, там csv на 200 метров и пагинация как раз и нужна, чтобы выбрать необходимые строки для импорта в базу. + это фича клиентская + одновременно множество клиентов. И зачем это счастье в базе?
Не всегда решение "в лоб" подходящее, тем более, не зная задачи целиком..

Оптимальный вариант указал jetistyum
Цитата (jetistyum @ 11.07.2016 - 15:57)
Алгоритм такой... fgetcsv выводит при каждом запросе строку из csv таблицы, чтобы показать постранично, тебе на второй страничке надо пропустить первые N строк, и показать вторые N строк.


_____________
[продано копирайтерам]
Гость_glock18
Цитата (AllesKlar @ 12.07.2016 - 15:46)
Valick Возможно, там csv на 200 метров и пагинация как раз и нужна, чтобы выбрать необходимые строки для импорта в базу. + это фича клиентская + одновременно множество клиентов. И зачем это счастье в базе?
Не всегда решение "в лоб" подходящее, тем более, не зная задачи целиком..

Оптимальный вариант указал jetistyum
Цитата (jetistyum @ 11.07.2016 - 15:57)
Алгоритм такой... fgetcsv выводит при каждом запросе строку из csv таблицы, чтобы показать постранично, тебе на второй страничке надо пропустить первые N строк, и показать вторые N строк.

Вот сначала читаю
Цитата
Возможно, там csv на 200 метров


И думаю, что вроде как соглашаетесь с Валиком. А потом...
Цитата

и пагинация как раз и нужна, чтобы выбрать необходимые строки для импорта в базу

Вы это себе как представляете? То есть в следующий раз, когда нужна будет другая страница, в базу нужно будет импортировать другие строки из файла? Не верится в возможность такого, если честно.

Единственное, в каком случае могу согласиться, что база неуместна, это в том, когда каждый клиент имеет свою csv, которую грузит один раз, и просматривает один раз за всю ее жизнь (по крайней мере, я так понял "фича клиентская"). Но здесь слишком все притянуто за уши получается. Для чего вообще все эти телодвижения по загрузке файла и потом просмотру его, когда пользователь мог бы просто открыть его в гуглдоке или экселе?

Множество клиентов одновременно читающих одну и ту же csv... Вас послушать, так лучше вообще базу данных на файлах делать, а то все эти субд как-то плохо с конкурентностью справляются smile.gif
AllesKlar
Цитата (Гость_glock18 @ 12.07.2016 - 14:45)
Множество клиентов одновременно читающих одну и ту же csv... Вас послушать, так лучше вообще базу данных на файлах

Меня не слушать надо, меня надо читать и не приписывать того, чего я не писал.
Где я написал, что множество клиентов читают один и тот же csv?
Каждый по своему собственному, по 200 метром весом.
Желаете все это в базе иметь?
Или дальше чем "один клиент-отдельный магазин-с отдельной базой" еще не ушли?

Что удивительного в том, что данные поступают в csv?
Элементарно, прайс поставщика клиенту. На 100500 тысяч строк.
Девочка-оператор глаза сломала уже, молоко в груди пропало, начальник грозится уволить.
Вот ТС ее пожалел и пишет ей фичу, чтобы она могла жмакнуть кнопочку у себя в панельке "Получить прайс поставщика" и спокойно его "листать" через веб-интерфейс, любовно предоставленный ТС-ом, отмечая галочками позиции, которые она хочет в базу импортировать.

Пролистала 100 страничек, залила в базу необходимые ей 500 строчек из 100500.

_____________
[продано копирайтерам]
Гость_glock18
Цитата (AllesKlar @ 12.07.2016 - 16:53)
Цитата (Гость_glock18 @ 12.07.2016 - 14:45)
Множество клиентов одновременно читающих одну и ту же csv... Вас послушать, так лучше вообще базу данных на файлах

Меня не слушать надо, меня надо читать и не приписывать того, чего я не писал.
Где я написал, что множество клиентов читают один и тот же csv?
Каждый по своему собственному, по 200 метром весом.
Желаете все это в базе иметь?

Что удивительного в том, что данные поступают в csv?
Элементарно, прайс клиента. На 100500 тысяч строк.
Девочка-оператор глаза сломала уже, молоко в груди пропало, начальник грозится уволить.
Вот ТС ее пожалел и пишет ей фичу, чтобы она могла жмакнуть кнопочку у себя в панельке "Получить прайс поставщика" и спокойно его "листать" через веб-интерфейс, любовно представленный ТС-ом, отмечая галочками позиции, которые она хочет в базу импортировать.

Пролистала 100 страничек, залила в базу необходимые ей 500 строчек из 100500.

Хмм, ну, допустим, пример и неплохой. Хотя тут вообще пхп даже задействовать незачем.

Задам встречный вопрос: а что если у ТСа проблема гораздо более прозаична, и требуется просто выводить данные из какой-то csv, которая валяется где-то на сервере?

имхо, Валик дал совет, который корректен в 95% случаев, и только в остальных есть более подходящие средства, Ваш же вариант, допустим, исключительно хорош (в чем я даже не уверен - а надо ли файл вообще на сервер грузить для этого?) в 2%, и в остальных плох.
Guest
Цитата (AllesKlar @ 12.07.2016 - 16:53)
Пролистала 100 страничек, залила в базу необходимые ей 500 строчек из 100500.


Вы заметьте, что ближе к концу с таким вот "оптимальным" подходом у Вас будет при каждом запросе файл почти целиком читаться (200 метров чтения из файла при запросе - сомнительный результат оптимизации). Если добавить еще кого-то, занимающегося тем же, то сервер надолго может уйти в себя.
AllesKlar
Цитата (Guest @ 12.07.2016 - 15:08)
файл почти целиком читаться

Вот такая хрень - этот php.
Учите яву и пишите человеческие api biggrin.gif

_____________
[продано копирайтерам]
Гость_glock18
Цитата (AllesKlar @ 12.07.2016 - 17:25)
Цитата (Guest @ 12.07.2016 - 15:08)
файл почти целиком читаться

Вот такая хрень - этот php.
Учите яву и пишите человеческие api biggrin.gif

пых хрень вовсе не по этой причине, поскольку и на яве, и на пыхе, решение такой задачи привело бы либо, к чтению всего файла до нужной строки, либо построению индекса (или запоминанию позиции последнего прочитанного символа при загрузке каждой следующей страницы), на уровне работы с файловой системой везде это будет выглядеть одинаково.
dov31
Всем спасибо, разобрался rolleyes.gif , Что касается БД, то лично для меня было бы проще, но в этом случае не вариант dry.gif
Valick
Цитата (dov31 @ 16.07.2016 - 05:54)
Всем спасибо, разобрался. Что касается БД, то лично для меня было бы проще, но в этом случае не вариант

покажите результат того в чём вы разобрались

_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.