ФорумПрограммированиеPHP для идиотов → Постраничный вывод+сортировка

Постраничный вывод+сортировка

  • relictx

    Сообщения: 307 Репутация: N Группа: Адекваты

    Spritz 12 ноября 2008 г. 12:40, спустя 2 минуты 33 секунды


    $_REQUEST['field']

    Используй $_GET и $_POST.

    Так я не понял, проблема решена или нет?


    Спасибо) ПРоблема решена, но дело в том, что код, который рисует и назначает ссылки цифрам был написан коряво. Я написал код заново. Но мне интересно, почему тот себя так вел))) Может быть потому что я использывал там сессии…
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 12 ноября 2008 г. 12:41, спустя 1 минуту 32 секунды

    Прежде всего научись внятно описывать свои проблемы. От фразы: "код который рисует цифирки не реагирует на ссылки" у меня башню сносит. Ваще невозможно поянять, что ты имеешь под этим в виду.
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 12 ноября 2008 г. 12:43, спустя 1 минуту 34 секунды

    И кстати дайка код, который рисует цифирки. Прежде всего меня интересует, как ты вычисляешь сколько всего должно быть страниц.
  • relictx

    Сообщения: 307 Репутация: N Группа: Адекваты

    Spritz 12 ноября 2008 г. 12:44, спустя 1 минуту 40 секунд


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


    Код постраничного вывода данных из базы был написан не совсем умно.
    Исправляюсь)


    И кстати дайка код, который рисует цифирки. Прежде всего меня интересует, как ты вычисляешь сколько всего должно быть страниц.

    Код не работающий, или новый?
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 12 ноября 2008 г. 12:50, спустя 5 минут 15 секунд


    Код постраничного вывода данных из базы был написан не совсем умно.
    Исправляюсь)
    Не исправился. Это такое же невнятное описание. Практической пользы от таких фраз ноль.


    Код не работающий, или новый?
    Новый давай. И сопроводи его ответом на вопрос, который я задал выше.
  • relictx

    Сообщения: 307 Репутация: N Группа: Адекваты

    Spritz 12 ноября 2008 г. 12:53, спустя 3 минуты 15 секунд

    <?php
    function yandex_link_bar($page, $rows_count, $pages_count, $show_link)
    {
    // $show_link - это количество отображаемых ссылок;
    // нагляднее будет, когда это число будет парное
    // Если страница всего одна, то вообще ничего не выводим
    if ($pages_count == 1) return false;
    $sperator = ' '; // Разделитель ссылок; например, вставить "|" между ссылками
    // Для придания ссылкам стиля
    $style = 'style="color: #808000; text-decoration: none;"';
    $begin = $page - intval($show_link / 2);
    unset($show_dots); // На всякий случай :)
    // Сам постраничный вывод
    // Если количество отображ. ссылок больше кол. страниц
    if ($pages_count <= $show_link + 1) $show_dots = 'no';
    // Вывод ссылки на первую страницу
    if (($begin > 2) && ($pages_count - $show_link > 2)) {
    echo '<a '.$style.' href='.$_SERVER['PHP_SELF'].'?field='.$_REQUEST['field'].'&sort='.$_REQUEST['sort'].'&page=1> |< </a> ';
    }
    for ($j = 0; $j <= $show_link; $j++) // Основный цикл вывода ссылок
    {
    $i = $begin + $j; // Номер ссылки
    // Если страница рядом с началом, то увеличить цикл для того,
    // чтобы количество ссылок было постоянным
    if ($i < 1) continue;
    // Подобное находится в верхнем цикле
    if (!isset($show_dots) && $begin > 1) {
    echo ' <a '.$style.' href='.$_SERVER['PHP_SELF'].'?field='.$_REQUEST['field'].'&sort='.$_REQUEST['sort'].'&page='.($i-1).'><b>…</b></a> ';
    $show_dots = "no";
    }
    // Номер ссылки перевалил за возможное количество страниц
    if ($i > $pages_count) break;
    if ($i == $page) {
    echo ' <a '.$style.' ><b>'.$i.'</b></a> ';
    } else {
    echo ' <a '.$style.' href='.$_SERVER['PHP_SELF'].'?field='.$_REQUEST['field'].'&sort='.$_REQUEST['sort'].'&page='.$i.'>'.$i.'</a> ';
    }
    // Если номер ссылки не равен кол. страниц и это не последняя ссылка
    if (($i != $pages_count) && ($j != $show_link)) echo $sperator;
    // Вывод "…" в конце
    if (($j == $show_link) && ($i < $pages_count)) {
    echo ' <a '.$style.' href='.$_SERVER['PHP_SELF'].'?field='.$_REQUEST['field'].'&sort='.$_REQUEST['sort'].'&page='.($i+1).'><b>…</b></a> ';
    }
    }
    // Вывод ссылки на последнюю страницу
    if ($begin + $show_link + 1 < $pages_count) {
    echo ' <a '.$style.' href='.$_SERVER['PHP_SELF'].'?field='.$_REQUEST['field'].'&sort='.$_REQUEST['sort'].'&page='.$pages_count.'> >| </a>';
    }
    return true;
    } // Конец функции


    // Подготовка к постраничному выводу
    $perpage = 10; // Количество отображаемых данных из БД
    if (empty($_GET['page']) || ($_GET['page'] <= 0)) {
    $page = 1;
    } else {
    $page = (int) $_GET['page']; // Считывание текущей страницы
    }
    // Общее количество информации
    $rows_count=mysqli_num_rows($result);
    $pages_count = ceil($rows_count / $perpage); // Количество страниц
    // Если номер страницы оказался больше количества страниц
    if ($page > $pages_count) $page = $pages_count;
    $start_pos = ($page - 1) * $perpage; // Начальная позиция, для запроса к БД
    // Вызов функции, для вывода ссылок на экран

    $_GET['page']=$page;
    $_GET['pages_count']=$pages_count;
    $_GET['users']=$users;

    yandex_link_bar($page, $rows_count, $pages_count, 10);

    echo '<input type=button value='.$_GET['users'].'>';
                       ?>


    Вот, код не мой, взял с инета и переделал под свои нужды. Но мне интересно разобратсья со старым. Все таки родной)) Ответ на вопрос про формирование количества ссылок и комментах кода.
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 12 ноября 2008 г. 12:53, спустя 10 секунд

    Исправляюсь)

    Надеемся, а то читаю и плачу, но мы всем сообществом в тебя верим ;)
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 12 ноября 2008 г. 12:56, спустя 2 минуты 30 секунд

    relictx, ты не ответил на вопрос.
    вот твое вычисление
    $rows_count=mysqli_num_rows($result);
    но откуда берется $result непонятно. что за запрос?

  • relictx

    Сообщения: 307 Репутация: N Группа: Адекваты

    Spritz 12 ноября 2008 г. 12:56, спустя 38 секунд


    Исправляюсь)

    Надеемся, а то читаю и плачу, но мы всем сообществом в тебя верим ;)


    Ну ругайте, если что не так) Стремление огромное, но пока признаюсь нуб, стараюсь вырасти из него и поскорей)
  • relictx

    Сообщения: 307 Репутация: N Группа: Адекваты

    Spritz 12 ноября 2008 г. 13:00, спустя 3 минуты 41 секунду


    relictx, ты не ответил на вопрос.


    Сколько данных?

    $result = mysqli_query($_SESSION['link'],$sql);
    $rows_count=mysqli_num_rows($result); // Количество данных


    Ставим лимит. Делим количество данных на количество показываемых на странице:

    $sql.= " LIMIT " .(($_GET['page']*$count_on_page)-$count_on_page). " , ".$rows_count;
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 12 ноября 2008 г. 13:02, спустя 2 минуты 9 секунд

    $result = mysqli_query($_SESSION['link'],$sql);

    Покажи $sql
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 12 ноября 2008 г. 13:02, спустя 16 секунд

    Ну МЛЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ ….
    ну что мне даст строка
    $result = mysqli_query($_SESSION['link'],$sql);
    если я не знаю, что внутри $sql? Ведь это самое главное, как вызывать функцию mysqli_query я и без тебя знаю. )))))
    Ну сколько я тебя буду учить при отладке запросов их печатать. Ну проходи ли же уже вроде …
  • relictx

    Сообщения: 307 Репутация: N Группа: Адекваты

    Spritz 12 ноября 2008 г. 13:05, спустя 2 минуты 41 секунду

    SELECT teachers.id as t_id,famil,teachers.name as tname,otch, birthday,schools.name as schl, category.name as cname, subject.name as sname,kursinfo.kursplan,kursinfo.kursdate,kursinfo.skill, rayons.name FROM rayons, teachers left join schools on teachers.school=schools.id, (kursinfo left join subject on kursinfo.subject=subject.id) left join category on kursinfo.category=category.id where ((teachers.id=kursinfo.tid) and (rayons.id=teachers.rayon)) ORDER BY name DESC LIMIT 0 , 8111
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 12 ноября 2008 г. 13:06, спустя 1 минуту 17 секунд

    Ну, ты опять пытаешься извлечь слишком много записей.
    Вроде уже проходили, что этого делать не надо, а надо извлекать ровно столько, колько собрался выводить.
    Нуу ….. теперь задай правильный вопрос!
  • relictx

    Сообщения: 307 Репутация: N Группа: Адекваты

    Spritz 12 ноября 2008 г. 13:08, спустя 1 минуту 28 секунд


    Ну, ты опять пытаешься извлечь слишком много записей.
    Вроде уже проходили, что этого делать не надо.


    С новым кодом все работает. А мне необходимо извлекать все данные из базы, которая все время пополняется, каждый день. К тому же, со старым кодом и при небольших объемах данных, переход страниц не осуществляется.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!