Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2012, 20:36   #11
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Jaty Посмотреть сообщение
я понял что чтобы выполнялся этот запрос, то обе переменные должны быть заполнены, но при нажатии на одну из ссылок, получаем значение только одной переменной, то есть либо main.manufacturer=$man пустое, либо main.country=$c пустое. как реализовать чтобы в таком случае оно выводило товары сначала с одним параметром, а потом при нажатии на ссылку страны оно выводило уже с двумя параметрами?
Так быть не должно.
Есть какой-то один критерий - выбираем по этому одному критерию.
Есть два критерия - выбираем по двум, и т.д.
Пустых критериев и непонятных заполнений в запросах быть не должно.
У вас критерии передаются в URL - подставляйте туда ранее выбранный параметр, например:
PHP код:
print("<p>
<a href='view_manufacturer.php?c="
.$c_row['id'] . ((!empty($_GET['man'])) ? "&man=" $_GET['man'] : "") . "'>".$c_row['cname']."</a>
</p>"
); 
Ну и при составлении запроса вы должны учитывать количество существующих критериев.
Вот откуда у вас "невыбранные" критерии появляются:
Цитата:
if (!isset ($c)){ $c = 1;}
if (!isset ($man)){ $man = 1;}
Andkorol вне форума Ответить с цитированием
Старый 05.04.2012, 20:46   #12
Jaty
Пользователь
 
Регистрация: 10.06.2010
Сообщений: 19
По умолчанию

с этим разобрался. теперь если я на жал на одного производителя, не выводит ничего, а после нажатия на страну выводит то что нужно.
как тогда реализовать вывод только по одному параметру, то есть выбрал производителя, оно вывело все товары даного производителя, а потом если нажал на страну, то оно фильтрует дальше по стране?

P.S. извините если уже достал

Последний раз редактировалось Jaty; 05.04.2012 в 20:48.
Jaty вне форума Ответить с цитированием
Старый 05.04.2012, 21:05   #13
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Jaty Посмотреть сообщение
как тогда реализовать вывод только по одному параметру, то есть выбрал производителя, оно вывело все товары даного производителя, а потом если нажал на страну, то оно фильтрует дальше по стране?
Не "дальше по стране" - а "и по производителю, и по стране", в данном случае.
Проверяйте существование переменной-критерия - если она есть, то добавляем определенное условие в запрос, если нет - то не добавляем.

Псевдокод:
$запрос = "получить из таблицы бла-бла....";
$условия = массив();
if(переменная1 есть){
...добавили условие1 в массив...
}
if(переменная2 есть){
...добавили условие2 в массив...
}
if(не пустой массив с условиями){
$запрос .= "где " . implode("разделитель", $условия);
}
Andkorol вне форума Ответить с цитированием
Старый 05.04.2012, 21:27   #14
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

использовать сессии... в них хранить выбор пользователя из фильтра - выводить согласно запомненным значениям
ADSoft вне форума Ответить с цитированием
Старый 05.04.2012, 21:52   #15
Jaty
Пользователь
 
Регистрация: 10.06.2010
Сообщений: 19
По умолчанию

всем спасибо за помощь
Jaty вне форума Ответить с цитированием
Старый 05.04.2012, 22:29   #16
Jaty
Пользователь
 
Регистрация: 10.06.2010
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Псевдокод:
$запрос = "получить из таблицы бла-бла....";
$условия = массив();
if(переменная1 есть){
...добавили условие1 в массив...
}
if(переменная2 есть){
...добавили условие2 в массив...
}
if(не пустой массив с условиями){
$запрос .= "где " . implode("разделитель", $условия);
}
то есть по идее должно получиться что то вроде
PHP код:
$res mysql_query("SELECT `main`.* FROM `main` 
    LEFT JOIN `manufacturer` ON `main`.`manufacturer`=`manufacturer`.`id` 
    LEFT JOIN `contry` ON `main`.`country`=`contry`.`id` 
    WHERE `main`.`manufacturer`='
$man' AND `main`.`country`='$c'",$db);
        
$myrow2 mysql_fetch_array ($res);
        if (isset (
$man)){
        
$man $myrow2['man'];} 
        if (isset(
$c)){
        
$c $myrow2['c'];} 
        if(!empty(
$myrow2)){
            
$res .="main".implode("&"$myrow2['man'],$myrow2['c']);
        } 
Jaty вне форума Ответить с цитированием
Старый 05.04.2012, 22:55   #17
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Jaty Посмотреть сообщение
то есть по идее должно получиться что то вроде
Вообще не то - и даже не рядом.
Псевдокод описывает процесс добавления условий в запрос к БД - в зависимости от того, какие критерии определены пользователем через URL (пример рассмотрен ранее в топике).
Он формирует часть запроса, которая "WHERE `bla-bla` = '$bla_bla' ... ".
Каждое условие в псевдокоде позволяет создать именно вот такую часть "`bla-bla` = '$bla_bla'".
В зависимости от кол-ва критериев в URL - это будет примерно такой результат:
PHP код:
// есть только $_GET['man']
" `manufacturer` = '" mysql_real_escape_string($_GET['man']) . "'";
// есть только $_GET['c']
" `country` = '" mysql_real_escape_string($_GET['c']) . "'";
// есть и $_GET['man'] и $_GET['c']
" `manufacturer` = '" mysql_real_escape_string($_GET['man']) . "' 
   AND `country` = '" 
mysql_real_escape_string($_GET['c']) . "'"
Цепляем эти условия к остальной части запроса (которая "SELECT * FROM .... ") после WHERE, естественно, - и получаем готовый запрос строго по нужным критериям - не важно, сколько их у нас передано, 1 или 2.
Andkorol вне форума Ответить с цитированием
Старый 05.04.2012, 23:18   #18
Jaty
Пользователь
 
Регистрация: 10.06.2010
Сообщений: 19
По умолчанию

не совсем понятно куда его цеплять
Jaty вне форума Ответить с цитированием
Старый 06.04.2012, 08:27   #19
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

вам говорили о другом - что sql запрос составляется в зависимости от переданных параметров
ADSoft вне форума Ответить с цитированием
Старый 07.04.2012, 20:09   #20
Jaty
Пользователь
 
Регистрация: 10.06.2010
Сообщений: 19
По умолчанию

PHP код:
"SELECT `main`.* FROM `main` 
    LEFT JOIN `manufacturer` ON `main`.`manufacturer`=`manufacturer`.`id`
    LEFT JOIN `contry` ON `main`.`country`=`contry`.`id` 
    WHERE (`main`.`manufacturer`='
$man' or '$man'='') AND (`main`.`country`='$c' or '$c'='')" 
так должен выглядеть этот запрос?
Jaty вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TopServer(PHP+MySQL+Apache+/etc), и обновление компонентов(в основном PHP) Пепел Феникса Софт 2 05.11.2011 14:38
что не так с php кдом или с настройками MySQL+PHP Jimmi Помощь студентам 2 27.12.2010 09:03
mysql и php. tatysya Помощь студентам 2 12.11.2010 18:46
PHP и MySQL D_dd Помощь студентам 1 04.07.2009 22:45