Код работает на выборку и разделение на положенное количество результатов на страницу, но генерирует "пустые ссылки" в пагинаторе, которые никуда не ведут. Открывается, к примеру, /customsearch.php&page=2, но там пусто, выборка по откорректированным LIMIT не происходит, видимо. Подскажите, пожалуйста, в чем косяк. Код полный, вместе с формой и выводом. Код (Text): <div class="hotelsearchform"> <form name="form" id="form" method="post" action=""> <div class="search4hoteltype"> <input type="checkbox" name="type[]" value="25"> Отель<br> <input type="checkbox" name="type[]" value="26"> Мини-гостиница<br> <input type="checkbox" name="type[]" value="28"> Санаторий<br> <input type="checkbox" name="type[]" value="27"> Пансионат<br> </div> <div class="search4hotelrating"> <input type="checkbox" name="rating[]" value="15,17"> 2*<br> <input type="checkbox" name="rating[]" value="19"> 3*<br> <input type="checkbox" name="rating[]" value="21"> 4*<br> <input type="checkbox" name="rating[]" value="23"> 5*<br> </div> <div class="search4hotelplace"> <input type="checkbox" name="place[]" value="5"> Центр<br> <input type="checkbox" name="place[]" value="6"> Хоста<br> <input type="checkbox" name="place[]" value="7"> Адлер<br> <input type="checkbox" name="place[]" value="42"> Имеретинка<br> <input type="checkbox" name="place[]" value="8"> Красная Поляна<br> <input type="checkbox" name="place[]" value="10"> Дагомыс<br> <input type="checkbox" name="place[]" value="9"> Лазаревское<br> </div> <div class="search4hotelbuttons"> <input name="submit" value="ПОКАЗАТЬ ВЫБРАННОЕ" type="submit"> </div> </form> </div><!-- hotelsearchform --> <? function connectDB (){ define('DB_HOST', '---'); define('DB_USER', '---'); define('DB_PASS', '---'); define('DB_NAME', '---'); $dbconn = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Ошибка соединения с базой данных! " . mysql_error()); mysql_select_db(DB_NAME); mysql_query('SET NAMES utf8'); return $dbconn; } function closeDB($dbconn){ mysql_close($dbconn); } if(isset($_REQUEST['submit'])) { $connect = connectDB(); if( count($_POST['type']) > 0 ) { $type = implode(',',$_POST['type']); $str.= ' AND type IN('.$type.')'; } if( count($_POST['place']) > 0 ) { $place = implode(',',$_POST['place']); $str.= ' AND place IN('.$place.')'; } if( count($_POST['rating']) > 0 ) { $rating = implode(',',$_POST['rating']); $str.= ' AND rating IN('.$rating.')'; } $rat[15] = '<img src="/templates/img/s1.png" border="0">'; $rat[17] = '<img src="/templates/img/s2.png" border="0">'; $rat[19] = '<img src="/templates/img/s3.png" border="0">'; $rat[21] = '<img src="/templates/img/s4.png" border="0">'; $rat[23] = '<img src="/templates/img/s5.png" border="0">'; function resSQL($s){ $r=mysql_query($s); if ($row=mysql_fetch_row($r)) return $row[0]; else return false; } $mpp=5; if (isset($_GET['page'])) { $page=intval($_GET['page']); if ($page<=0) return; }else $page=1; $q=mysql_query('select SQL_CALC_FOUND_ROWS `name`, `rating`, `key`, `address`, `desc` FROM `sled_hotels` WHERE town=4 '.$str.' limit '.(($page-1)*$mpp).','.$mpp); $fr=resSQL('SELECT FOUND_ROWS()'); echo '<div class="allresult">'; while($r=mysql_fetch_assoc($q)) { echo '<div class="eachresult"> <div class="hotelnamewhiteline"> <div class="hotelrating">'.$rat[$r['rating']].'</div> <div class="hotelname"><a href="/'.$r['key'].'.html" target="_parent"> "'.$r['name'].'" </a></div> </div> <div class="hoteladdress">'.$r['address'].'</div> <div class="hoteldescription"><a href="/'.$r['key'].'.html" target="_parent">'.$r['desc'].'</a></div> </div>'; } echo '</div>'; $pc=ceil($fr/$mpp); if ($pc>1) { $raz=''; for($n=1;$n<=$pc;$n++) { echo $raz; if ($page==$n) echo $n; else { echo '<A HREF="'.$S_SERVER['PHP_SELF'].''; if ($n>1) echo '?page=',$n; echo '">',$n,'</A>'; } $raz=' | '; } } } closeDB ($connect); ?>
третий день 'смотрю запрос', дружище :-( это четвертый форум, где прошу совета... уже яйки в мошонку опускаются...
вообще логично предположить, что виноват запрос, который не срабатывает на отдельно взятых страницах, так как на следующих страницах выводится только форма, остальное и не думает срабатывать, притом, что ГЕТ передается... но не могу понять где косяк. синтаксис погонял и так и сяк... Код (Text): $q=mysql_query('select SQL_CALC_FOUND_ROWS `name`, `rating`, `key`, `address`, `desc` FROM `sled_hotels` WHERE town=4 '.$str.' limit '.(($page-1)*$mpp).','.$mpp); $fr=resSQL('SELECT FOUND_ROWS()'); где str - данные из формы, остальное старт и общее количество Добавлено спустя 58 секунд: зря вписался в "единозапросие", надо было двумя делать (
Лучший в мире запрос - пожалуйста А если серьезно - то я туплю что вы имеете в виду. Я привык к "запрос в базу".
запрос это то что получается, когда выполнится тот код, который ты привёл. Какой запрос получается при запросе второй страницы когда она пустая?
Я его не могу от'echo'ить никак, уже думал об этом. Через mysql_error тоже никак не выходит. видимо я совсем гоблин Добавлено спустя 4 минуты 44 секунды: он мне на Код (Text): echo $q=mysql_query( 'select SQL_CALC_FOUND_ROWS `name`, `rating`, `key`, `address`, `desc` FROM `sled_hotels` WHERE town=4 '.$str.' LIMIT '.(($page-1)*$mpp).','.$mpp); выдает: Resource id #4 и отправляет курить бамбук дальше
так посмотреть запрос надо бы для этого надо посмотреть запрос так, как он уходит в бд в таком случае т.е. надо сделать что-то типа Код (PHP): $query = 'select SQL_CALC_FOUND_ROWS `name`, `rating`, `key`, `address`, `desc` FROM `sled_hotels` WHERE town=4 ' . $str . ' LIMIT ' . (($page - 1) * $mpp) . ',' . $mpp; echo 'Вот он запрос-то: ' . $query . ' А тут уже кончился.'; echo $q = mysql_query($query); Добавлено спустя 1 минуту 1 секунду: Я пошёл спяжится в кроватне. Может ещё загляну после перекура. Запрос надо впихнуть куда-нить типа phpmyadmin или adminer или чем вы там базу ковыряете. Там наверняка будет понятно где косяк.
Спасибо огромное за наводку. Очень рассчитываю на вашу помощь, давно слежу за вашими ответами на этом форуме Приятных снов, до завтра! Добавлено спустя 1 минуту 30 секунд: Код (Text): Вот он запрос-то: select SQL_CALC_FOUND_ROWS `name`, `rating`, `key`, `address`, `desc` FROM `sled_hotels` WHERE town=4 AND rating IN(23) LIMIT 0,3 А тут уже кончился.Resource id #4
Выдает инфу, все как положено. Инфа, ограниченная количеством 3 Добавлено спустя 2 минуты 28 секунд: То бишь запрос отрабатывает отлично. Видимо косяк в том, что он не отрабатывает на дополнительных страницах, видимо некорректно он определен для других страниц, вот тут и копаю третий день ((
Заработало... Перевел на GET, добавил в ссылки на страницы GETы, полученные из формы - и заработало (код внизу). Не можете ли подсказать, как сменить расширение страницы c HTML на PHP (конкретной одной)? И еще - безопасен ли код в плане проникновения и всяческого зловредства со стороны? Огромное спасибо за ваши наводки! Они очень помогли Код (Text): <div class="hotelsearchform"> <form name="form" id="form" method="GET" action=""> <div class="search4hoteltype"> <input type="checkbox" name="type[]" value="25"> Отель<br> <input type="checkbox" name="type[]" value="26"> Мини-гостиница<br> <input type="checkbox" name="type[]" value="28"> Санаторий<br> <input type="checkbox" name="type[]" value="27"> Пансионат<br> </div> <div class="search4hotelrating"> <input type="checkbox" name="rating[]" value="15,17"> 2*<br> <input type="checkbox" name="rating[]" value="19"> 3*<br> <input type="checkbox" name="rating[]" value="21"> 4*<br> <input type="checkbox" name="rating[]" value="23"> 5*<br> </div> <div class="search4hotelplace"> <input type="checkbox" name="place[]" value="5"> Центр<br> <input type="checkbox" name="place[]" value="6"> Хоста<br> <input type="checkbox" name="place[]" value="7"> Адлер<br> <input type="checkbox" name="place[]" value="42"> Имеретинка<br> <input type="checkbox" name="place[]" value="8"> Красная Поляна<br> <input type="checkbox" name="place[]" value="10"> Дагомыс<br> <input type="checkbox" name="place[]" value="9"> Лазаревское<br> </div> <div class="search4hotelbuttons"> <input name="submit" value="ПОКАЗАТЬ ВЫБРАННОЕ" type="submit"> </div> </form> </div><!-- hotelsearchform --> <? function connectDB (){ define('DB_HOST', '---'); define('DB_USER', '---'); define('DB_PASS', '---'); define('DB_NAME', '---'); $dbconn = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Ошибка соединения с базой данных! " . mysql_error()); mysql_select_db(DB_NAME); mysql_query('SET NAMES utf8'); return $dbconn; } if(isset($_REQUEST['submit'])) { $connect = connectDB(); if( count($_GET['type']) > 0 ) { $type = implode(',',$_GET['type']); $str.= ' AND type IN('.$type.')'; } if( count($_GET['place']) > 0 ) { $place = implode(',',$_GET['place']); $str.= ' AND place IN('.$place.')'; } if( count($_GET['rating']) > 0 ) { $rating = implode(',',$_GET['rating']); $str.= ' AND rating IN('.$rating.')'; } $rat[15] = '<img src="/templates/img/s1.png" border="0">'; $rat[17] = '<img src="/templates/img/s2.png" border="0">'; $rat[19] = '<img src="/templates/img/s3.png" border="0">'; $rat[21] = '<img src="/templates/img/s4.png" border="0">'; $rat[23] = '<img src="/templates/img/s5.png" border="0">'; function resSQL($s){ $r=mysql_query($s); if ($row=mysql_fetch_row($r)) return $row[0]; else return false; } $mpp=6; if (empty($_GET['page']) || ($_GET['page'] <= 0)) { $page = 1; } else { $page = (int) $_GET['page']; } $q=mysql_query('select SQL_CALC_FOUND_ROWS `name`, `rating`, `key`, `address`, `desc` FROM `sled_hotels` WHERE town=4 '.$str.' limit '.(($page-1)*$mpp).','.$mpp); $fr=resSQL('SELECT FOUND_ROWS()'); echo '<div class="allresult">'; while($r=mysql_fetch_assoc($q)) { echo '<div class="eachresult"> <div class="hotelnamewhiteline"> <div class="hotelrating">'.$rat[$r['rating']].'</div> <div class="hotelname"><a href="/'.$r['key'].'.html" target="_parent"> "'.$r['name'].'" </a></div> </div> <div class="hoteladdress">'.$r['address'].'</div> <div class="hoteldescription"><a href="/'.$r['key'].'.html" target="_parent">'.$r['desc'].'</a></div> </div>'; } echo '</div>'; if( $type > 0 ) { $typelink = '&type[]='.$type; } else { $typelink = null;} if( $rating > 0 ) { $ratinglink = '&rating[]='.$rating; }else { $ratinglink = null;} if( $place > 0 ) { $placelink = '&place[]='.$place; }else { $placelink = null;} $pc=ceil($fr/$mpp); if ($pc>1) { $raz=''; for($n=1;$n<=$pc;$n++) { echo $raz; if ($page==$n) echo $n; else { echo '<A HREF="'.$_SERVER['PHP_SELF'].''; if ($n>0) echo '?page=',$n,$typelink,$placelink,$ratinglink.'&submit=ПОКАЗАТЬ+ВЫБРАННОЕ'; echo '">',$n,'</A>'; } $raz=' | '; } } } ?>
Нужно эскейпить, чтобы было безопасно. Читайте про экранирование. А по поводу расширения - надо конфиг сайта править. Читайте про ЧПУ.