Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Навигация по найденным значениям.
 
 автор: 7han   (03.01.2009 в 06:28)   письмо автору
 
 

Сделал постраничную навигацию (по типовому образцу), всё работает, но есть одна проблемка: на странице есть форма поиска и при вводе в нее данных и последующем поиске, как и положено, на первой странице листинга отображаются найденные варианты, и на навигационных ссылках меньшее количество страниц. Но при нажатии на ссылку следующей страницы, навигация происходит уже не по найденным ранее значениям, а по всей таблице базы данных.
Подскажите, как сделать, чтоб данные не терялись, и навигация происходила только по выбранным значениям.

  Ответить  
 
 автор: Николай2357   (03.01.2009 в 06:35)   письмо автору
 
   для: 7han   (03.01.2009 в 06:28)
 

Как вариант можно условие поиска записать в сессию.

  Ответить  
 
 автор: Trianon   (03.01.2009 в 07:25)   письмо автору
 
   для: 7han   (03.01.2009 в 06:28)
 

проблема в том, что параметры поиска из формы на первую страницу Вы передаете, а через ссылки навигации - нет.
Добавьте параметры в ссылки навигации - всё заработает.

  Ответить  
 
 автор: 7han   (03.01.2009 в 08:21)   письмо автору
 
   для: Trianon   (03.01.2009 в 07:25)
 

Подскажите на примере, пожалуйста, а то не могу сообразить.
Набор ссылок вот такой:
if ($page != 1) $pervpage = ' <a href= ./?page=1><<</a> ';

if ($page != $total) $nextpage = ' <a href= ./?page='.$total.'>>></a> ';

if($page - 2 > 0) $page2left = ' <a href= ./?page='. ($page - 2) .'>'. ($page - 2) .'</a> |';
if($page - 1 > 0) $page1left = '<a href= ./?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = '| <a href= ./?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href= ./?page='. ($page + 1) .'>'. ($page + 1) .'</a>';

  Ответить  
 
 автор: Николай2357   (03.01.2009 в 12:05)   письмо автору
 
   для: 7han   (03.01.2009 в 08:21)
 

Если использовать одну функцию для постраничной навигации общего вывода и вывода результатов поиска, боюсь одного добавления праметров в GET может оказаться недостаточным, либо довольно сложным. Проще всё таки использовать сессию. Примерно так:
<?php
$_SESSION
['where'] = isset($_POST['search'])?
"WHERE `text` LIKE '%".mysql_escape_string($_POST['search'])."%'":$_SESSION['where'];

$result mysql_query("SELECT COUNT(*) AS cnt 
FROM `table` "
.$_SESSION['where']." ")or die ('Error: 1' mysql_error());
$posts mysql_result($result,0,'cnt');
if(!
$page&&($posts-$num) > $num)
.
.
.

$result mysql_query("SELECT `text` 
FROM `table` "
.$_SESSION['where']." .... LIMIT ".$start.", ".$num."")
or die (
'Error: 2' mysql_error());
Только при возврате на общий вывод нужно обнулить $_SESSION['where'].
Код, который я привел в качестве примера, просто иллюстрация принципа и нуждается в доработке.

  Ответить  
 
 автор: Trianon   (03.01.2009 в 14:12)   письмо автору
 
   для: Николай2357   (03.01.2009 в 12:05)
 

>Если использовать одну функцию для постраничной навигации общего вывода и вывода результатов поиска, боюсь одного добавления праметров в GET может оказаться недостаточным, либо довольно сложным.

Вообще-то, это стандартная практика. В чем сложности-то?

  Ответить  
 
 автор: Николай2357   (03.01.2009 в 15:35)   письмо автору
 
   для: Trianon   (03.01.2009 в 14:12)
 

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

  Ответить  
 
 автор: Trianon   (03.01.2009 в 14:13)   письмо автору
 
   для: 7han   (03.01.2009 в 08:21)
 

Нужно еще знать набор параметров поиска.

  Ответить  
 
 автор: 7han   (03.01.2009 в 15:32)   письмо автору
 
   для: Trianon   (03.01.2009 в 14:13)
 

Ну к примеру, есть просто выборка диапазона цен. То есть в запросе выбираются:
price>'100' AND price1<'1000'.
Как пролистать диапазон выбранных значений?
А то мне с сессиями сложновато чего-то.

  Ответить  
 
 автор: Trianon   (08.01.2009 в 11:52)   письмо автору
 
   для: 7han   (03.01.2009 в 15:32)
 

какими параметрами GET-запроса это передается?
Собственно, можно решать задачу абстрактно.
преобразовать все элементы массива GET кроме page в строку параметров, и дописывать её к ссылке.

<?

$p 
'';
foreach(
$_GET as $k =>$v)
    if(
$k != 'page'
        if(
is_array($v))
            foreach(
$v as $k1 =>$v1)
               
$p .= '&' $k '[' .$k1']=' rawurlencode($v1); 
        else
            
$p .= '&' $k '=' rawurlencode($v); 

$p htmlspecialchars($p);

//........

for($n 1$n $num$n++)
{
//........
  
echo "<a href=\"?page=$n$p\" > $n </a>"
//........

}

  Ответить  
 
 автор: 7han   (08.01.2009 в 11:40)   письмо автору
 
   для: Trianon   (03.01.2009 в 14:13)
 

Вопрос открыт...
Может подкинете еще вариант с GET ?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования