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

Форум PHP

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

 

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

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

тема: Поиск + пагинатор
 
 автор: RuslanMRP   (06.10.2010 в 11:27)   письмо автору
 
 

Привет еще раз! Проблема такова. Не работает поиск с пагинатором.

Когда делаю так, все нормально - находит все фильтры с БД, только выводит все страницы (75) а товара на (9) страниц. Т.е Надо както убрать ненужные ссылки (страницы) (выводитьтолько рабочие страницы):

    <?      
include "setup/opt.php";
 
$count_per_page 20;
 
$page 1;
 
 
                
$result mysql_query('SELECT round(count(id)/' $count_per_page ') FROM PRICELIST');
   
$counts mysql_fetch_row($result);
$page_max $counts[0];
$poisk фильтр;
IF (!empty(
$_GET['page'])) {
$page = (int) $_GET['page'];
IF (
$page $page_max)
$page $page_max;
IF (
$page 1)
$page 1;
}
// Запрос 
    
$res  mysql_query('SELECT SQL_CALC_FOUND_ROWS * FROM `PRICELIST` WHERE nametovar LIKE "%'.$poisk.'%"  LIMIT ' .(($page 1) * $count_per_page). ', ' .$count_per_page);
// Считаем, сколько записей удовлетворяют условиям
    
$cnt  mysql_result(mysql_query('SELECT FOUND_ROWS()'), 0);
 
// Формируем вывод      
    
$table "<table width=\"50%\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n";
 
    IF(
mysql_num_rows($res) > 0)        
        while(
$row mysql_fetch_assoc($res))
        {
            
$table .= "<tr>\n<td>\n\t"$row['nametovar']. "\n</td>\n</tr>\n";
        }
                echo 
'<tr><td>'
   FOR (
$i=1$i<$page_max; ++$i) {
IF (
$i != $page) {
echo 
'<a href="?page=' $i '$poisk='.$poisk.'">'.$i.'</a> ';
}
else {
 
echo 
''.$i.' ';
        }
    }
echo 
'</td></tr>'
 
 
    
$table .= "</table>\n";    
    
    echo 
$table;
    echo 
'Всего найдено '$cnt .' строк'
        
?>

Когда пытаюсь найти через поиск - на первой странице товар выводит, перпеходя на последующие страницы - вообще нечего не выводит :

ФОРМА:
    <form action="poisk.php" method="GET">
                <td><input type="text" name="poisk" class="form-text" maxlength="30" size="35" value="<?php $_GET['poisk']; ?>Поиск по прайсу..." onblur="if(this.value=='') this.value='Поиск по прайсу...';" onfocus="if(this.value=='Поиск по прайсу...') this.value='';" border="0"></td>
                <td width="10" height="25">
                        <img src="http://www.cyberforum.ru/images/1_19.jpg" width="10" height="25" alt=""></td>
                <td width="38" height="25">
                        <input  style="border:0px; width:38; height:25; background:url('images/1_20.jpg')" type="submit"  name="go1" value=""></td>
                        </form>


ОБРАБОТКА:
    <?              
include "setup/opt.php";
mysql_select_db($DB);
$poisk '';
     IF (isset(
$_GET['poisk'])){
     
$poisk strip_tags($_GET['poisk']);
     }
     
     
$poisk trim($poisk);
                            IF (!empty(
$poisk)){
$count_per_page 20;
 
$page 1;
 
 
                
$result mysql_query('SELECT round(count(id)/' $count_per_page ') FROM PRICELIST');
   
$counts mysql_fetch_row($result);
$page_max $counts[0];
 
IF (!empty(
$_GET['page'])) {
$page = (int) $_GET['page'];
IF (
$page $page_max)
$page $page_max;
IF (
$page 1)
$page 1;
}
// Запрос 
    
$res  mysql_query('SELECT SQL_CALC_FOUND_ROWS * FROM `PRICELIST` WHERE nametovar LIKE "%'.$poisk.'%"  LIMIT ' .(($page 1) * $count_per_page). ', ' .$count_per_page);
// Считаем, сколько записей удовлетворяют условиям
    
$cnt  mysql_result(mysql_query('SELECT FOUND_ROWS()'), 0);
 
// Формируем вывод      
    
$table "<table width=\"50%\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n";
 
    IF(
mysql_num_rows($res) > 0)        
        while(
$row mysql_fetch_assoc($res))
        {
            
$table .= "<tr>\n<td>\n\t"$row['nametovar']. "\n</td>\n</tr>\n";
        }
                echo 
'<tr><td>'
   FOR (
$i=1$i<$page_max; ++$i) {
IF (
$i != $page) {
echo 
'<a href="?page=' $i '$poisk='.$poisk.'">'.$i.'</a> ';
}
else {
 
echo 
''.$i.' ';
        }
    }
echo 
'</td></tr>'
 
 
    
$table .= "</table>\n";    
    
    echo 
$table;
    echo 
'Всего найдено '$cnt .' строк';
}
 
?>

  Ответить  
 
 автор: captain-america   (06.10.2010 в 16:32)   письмо автору
 
   для: RuslanMRP   (06.10.2010 в 11:27)
 

$result = mysql_query('SELECT round(count(id)/' . $count_per_page . ') FROM PRICELIST');
$counts = mysql_fetch_row($result);
$page_max = $counts[0];

Ты тут определяешь количество страниц если брать в расчет всю таблицу целиком

А результат поиска у тебя намного меньше, ты же выбираешь только часть значений
$res = mysql_query('SELECT SQL_CALC_FOUND_ROWS * FROM `PRICELIST` WHERE nametovar LIKE "%'.$poisk.'%" LIMIT ' .(($page - 1) * $count_per_page). ', ' .$count_per_page);

Поэтому попробуй при определении $page_max добавить условии поиска
$result = mysql_query('SELECT round(count(id)/' . $count_per_page . ') FROM PRICELIST' WHERE nametovar LIKE "%'.$poisk.'%");

  Ответить  
 
 автор: RuslanMRP   (06.10.2010 в 17:16)   письмо автору
 
   для: captain-america   (06.10.2010 в 16:32)
 

За это огромное спасибо! Все работает.

Может подскажите. Что в поиске не так? Почему выводит только на первой странице.... а если задовать явно, то все нормально

  Ответить  
 
 автор: captain-america   (06.10.2010 в 17:48)   письмо автору
 
   для: RuslanMRP   (06.10.2010 в 17:16)
 

Про поиск.
У вас верно работает поиск. Скажем у вас в таблице 1 тыс товаров. Вы выводите их по 20 штук на странице. У вас будет 50 страниц в пагинаторе.

При использовании поискового слова размер выводимого контента сокращается.

Скажем вы искали товар, в название которого входит "пылесоc". У вас таких записей нашлось 120. Это значит что для конкртеной поисковой фразы пагинатор будет состоять из 6 страниц.
А если найдется меньше 20 записей, то у вас будет только одна страница в пагинаторе.

Для теста попробуйте расширить свою базу и вводить часть слова, которое встречается очень часто.

  Ответить  
 
 автор: RuslanMRP   (07.10.2010 в 10:40)   письмо автору
 
   для: captain-america   (06.10.2010 в 17:48)
 

Я об этом и говорю, что у меня данного товара, например "фильтров" (167). Вывожу по 20 получаеться 7 страниц. Товар выводит только на первой, как только я перехожу на какую-либо другую страницу - нечего не отображает - даже страницы.

Если же явно задаю не переменную $poisk, а "фильтр" - все отлично работает. Получаеться что $poisk не передаеться на следующие страницы или что-то другое.

Можите помочь?

  Ответить  
 
 автор: captain-america   (07.10.2010 в 10:45)   письмо автору
 
   для: RuslanMRP   (07.10.2010 в 10:40)
 

echo '<a href="?page=' . $i . '$poisk='.$poisk.'">'.$i.'</a> ';


Если у вас так в коде, то ошибка в этом , только сейчас заметил

Должно быть &poisk

echo '<a href="?page=' . $i . '&poisk='.$poisk.'">'.$i.'</a> ';

  Ответить  
 
 автор: RuslanMRP   (07.10.2010 в 10:54)   письмо автору
 
   для: captain-america   (07.10.2010 в 10:45)
 

ОГРОМНОЕ СПАСИБО!!!!!!!!!! ЗА ТОЧНО ПОМОГАЕТЕ НАЧИНАЮЩИМ!!!!!!! СПАСИБО!

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

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