Как производится форма поиска, через гет или пост. Если через гет а у меня тысяча выборок (например по брендам, типам и тд) то получается полная каша. Если пост, тогда после поиска, я не смогу отсортировать по имени или странице. Может быть уже кто то делал данную функцию, есть примеры как она должна выглядеть? Добавлено спустя 26 минут 35 секунд: Наверное мало инфы предоставил. Например есть запрос: Получить все товары где бренд 'htc' и 'apple', категория 'мобильники', а прайс ограничен от и до. В sql это будет выглядеть так: Код (Text): SELECT brand.title_b, product.title_p,product.price FROM product, brand, selection WHERE product.brand = brand.id AND product.selection = selection.id AND selection.title_url = 'mobile' AND (brand.title_url = 'apple' OR brand.title_url = 'htc') AND (product.price BETWEEN '0' AND '13000') Но как мне получить информацию из формы (form)? методом GET или POST? А то даже не могу понять от чего отталкиваться.
можно генерить некий идентификатор попытки поиска со всеми её параметрами. Отправлять постом, получать этот идентификатор, и дальше пихать его во все запросы. Через пару суток - убивать.
Вон, у корпорации добра полная каша в QueryString, и ничего. Тогда чего вам волноваться? http:// somesite.ru/search.php?cat=mobile&brands=htc,apple&maxcost=13000&mincost=0&page=5 Или бренды по ID http:// somesite.ru/search.php?cat=mobile&brands=5,14&maxcost=13000&mincost=0&page=5 Вполне адекватные запросы
Предлагаю такую схему: - со страницы критериев поиска уходит запрос (GET или POST) не принципиально - обработчик находит нужные записи и помещает все id_записей во временное хранилище. для задачи не суть важно будет ли это файловый кеш или особая таблица. главное чтобы этому результату соответствовал некий ID_поиска. делается редирект на страницу результатов с указанием ID_поиска. - при измении сортировки, или переходе на другую страницу результатов (это все GET запросы), этот ID_поиска будет постоянно присутствовать в параметрах. Т.о. не будет повторного поиска т.к. это затратная операция. не надо заново передаваться 100500 критериев поиска. http //mysite.com /search.php?result=162537123&sort=name.desc&page=2
В запрос все это получается запихнуть: Код (Text): if(isset($_GET['brand'])){ $brand = ""; $search_brand = $_GET['brand']; foreach($search_brand as $word_brand){ $where_list_brand[] = " brand.title_url = '$word_brand' "; } $where_claus_brand = implode(' OR ', $where_list_brand); $brand .= " AND($where_claus_brand) "; } Но как потом вернуть это в url строку чтобы в дальнейшем создать ссылку например на сортировку по имени или постраничный вывод. Код (Text): <a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'&order=' . $order . '">'.$i."</a> В данном случае весь мой запрос по чекбоксам слетает в никуда. То есть когда запрос в ГЕТ один там понятно, это не массив и все легко. А в данном случае как повторно получить $get['brand']? Добавлено спустя 8 минут 10 секунд: Тупанул, не разобравшись в ответах, а каким образом ид поместить во временное хранилище? Сессии? Добавлено спустя 10 минут 17 секунд: Не очень понимаю как генерировать id с запросом. Не сама функция генерации id а именно как запрос запихнуть в id. То есть result у меня будет равняться какому то определенному ид. Но как в этом ид будет содержатся запрос?
редиректом =) Добавлено спустя 20 секунд: сессии или бд Добавлено спустя 1 минуту 44 секунды: што? =)
Если точнее не очень представляю действия. То есть, пользователь создал некий запрос с определенными данными и передал их серверу постом. Как в дальнейшем сохраняется этот запрос. Каким образом в резулт занести его?
Neka, а как получить результат "&brands=htc,apple". Бренды через запятую. Ведь инпуты в массиве: Код (Text): <input type="checkbox" name="selection[]" value="table" />Планшеты<br /> <input type="checkbox" name="selection[]" value="mobile" />Телефоны<br /> Дают результат: test.php?selection[]=table&selection[]=mobile
А если тупо создать сессию с результатом. Код (Text): session_start(); if(isset($_POST['selection'])){ $selection = ""; $search_selection = $_POST['selection']; foreach($search_selection as $word_selection){ $where_list_selection[] = " selection.title_url = '$word_selection' "; } $where_claus_selection = implode(' OR ', $where_list_selection); $selection .= " AND($where_claus_selection) "; $_SESSION['selection'] = $selection; } if(isset($_SESSION['selection'])){ $select = $_SESSION['selection']; }else{ $select = ""; } После чего в запросе у меня всегда будет присутствовать моя переменная $select с данными.
Проблема сессии в том что не могу после этого выставить отмечен или нет checkbox. Самый приемлемый вариант это помещать гетом в одну строку через запятую: search.php?cat=mobile&brands=htc,apple Но как это реализовать не могу найти, весь инет уже облазил. Может быть есть какой то пример рабочей функции?
Вот такой пример. Каким образом бренды идут через запятую? Добавлено спустя 4 минуты 14 секунд: Например на озон. Пользователь нажимает на бренд, бренд добавляется в get через запятую.
в чём вопрос состоит? как получить значения текстовых инпутов? рекомендую использовать jQuery: $('input').val(); как их склеить в одну строку все? плюсиком
Чтобы лучше понимать форму с кучей чекбоксов. brands.php Код (PHP): <!DOCTYPE html> <html lang="en"> <head> <title>Brands</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> </head> <body> <form action="brands.php" method="get"> <?php // Debug info if (isset($_GET['brand'])) { echo 'brand[] = ' . var_export($_GET['brand'], TRUE) . "<br/>\n"; } for ($i = 1; $i <= 9; ++$i) { $checked = isset($_GET['brand']) && in_array($i, $_GET['brand']) ? 'checked="checked" ' : ''; ?> <label><input type="checkbox" name="brand[]" value="<?php echo $i ?>" <?php echo $checked ?>/>Brand #<?php echo $i ?></label><br/> <?php } ?> <p><input type="submit" name="sent" value="OK" /></p> </form> </body> </html> Добавлено спустя 6 минут: Я думаю посетителю по барабану будут в URLе номера брендов через запятую или через другую бяку. Главное чтобы работало.
В принципе с этим я разобрался. А чем грозит то что я убрал весь запрос в сессию? То есть при каждом новом поиске, старая сессия удаляется, и создается новая и конечно новый запрос. Как ты сказал,