Покинул форум
Сообщений всего: 58
Дата рег-ции: Май 2007
Помог: -1 раз(а)
Задача такая: на сайте есть форма поиска. Человек вводит в поле поиска артикул или часть артикула товара и ему необходимо предоставить список товара, в артикуле которого встречается то, что он ввел в поле поиска.
Из формы методом POST забирается то, что человек ввёл ($artorname) и передаётся на обработку скрипту find.php. find.php
На первый взгляд всё работает. Браузер мне выдаёт нужное количество товара, делит на правильное количество страниц, что-то типа:
товар 1
товар 2
.......
Страницы: [1][2][3]....
Но когда я нажимаю на 2, 3 и т. д. страницы, браузер мне сбрасывает фильтр, а высыпает весь товар из базы.
То есть, допустим, в базе 100 единиц товара, условию поиска удолетворяют 10. На странице выводим по 4 единицы товара. В итоге для начала получаем 25 страниц - всё отображается корректно: [1][2][3]....[25]. Когда щёлкаешь на каждую из страниц - всё правильно. После ввода условия отображаются [1][2][3] - это тоже всё хорошо. Но, когда щёлкаю на [2] или [3] получаю:
[1][2][3]....[25].
valenok
Отправлено: 11 Сентября, 2007 - 06:40:43
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006 Откуда: Москва
Помог: 10 раз(а)
Все правильно. Когда ты формируешь первую страницу результатов поиска, то тебе доступны данные из формы, которую заполнил и отправил пользователь ($_POST["artorname"]). Но на остальных-то страницах результата поиска переменная $_POST["artorname"] не определена. Т.е. твое условие поиска в БД LIKE '' (undefined трактуется в данном контексте как пустая строка) - найти нечто, похоже на пустую строку.
Решение - использовать сессии $_SESSION["artorname"] = $_POST["artorname"]. Или, как предлагает valenok, передавать строку поискового запроса методом GET:
Когда в форме поиска я ввожу цену "от" и "до", то всё нормально - выводит мне список товара, удолетворяющий данному условию и страницы [1][2]....
Но когда я нажимаю на какую-нибудь из страниц: [1], [2] и т.д. мне браузер выдает ошибку следущего содержания:
-------------------------------- -------------------------------- -----------------
Notice: Undefined variable: sql in C:Program FilesApache GroupApache2htdocsmyshop05class. eshop.php on line 648
Warning: mysqli::query() [function.mysqli-query]: Empty query in C:Program FilesApache GroupApache2htdocsmyshop05class. eshop.php on line 648
-------------------------------- -------------------------------- ---------------------------
Если же я запускаю по отдельности только форму для поиска по цене, то есть вместо
$sql='SELECT * FROM product where product_on_off=0 AND product_price>'.$pricefrom.' AND product_price<'.$priceto.'
ORDER BY product_articul LIMIT '.(($page- 1)*$this->MAX_COUNT).', '.$this->MAX_COUNT;
$_SESSION['find_price']=1;
}
Этот блок кода я вообще не понял.
Зачем первый запрос для подсчёта колва страниц?
Можено же и со второго посчитать. Один запрос лишний.
Тоже самое касается и первой части функции find
Empty query
Значит $sql имеет вид ""
Значит ни одно из условий выше не было удовлетворено и в переменую sql не запихали значения ..\n\n(Добавление)
А чё у тебя сё как запутанно?
У мнея чтото такое получилось
Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006 Откуда: Москва
Помог: 10 раз(а)
valenok пишет:
Зачем первый запрос для подсчёта колва страниц?
Можено же и со второго посчитать. Один запрос лишний.
На самом деле он не лишний. Первый запрос нужен, чтобы посчитать кол-во строк результата запроса - он используется в блоке LIMIT второго запроса. Без этого постраничную навигацию не построишь. Кол-во строк результатов запроса используется в функциях
page_find()
page_find_price()
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.