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

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

  • relictx

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

    Spritz 11 ноября 2008 г. 3:52, спустя 1 час 5 минут 11 секунд

    Я на самом деле другим способом пользывался, работало на локалхосте, а когда залил на удаленный сервер и запустил, то страницы не переключались.
    Сейчас сделал, как вы сказали, результат к сожалению такой же((
    Что делать не знаю(((
  • AlexB

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

    Spritz 11 ноября 2008 г. 4:01, спустя 9 минут 32 секунды


    Что делать не знаю(((
    Блин, сказал же SQL запрос распечатай для начала.

    ЗЫ. Кто уже догадался про всем известную проблему, просьба молчать!
  • relictx

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

    Spritz 11 ноября 2008 г. 4:05, спустя 3 минуты 35 секунд



    Блин, сказал же SQL запрос распечатай для начала.

    Извеняюсь, но я не знаю как его распечатать… До этого я только проверял на ошибки с помощью команд:
    echo "$sql<br>\n";
    echo mysqli_error($_SESSION['link']);



    ЗЫ. Кто уже догадался про всем известную проблему, просьба молчать!


    Про register_globals знаю, если вы про это. Загонял данные и через сессию и через GET
  • sap

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

    Spritz 11 ноября 2008 г. 4:30, спустя 25 минут 26 секунд

    Извеняюсь, но я не знаю как его распечатать…

    Заменить mysql_query($sql) на die($sql);
    И посмотреть, тот ли это запрос, который должен быть.
  • relictx

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

    Spritz 11 ноября 2008 г. 4:36, спустя 5 минут 56 секунд


    Извеняюсь, но я не знаю как его распечатать…

    Заменить mysql_query($sql) на die($sql);
    И посмотреть, тот ли это запрос, который должен быть.


    Спасибо, заменил, получилось, то что должно быть:

    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 famil ASC LIMIT 10000

    Даннах я так понимаю тут быть не должно, раз die)))
  • AlexB

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

    Spritz 11 ноября 2008 г. 4:39, спустя 3 минуты

    Ну и почему у тебя:
    LIMIT 10000
    когда должно быть что-то типа:
    LIMIT 2,10
  • relictx

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

    Spritz 11 ноября 2008 г. 4:42, спустя 2 минуты 54 секунды


    Ну и почему у тебя:
    LIMIT 10000
    когда должно быть что-то типа:
    LIMIT 2,10


    Так и есть: 20,10. Просто потом я поменял на 10000 вместо переменных эксперимента ради.
    Получается в конце вместо 10000 выводит 20
  • Trej Gun

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

    Spritz 11 ноября 2008 г. 4:43, спустя 17 секунд

    sap, мега способ дебага
  • AlexB

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

    Spritz 11 ноября 2008 г. 4:45, спустя 2 минуты 31 секунду


    Так и есть: 20,10. Просто потом я поменял на 10000 вместо переменных эксперимента ради.
    Получается в конце вместо 10000 выводит 20
    Ты сказал, что после того как добавил LIMIT появились ошибки. Дык дай тот запрос, КОТОРЫЙ ВЫЗЫВАЕТ ОШИБКИ, не МЕНЯЯ В НЕМ НИЧЕГО. Блин, неужели я так сложно изъясняюсь.
  • relictx

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

    Spritz 11 ноября 2008 г. 4:52, спустя 6 минут 48 секунд



    Так и есть: 20,10. Просто потом я поменял на 10000 вместо переменных эксперимента ради.
    Получается в конце вместо 10000 выводит 20
    Ты сказал, что после того как добавил LIMIT появились ошибки. Дык дай тот запрос, КОТОРЫЙ ВЫЗЫВАЕТ ОШИБКИ, не МЕНЯЯ В НЕМ НИЧЕГО. Блин, неужели я так сложно изъясняюсь.


    Ошибка была всего лишь из за того, что ORDER BY сливался с LIMIT. Тоесть ORDER BYLIMIT
    Только и всего. Поставил пробел, все работает. Только вот страницы на локалхосте перекключаются как надо и сортировка сохранется. А на сайте 1-я страница только появляется, при нажатии на любую ссылку, будь то <2 _ 3_ 4_ 5 >
  • AlexB

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

    Spritz 11 ноября 2008 г. 4:57, спустя 5 минут 35 секунд

    Я еще раз дублирую свой пост:
    Как это, интересно? SQL запрос выдает данные для 2-ой страницы, а скрипт все-равно рисует первую?
    КАК ТАКОЕ МОЖЕТ БЫТЬ?

    Я последний раз прошу напечатать SQL запрос для второй страницы и результат его выполнения.
  • relictx

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

    Spritz 11 ноября 2008 г. 5:00, спустя 2 минуты 11 секунд


    Я еще раз дублирую свой пост:
    Как это, интересно? SQL запрос выдает данные для 2-ой страницы, а скрипт все-равно рисует первую?
    КАК ТАКОЕ МОЖЕТ БЫТЬ?

    Я последний раз прошу напечатать SQL запрос для второй страницы и результат его выполнения.




    Сейчас более подробно изложу свой код и принцип, мне кажется дело в неправильном расположении или написании.
  • AlexB

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

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

    МЛЯ, мне не надо пока код. Это потом. Мне надо запрос. Ты русский язык понимаешь?
  • sap

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

    Spritz 11 ноября 2008 г. 5:02, спустя 45 секунд

    relictx, покажи запрос, который выполняется, когда ты нажимаешь страницу 2 или 3 или 10.
  • relictx

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

    Spritz 11 ноября 2008 г. 5:09, спустя 6 минут 47 секунд

    Грузится первый php файл, в котором пользователь выбирает свой РАЙОН. Выбранный район заносится в сессию $_SESSION['rayon'].

    Грузится второй php файл, главный, на который выводится база.
    Итак принцип по порядку:

    1) Подключение к базе
    2) Заголовки к столбцам

    <td valign="top" width="100%">
    <div id="content" >
    <form  action="2.php"  method="post">
      <table cellspacing="0">
           <thead>
               <tr>
                                     <th>
                   <input type="checkbox" title="toggle all" onclick="toggleSelectFor(this, 'selection')" /></th>

                                     <th>
                   <?php

                   $page = (int) $_GET['i'];
                   if ($i==0)
                   {
                   $i=1;
                   }
                   $sort = isset($_GET['sort']) && $_REQUEST['sort'] == 'DESC' ? 'ASC' : 'DESC';
                   echo '<a href="browse.php?field=famil&sort='.$sort.'">Фамилия</a>';



                   ?>

                   </th>
    .
    .
    .

                   <?php

                   $sort = isset($_GET['sort']) && $_REQUEST['sort'] == 'DESC' ? 'ASC' : 'DESC';
                   echo '<a href="browse.php?field=kursinfo.kursplan&sort='.$sort.'">Планируемый год</a>';

                   ?>
                  </th>



    3) sql запрос и дополнения к нему, а также сортировка:

        <?php
                   $page = (int) $_GET['i'];
                   $sql="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))";



           if ($_SESSION['rayon']!=1) {

           if (isset($_SESSION['rayon'])) $sql.=" and teachers.rayon=".$_SESSION['rayon'];

           }



    if ($_POST['famil']!=""){
    $sql.= " and (famil like '".$_POST['famil']."%')";
    //echo $sql;
    }
    .
    .
    .
    // ЭТО СОРТИРОВКА
                   $fields = array('famil', 'teachers.name', 'otch', 'birthday', 'subject.name', 'schools.name', 'kursinfo.kursplan', 'rayons.name');
                   $field = isset($_GET['field']) && in_array($_REQUEST['field'], $fields) ? $_REQUEST['field'] : 'name';
                   $sql.= " ORDER BY ".$field." ". $sort;
                   $sql.= " LIMIT " .$page*$perpage." " .$perpage;


    4) Заносим в массив

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


    5) Вывод по страницам

                    <?php
                   echo '<input name="page_i" id="page_i" type="hidden" value="'.$_SESSION['page_i'].'">';
                   echo '<input name="pagenumber" id="pagenumber" type="hidden" value="'.$_SESSION['pagenumber'].'">';
                   if ($_SESSION['page_i']-$count_on_page<1){
                    echo '·<span>«</span>';
                   }else{
                  echo '·<a href="#" onclick="nextPageList(\''.($_SESSION['page_i']-$count_on_page).'\');">«</a>';
                   }

                   for ($i=$_SESSION['page_i'];(($i*$page_size)<=$rows_count)&&
                    ($i<($_SESSION['page_i']+$count_on_page));$i++)
                   {
                    echo '·';
                    if ($i!=$_SESSION['pagenumber']){
                    echo '<a  href="?field='.$_REQUEST['field'].'&sort='.$_REQUEST['sort'].'" onclick="gotoPage('.$i.');">'.$i.'</a>';
                   }
                else{
                   echo '<span class="batchCurrent">'.$i.'</span>';
                   }
           }

              if (($rows_count>($i-1)*$page_size)&&($i<($_SESSION['page_i']+$count_on_page)))
              {
               echo '·';
              if ($i!=$_SESSION['pagenumber']){
                    echo '<a href="#" onclick="gotoPage('.$i.');">'.$i.'</a>';
                   }
                else{
                   echo '<span class="batchCurrent">'.$i.'</span>';
                   }
           }
           if (($_SESSION['page_i']+$count_on_page-1)*$page_size>$rows_count){
                    echo '·<span>»</span>';
                   }else{
                  echo '·<a href="#" onclick="nextPageList(\''.($_SESSION['page_i']+$count_on_page).'\');">»</a>';
                   }
    ?>
                   </span>
                   </td>
                   <td>
                       <select name="perpage" onchange="document_collection_setbatching();">
                       <?php
                       for ($i=1;$i<4;$i++){
                        if ($i*10==$page_size){
                        echo "<option value=\"".($i*10)."\" selected=\"true\">".($i*10)."</option>";
                        }
                        else {echo "<option value=\"".($i*10)."\">".($i*10)."</option>";}
                      }
                       ?>

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