Запрос вот: PHP: $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 left join category on kursinfo.category=category.id where ((teachers.id=kursinfo.tid) and (rayons.id=teachers.rayon))"; Тут условия, а самое главное из за которой происходит ошибка и само условия вывода(в начале из списка выбирается район, по которому и выводятся данные. Для вывода всех районов, тоесть записей, создал Админку как отдельный район с id = 1): PHP: if ($_SESSION['rayon']!=1) { if (isset($_SESSION['rayon'])) $sql.=" and teachers.rayon=".$_SESSION['rayon']; } Далее идет заполнение данными: PHP: $result = mysqli_query($_SESSION['link'],$sql); $rows_count=mysqli_num_rows($result); $odd=""; if ($page_size<$rows_count){ $i=1; while($i<=(($_SESSION['pagenumber']-1)*$page_size)){ $teacher=mysqli_fetch_assoc($result); $i++; } } $users=1; $tid_tmp=-1; while (($users<=$page_size)&&($teacher=mysqli_fetch_assoc($result))){ if ($teacher['t_id']!=$tid_tmp){ $tid_tmp=$teacher['t_id']; $date =explode('-',$teacher['birthday']); $kursdate=explode('-',$teacher['kursplan']); echo '<tr class="'.$odd.' user_row"> echo '<td class="browse_column"> <input type="checkbox" name="selection_t[]" onclick="activateRow(this)" value="'.$teacher['t_id'].'"/> </td> . . . . .
выведи на экран весь запрос. запости тот, который без ошибок. и запость тот, который ничего не даёт. сравним. а вообще добавь ещё echo mysqli_error(); и скажи что пишет
PHP: <?php sql=""; $fields = array('Поле1', ... ,'ПолеN'); $field = isset($_GET['field']) && in_array($_REQUEST['field'], $fields) ? $_REQUEST['field'] : 'name'; $sql .= " ORDER BY ".$field." ". $sort; ?> Работает при выводе всех данных, тоесть при условии $_SESSION['rayon']=1 А вот если район выбран другой, то данные не выводятся вообще. Если убрать сортировку, хотя бы строку $sql .= " ORDER BY ".$field." ". $sort; то данные снова выводятся. Или я что то не понял? Туплю снова)))
ага после: Код (Text): $result = mysqli_query($_SESSION['link'],$sql); допиши cтрочки: Код (Text): echo "$sql<br>\n"; echo mysqli_error(); и скинь сюда что пишет при обоих результатах (с ошибкой и когда отрабатывает как надо) да, а чё у тя дескриптор соединения с базой делает в сессии? у тебя постоянное подключение к базе? :shock:
Так... вписал. Выбрал район любой. Вылезла след хрень(записи НЕ вышли): 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: /*$fields = array('famil', 'teachers.name', 'otch', 'birthday', 'subject.name', 'schools.name', 'kursinfo.kursdate', 'rayons.name'); $field = isset($_GET['field']) && in_array($_REQUEST['field'], $fields) ? $_REQUEST['field'] : 'name'; $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 Да постоянное. Пользователи добавляют в базу записи постоянно и удаленно.
строчку вот так надо: echo mysqli_error($_SESSION['link']); --------- а ваще and teachers.rayon= X нужно дописывать перед ORDER BY
Исправил строчку и результаты пред сообщения. Order by у меня уже потом идет) С запросом вроде все в порядке)
вот sql запрос: PHP: $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 left join category on kursinfo.category=category.id where ((teachers.id=kursinfo.tid) and (rayons.id=teachers.rayon))"; после выбора района он пишет его id. А сразу же после sql запроса: PHP: $fields = array('famil', 'teachers.name', 'otch', 'birthday', 'subject.name', 'schools.name', 'kursinfo.kursdate', 'rayons.name'); $field = isset($_GET['field']) && in_array($_REQUEST['field'], $fields) ? $_REQUEST['field'] : 'name'; $sql.= " ORDER BY ".$field." ". $sort;
факт остаётся фактом, дописывает он после.. запрос: Код (Text): 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 Код (Text): and teachers.rayon=4 должно быть в строчке с WHERE запость чтоль полный листинг скрипта
Тогда пропадает сортировка, у меня всегда по DESC будет сортировать или же по ASC. Как напишешь... А район он пишет вот из этого исходя: PHP: <?php $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 ".$field." ". $sort; $fields = array('famil', 'teachers.name', 'otch', 'birthday', 'subject.name', 'schools.name', 'kursinfo.kursdate', 'rayons.name'); $field = isset($_GET['field']) && in_array($_REQUEST['field'], $fields) ? $_REQUEST['field'] : 'name'; $sql.= " ORDER BY ".$field." ". $sort; if ($_SESSION['rayon']!=1) { if (isset($_SESSION['rayon'])) $sql.=" and teachers.rayon=".$_SESSION['rayon']; ?> } С 19-й по 21 строчку видишь, сдет проверка выбранного района.
блии-ин...... Код (Text): $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']; } $fields = array('famil', 'teachers.name', 'otch', 'birthday', 'subject.name', 'schools.name', 'kursinfo.kursdate', 'rayons.name'); $field = isset($_GET['field']) && in_array($_REQUEST['field'], $fields) ? $_REQUEST['field'] : 'name'; $sql.= " ORDER BY ".$field." ". $sort;
QQQ Плин, пойду повешусь... Извени, я просто реально не УВИДЕЛ этой мелочи, стыдно млин... :cry: Вот это смешно, щас со стула чуть не упал, сенкс!!! Можно тя еще помучать?))) Вопрос как то задавал в топике: Вот у меня допустим данных много, я разделил их с помощью показа на странице 10 строк. Имеются переключатели страниц, чтобы увидеть остальные данные. Как сделать так, чтобы при сортировке допустим по ASC и переключкении страницы, сортировка сохранялась ASC, а не переходила в какой то другой сорт.
просто операторы sql всегда лучше большими буквами писать либо передавать тип сортировки в линке переключателя либо писать последнюю сортировку в сессию
Передал линк переключателю: HTML: href="'.$_SERVER['PHP_SELF'].'?field='.$field.'&sort='.$sort.'" ПРи нажатии сортировка меняется все равно. Пробывал сделать функцию типа ssort(), куда вставил $sort. Поставил событие onclick="ssort()" на названия столбцов. Выдает ошибку: "Придполагается наличие объекта" В случае без онклика, происходит сортировка по ASC. Здесь вот и остановился...
что-то боюсь опять щас код требовать придётся весь ) что в $_GET['sort'] приходит смотрел? тут где-то кидали линки на принципы правильной отладки скриптов, поищи, не лишним будет ;-)
Ок... ну как я понял, при нажатии на любую кнопку, где есть место типу субмит, форма перегружается, и $sort соответсвенно меняется. Тоесть надо задать на выполнение, только в случае нажатия на заголовок. Для этого есть он клик, так? Почему то он у меня не желает проходить.
я не знаю, что ты там такого выдумать пытаешся с жабаскриптом и зачем.. не Натрадамус я во все формы добавляешь: <input type="hidden" name="sort" value="$sort"> ко всем линкам добавляешь: &sort=$sort и всё должно работать
Все сделал. Работает прекрасно на локалхосте. Загружаю на удаленный сервер. Сортировка есть, а при нажатии на переключатели страниц, переход не осущетсвляется. Например: По умолчанию страница 1. Нажимаем на 2-ю, грузится опять же 1-я. Тут в коде дело или вы чем то другом? Может линки по другому надо писать, когда на сервак гружишь удаленный? Код: HTML: href="'.$_SERVER['PHP_SELF'].'?field='.$field.'&sort='.$sort.'"
я тебе не зря предлагал найти тему со ссылками на руководство по отладке может быть всё что угодно.. для начала нужно проверить PHP_SELF на сервере существует ли и корректное ли имеет значение
может научиться отлаживать скрипты? :evil: echo $_SERVER['PHP_SELF'] например сделать? а можно и на название сменить можно ещё на ./ сменить