Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Помогите с пагинацией, Постраничный вывод CSV файла
dov31  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 2
Пользователь №: 43158
На форуме: 4 месяца, 24 дня
Карма:




Вывожу данные из 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 );
?>
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
jetistyum  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 2605
Пользователь №: 5568
На форуме: 8 лет, 4 месяца, 26 дней
Карма: 30




Алгоритм такой... fgetcsv выводит при каждом запросе строку из csv таблицы, чтобы показать постранично, тебе на второй страничке надо пропустить первые N строк, и показать вторые N строк.
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Медведь  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 2482
Пользователь №: 37963
На форуме: 3 года, 3 месяца, 24 дня
Карма: 27




У вас происходит полный проход по массиву, для пагинации нужно:
 - определить количество элементов в массиве
- проверить исходя из количества элементов, нужны ли ссылки туда - сюда
- отдать контент от и до количества записей


count, for


--------------------

Заходил 29.09.2016
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Undertaker  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 312
Пользователь №: 31230
На форуме: 4 года, 10 месяцев, 11 дней
Карма:




Смотри пагниация как правило всегда ориентируется на 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
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5493
Пользователь №: 35718
На форуме: 4 года, 15 дней
Карма: 167




а можно импортировать CSV в базу данных, и не создавать себе проблем


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3375
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 8 дней
Карма: 170




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

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


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Гость_glock18  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Цитата (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
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3375
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 8 дней
Карма: 170




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

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

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

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


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Гость_glock18  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









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

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

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

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

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

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

имхо, Валик дал совет, который корректен в 95% случаев, и только в остальных есть более подходящие средства, Ваш же вариант, допустим, исключительно хорош (в чем я даже не уверен - а надо ли файл вообще на сервер грузить для этого?) в 2%, и в остальных плох.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Цитата (AllesKlar @ 12.07.2016 - 16:53)
Пролистала 100 страничек, залила в базу необходимые ей 500 строчек из 100500.


Вы заметьте, что ближе к концу с таким вот "оптимальным" подходом у Вас будет при каждом запросе файл почти целиком читаться (200 метров чтения из файла при запросе - сомнительный результат оптимизации). Если добавить еще кого-то, занимающегося тем же, то сервер надолго может уйти в себя.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3375
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 8 дней
Карма: 170




Цитата (Guest @ 12.07.2016 - 15:08)
файл почти целиком читаться

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


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Гость_glock18  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Цитата (AllesKlar @ 12.07.2016 - 17:25)
Цитата (Guest @ 12.07.2016 - 15:08)
файл почти целиком читаться

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

пых хрень вовсе не по этой причине, поскольку и на яве, и на пыхе, решение такой задачи привело бы либо, к чтению всего файла до нужной строки, либо построению индекса (или запоминанию позиции последнего прочитанного символа при загрузке каждой следующей страницы), на уровне работы с файловой системой везде это будет выглядеть одинаково.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
dov31  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 2
Пользователь №: 43158
На форуме: 4 месяца, 24 дня
Карма:




Всем спасибо, разобрался rolleyes.gif , Что касается БД, то лично для меня было бы проще, но в этом случае не вариант dry.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5493
Пользователь №: 35718
На форуме: 4 года, 15 дней
Карма: 167




Цитата (dov31 @ 16.07.2016 - 05:54)
Всем спасибо, разобрался. Что касается БД, то лично для меня было бы проще, но в этом случае не вариант

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


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса