За последние 24 часа нас посетили 19694 программиста и 1439 роботов. Сейчас ищут 982 программиста ...

Сортировка таблицы.

Тема в разделе "PHP для новичков", создана пользователем RelictX, 17 окт 2008.

  1. RelictX

    RelictX Активный пользователь

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Запрос вот:

    PHP:
    1. $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
    2.          FROM
    3.          rayons,
    4.          teachers left join schools on teachers.school=schools.id,
    5.          (kursinfo left join subject on kursinfo.subject=subject
    6.          left join category on kursinfo.category=category.id
    7.          where ((teachers.id=kursinfo.tid) and (rayons.id=teachers.rayon))";
    Тут условия, а самое главное из за которой происходит ошибка и само условия вывода(в начале из списка выбирается район, по которому и выводятся данные. Для вывода всех районов, тоесть записей, создал Админку как отдельный район с id = 1):


    PHP:
    1.         if ($_SESSION['rayon']!=1) {
    2.  
    3.         if (isset($_SESSION['rayon'])) $sql.=" and teachers.rayon=".$_SESSION['rayon'];
    4.  
    5.         }
    Далее идет заполнение данными:

    PHP:
    1. $result = mysqli_query($_SESSION['link'],$sql);
    2. $rows_count=mysqli_num_rows($result);
    3. $odd="";
    4. if ($page_size<$rows_count){
    5. $i=1;
    6. while($i<=(($_SESSION['pagenumber']-1)*$page_size)){
    7.  
    8. $teacher=mysqli_fetch_assoc($result);
    9. $i++;
    10.                 }
    11.         }
    12. $users=1;
    13. $tid_tmp=-1;
    14. while (($users<=$page_size)&&($teacher=mysqli_fetch_assoc($result))){
    15. if ($teacher['t_id']!=$tid_tmp){
    16. $tid_tmp=$teacher['t_id'];
    17. $date =explode('-',$teacher['birthday']);
    18. $kursdate=explode('-',$teacher['kursplan']);
    19. echo '<tr class="'.$odd.' user_row">
    20. echo '<td class="browse_column">
    21. <input type="checkbox" name="selection_t[]" onclick="activateRow(this)" value="'.$teacher['t_id'].'"/>
    22.                 </td>
    .
    .
    .
    .
    .
     
  2. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    выведи на экран весь запрос.
    запости тот, который без ошибок.
    и запость тот, который ничего не даёт. сравним.
    а вообще добавь ещё echo mysqli_error(); и скажи что пишет
     
  3. RelictX

    RelictX Активный пользователь

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    PHP:
    1.  <?php
    2.  
    3.  sql="";
    4.  
    5.  $fields = array('Поле1', ... ,'ПолеN');
    6.  $field = isset($_GET['field']) && in_array($_REQUEST['field'], $fields) ? $_REQUEST['field'] : 'name';
    7.  $sql .= " ORDER BY ".$field." ". $sort;
    8.  
    9.  ?>
    Работает при выводе всех данных, тоесть при условии $_SESSION['rayon']=1

    А вот если район выбран другой, то данные не выводятся вообще. Если убрать сортировку, хотя бы строку
    $sql .= " ORDER BY ".$field." ". $sort;
    то данные снова выводятся.

    Или я что то не понял? Туплю снова)))
     
  4. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    ага:)

    после:
    Код (Text):
    1.  
    2. $result = mysqli_query($_SESSION['link'],$sql);
    допиши cтрочки:
    Код (Text):
    1.  
    2. echo "$sql<br>\n";
    3. echo mysqli_error();
    и скинь сюда что пишет при обоих результатах (с ошибкой и когда отрабатывает как надо)

    да, а чё у тя дескриптор соединения с базой делает в сессии? у тебя постоянное подключение к базе? :shock:
     
  5. RelictX

    RelictX Активный пользователь

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Так... вписал. Выбрал район любой. Вылезла след хрень(записи НЕ вышли):

    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 and teachers.rayon=4

    Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in D:\XAMPP\xampp\htdocs\person\browse.php on line 463

    Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in D:\XAMPP\xampp\htdocs\person\browse.php on line 476




    Теперь убираю строчки сортировки

    PHP:
    1.           /*$fields = array('famil', 'teachers.name', 'otch', 'birthday', 'subject.name', 'schools.name', 'kursinfo.kursdate', 'rayons.name');
    2.           $field = isset($_GET['field']) && in_array($_REQUEST['field'], $fields) ? $_REQUEST['field'] : 'name';
    3.  
    4.  
    5.           $sql.= " ORDER BY ".$field." ". $sort; */
    и снова выбираем район(записи вышли):

    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)) and teachers.rayon=4

    Да постоянное. Пользователи добавляют в базу записи постоянно и удаленно.
     
  6. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    строчку вот так надо: echo mysqli_error($_SESSION['link']);

    ---------

    а ваще

    and teachers.rayon= X

    нужно дописывать перед ORDER BY :)
     
  7. RelictX

    RelictX Активный пользователь

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Исправил строчку и результаты пред сообщения.
    Order by у меня уже потом идет) С запросом вроде все в порядке)
     
  8. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    ORDER BY name DESC где добавляешь?
    вот and teachers.rayon= X нужно дописывать в $sql перед ним
     
  9. RelictX

    RelictX Активный пользователь

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    вот sql запрос:

    PHP:
    1.  $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
    2.           FROM
    3.           rayons,
    4.           teachers left join schools on teachers.school=schools.id,
    5.           (kursinfo left join subject on kursinfo.subject=subject
    6.           left join category on kursinfo.category=category.id
    7.           where ((teachers.id=kursinfo.tid) and (rayons.id=teachers.rayon))";
    после выбора района он пишет его id.

    А сразу же после sql запроса:

    PHP:
    1.           $fields = array('famil', 'teachers.name', 'otch', 'birthday', 'subject.name', 'schools.name', 'kursinfo.kursdate', 'rayons.name');
    2.           $field = isset($_GET['field']) && in_array($_REQUEST['field'], $fields) ? $_REQUEST['field'] : 'name';
    3.  
    4.  
    5.           $sql.= " ORDER BY ".$field." ". $sort;
     
  10. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    факт остаётся фактом, дописывает он после.. запрос:

    Код (Text):
    1.  
    2. 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
    3. FROM rayons, teachers left join schools on teachers.school=schools.id, (kursinfo left join subject on kursinfo.subject=subject.id)
    4. LEFT JOIN category on kursinfo.category=category.id
    5. WHERE ((teachers.id=kursinfo.tid) and (rayons.id=teachers.rayon))
    6. ORDER BY name DESC
    7. and teachers.rayon=4
    Код (Text):
    1.  
    2. and teachers.rayon=4
    должно быть в строчке с WHERE

    запость чтоль полный листинг скрипта
     
  11. RelictX

    RelictX Активный пользователь

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Тогда пропадает сортировка, у меня всегда по DESC будет сортировать или же по ASC. Как напишешь... А район он пишет вот из этого исходя:

    PHP:
    1.  
    2. <?php
    3. $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
    4.                 FROM
    5.                     rayons,
    6.                     teachers left join schools on teachers.school=schools.id,
    7.                     (kursinfo left join subject on kursinfo.subject=subject.id)
    8.             left join category on kursinfo.category=category.id
    9.         WHERE ((teachers.id=kursinfo.tid) and (rayons.id=teachers.rayon))
    10.             order by ".$field." ". $sort;
    11.  
    12. $fields = array('famil', 'teachers.name', 'otch', 'birthday', 'subject.name', 'schools.name', 'kursinfo.kursdate', 'rayons.name');
    13. $field = isset($_GET['field']) && in_array($_REQUEST['field'], $fields) ? $_REQUEST['field'] : 'name';
    14.  
    15. $sql.= " ORDER BY ".$field." ". $sort;
    16.  
    17.  
    18.  
    19. if ($_SESSION['rayon']!=1) {
    20. if (isset($_SESSION['rayon'])) $sql.=" and teachers.rayon=".$_SESSION['rayon'];
    21.  
    22.  
    23. ?>
    24.         }
    С 19-й по 21 строчку видишь, сдет проверка выбранного района.
     
  12. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    блии-ин......

    Код (Text):
    1.  
    2. $sql="SELECT teachers.id as t_id,famil,teachers.name as tname,otch, birthday,schools.name as schl,
    3.     category.name as cname, subject.name as sname,kursinfo.kursplan,kursinfo.kursdate,kursinfo.skill, rayons.name
    4.     FROM rayons, teachers left join schools on teachers.school=schools.id, (kursinfo left join subject on kursinfo.subject=subject.id)
    5.                       left join category on kursinfo.category=category.id
    6.     WHERE ((teachers.id=kursinfo.tid) and (rayons.id=teachers.rayon))";
    7.  
    8. if ($_SESSION['rayon']!=1) {
    9.     if (isset($_SESSION['rayon'])) $sql.=" and teachers.rayon=".$_SESSION['rayon'];
    10. }
    11.  
    12.  
    13. $fields = array('famil', 'teachers.name', 'otch', 'birthday', 'subject.name', 'schools.name', 'kursinfo.kursdate', 'rayons.name');
    14. $field = isset($_GET['field']) && in_array($_REQUEST['field'], $fields) ? $_REQUEST['field'] : 'name';
    15. $sql.= " ORDER BY ".$field." ". $sort;
     
  13. RelictX

    RelictX Активный пользователь

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    QQQ

    Плин, пойду повешусь...
    Извени, я просто реально не УВИДЕЛ этой мелочи, стыдно млин... :cry: Вот это смешно, щас со стула чуть не упал, сенкс!!!

    Можно тя еще помучать?)))

    Вопрос как то задавал в топике:
    Вот у меня допустим данных много, я разделил их с помощью показа на странице 10 строк. Имеются переключатели страниц, чтобы увидеть остальные данные. Как сделать так, чтобы при сортировке допустим по ASC и переключкении страницы, сортировка сохранялась ASC, а не переходила в какой то другой сорт.
     
  14. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    просто операторы sql всегда лучше большими буквами писать :)

    либо передавать тип сортировки в линке переключателя
    либо писать последнюю сортировку в сессию
     
  15. RelictX

    RelictX Активный пользователь

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Понял, буду мучать код, спасибо!)
     
  16. RelictX

    RelictX Активный пользователь

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Передал линк переключателю:
    HTML:
    1.  
    2. href="'.$_SERVER['PHP_SELF'].'?field='.$field.'&amp;sort='.$sort.'"
    3.  
    ПРи нажатии сортировка меняется все равно.
    Пробывал сделать функцию типа ssort(), куда вставил $sort. Поставил событие onclick="ssort()" на названия столбцов. Выдает ошибку: "Придполагается наличие объекта"
    В случае без онклика, происходит сортировка по ASC.

    Здесь вот и остановился...
     
  17. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    что-то боюсь опять щас код требовать придётся весь )

    что в $_GET['sort'] приходит смотрел?

    тут где-то кидали линки на принципы правильной отладки скриптов, поищи, не лишним будет ;-)
     
  18. RelictX

    RelictX Активный пользователь

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Ок... ну как я понял, при нажатии на любую кнопку, где есть место типу субмит, форма перегружается, и $sort соответсвенно меняется. Тоесть надо задать на выполнение, только в случае нажатия на заголовок. Для этого есть он клик, так? Почему то он у меня не желает проходить.
     
  19. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    я не знаю, что ты там такого выдумать пытаешся с жабаскриптом и зачем.. не Натрадамус я :)

    во все формы добавляешь: <input type="hidden" name="sort" value="$sort">
    ко всем линкам добавляешь: &sort=$sort

    и всё должно работать
     
  20. RelictX

    RelictX Активный пользователь

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Нее, от явы я отказался, реализована пхп сортировка))
     
  21. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    тогда:

     
  22. RelictX

    RelictX Активный пользователь

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Все сделал. Работает прекрасно на локалхосте.

    Загружаю на удаленный сервер. Сортировка есть, а при нажатии на переключатели страниц, переход не осущетсвляется.
    Например: По умолчанию страница 1. Нажимаем на 2-ю, грузится опять же 1-я. Тут в коде дело или вы чем то другом?

    Может линки по другому надо писать, когда на сервак гружишь удаленный? Код:
    HTML:
    1. href="'.$_SERVER['PHP_SELF'].'?field='.$field.'&amp;sort='.$sort.'"
     
  23. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    я тебе не зря предлагал найти тему со ссылками на руководство по отладке :)
    может быть всё что угодно..

    для начала нужно проверить PHP_SELF на сервере существует ли и корректное ли имеет значение
     
  24. RelictX

    RelictX Активный пользователь

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Ок... может попробывать сменить на название файла?
     
  25. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    может научиться отлаживать скрипты? :evil:
    echo $_SERVER['PHP_SELF']
    например сделать?

    а можно и на название сменить
    можно ещё на ./ сменить