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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2012, 16:34   #1
Jaty
Пользователь
 
Регистрация: 10.06.2010
Сообщений: 19
По умолчанию Фильтры отображения товаров PHP + MySQL

Всем, доброго времени суток. Делаю сайт интернет-магазин, нужно сделать фильтрацию товаров по нескольким параметрам, например: производитель+страна+"что-то ещё". разобрался как выводить по одному из параметров, а как задействовать больше одного параметра так и не понял

фильтр производителей
PHP код:
<?
    $man_filtr 
mysql_query ("SELECT * FROM manufacturer"$db);
    
$man_row mysql_fetch_array ($man_filtr);
    do{
        print(
"<a href='view_manufacturer.php?man=".$man_row['id']."'><img height='80px' width='150px' src=".$man_row['m_img']."></a>");
    }while(
$man_row mysql_fetch_array ($man_filtr));
?>
фильтр по странам
PHP код:
<?
    $c_filtr 
mysql_query ("SELECT * FROM contry"$db);
    
$c_row mysql_fetch_array ($c_filtr);
    do{
        print(
"<p><a href='view_manufacturer.php?c=".$c_row['id']."'>".$c_row['cname']."</a></p>");
    }while(
$c_row mysql_fetch_array ($c_filtr));
?>
и вывод по одному из фильтров
PHP код:
<?
    
    $result 
mysql_query("SELECT * FROM main WHERE manufacturer=$man OR country=$c",$db);
        
$myrow mysql_fetch_array ($result);
        
        do{
            
$result1 mysql_query("SELECT name FROM manufacturer WHERE id='{$myrow[manufacturer]}'");
            
$myrow1=mysql_fetch_array($result1);
            print(
"<table align='center' class='catalog'>
             <tr>
                <td width='20%' rowspan='2' align='center'><img align='center' height='80px' width='200px' src="
.$myrow['pimg']."></td>
                <td width='60%' class='catalog_title'><a href='view_prod.php?id="
.$myrow['id']."'>".$myrow1['name']." ".$myrow['model']."</a></td>
                <td width='20%' align='center' class='catalog_price'>Цена "
.$myrow['price']." у.е.</td>
             </tr>
             <tr>
                <td>"
.$myrow['description']."</td>
                <td width='20%' height='100' align='center' valign='bottom'><a href='byu.php'><img src='images/buy_but.jpg' /></a></td>
             </tr>
            </table><br>"
);
        }while(
$myrow mysql_fetch_array ($result));
?>
пытался вместо SELECT * FROM main WHERE manufacturer=$man OR country=$c подставить SELECT * FROM main a INNER JOIN (manufacturer b, contry c) ON a.manufacturer=b.id AND a.country=c.id выводит все товары как без фильтра, но в строку браузера прописывает урл с параметром(одним).
Jaty вне форума Ответить с цитированием
Старый 05.04.2012, 16:54   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

неясна структура БД .. если все параметры -в одной таблице то думаю нужно использовать AND .... парам1=перемен1 AND парметр2=перемен2 итд
, если это таблицы со связями - покажите кто и как связан
ADSoft вне форума Ответить с цитированием
Старый 05.04.2012, 17:02   #3
Jaty
Пользователь
 
Регистрация: 10.06.2010
Сообщений: 19
По умолчанию

параметры в связаных таблицахdb.jpg
Jaty вне форума Ответить с цитированием
Старый 05.04.2012, 18:57   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

Код:
SELECT main.* FROM main 
LEFT JOIN manufacturer ON main.manufacturer=manufacturer.id
LEFT JOIN contry ON main.contry=contry.id
LEFT JOIN location ON main.location=location.id
WHERE manufactured.name=$name AND ....... другие сравнения
как то так.... добавляешь нужное количество параметров .. и сравнений
ADSoft вне форума Ответить с цитированием
Старый 05.04.2012, 19:21   #5
Jaty
Пользователь
 
Регистрация: 10.06.2010
Сообщений: 19
По умолчанию

спасибо
запрос в phpMyAdmin работает правильно, выводит что нужно
PHP код:
SELECT main.* FROM main 
    LEFT JOIN manufacturer ON main
.manufacturer=manufacturer.id 
    LEFT JOIN contry ON main
.country=contry.id 
    WHERE main
.manufacturer=manufacturer.id AND main.country=country.id 
следующий вопрос: как его правильно вставить в PHP код? потому что вставляю его так
PHP код:
$result 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);
        
$myrow mysql_fetch_array ($result);
        
        do{
            
$result1 mysql_query("SELECT name FROM manufacturer WHERE id='{$myrow[manufacturer]}'");
            
$myrow1=mysql_fetch_array($result1);
            print(
"<table align='center' class='catalog'>
             <tr>
                <td width='20%' rowspan='2' align='center'><img align='center' height='80px' width='200px' src="
.$myrow['pimg']."></td>
                <td width='60%' class='catalog_title'><a href='view_prod.php?id="
.$myrow['id']."'>".$myrow1['name']." ".$myrow['model']."</a></td>
                <td width='20%' align='center' class='catalog_price'>Цена "
.$myrow['price']." у.е.</td>
             </tr>
             <tr>
                <td>"
.$myrow['description']."</td>
                <td width='20%' height='100' align='center' valign='bottom'><a href='byu.php'><img src='images/buy_but.jpg' /></a></td>
             </tr>
            </table><br>"
);
        }while(
$myrow mysql_fetch_array ($result)); 
и оно на сайте мне не фильтрует его, выводит пустые поля
Jaty вне форума Ответить с цитированием
Старый 05.04.2012, 20:05   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Jaty Посмотреть сообщение
как его правильно вставить в PHP код?
Названия таблиц и полей - экранируем обратными кавычками:
PHP код:
"...
LEFT JOIN `manufacturer` ON `main`.`manufacturer`=`manufacturer`.`id` 
..." 
Значения полей в запросе - заключаем в одиночные кавычки:
PHP код:
"...
WHERE `main`.`manufacturer`='
$man' AND `main`.`country`='$c'
..." 
Также нужно убедиться, что все перменные корректно вставляются в запрос - для проверки (при проблемах) выводим в браузер готовый текст запроса при помощи echo:
PHP код:
echo "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' " 
Если какая-то переменная не вставилась в запрос - смотрим в коде почему.
Если все переменные вставились нормально - пробуем выполнить этот готовый запрос в phpMyAdmin - и смотрим, какую ошибку он выдает.
Текст ошибки постим сюда.
Andkorol вне форума Ответить с цитированием
Старый 05.04.2012, 20:13   #7
Jaty
Пользователь
 
Регистрация: 10.06.2010
Сообщений: 19
По умолчанию

в поле `country`='$c' попадает 1, даже если я не выбрал страну производителя
Jaty вне форума Ответить с цитированием
Старый 05.04.2012, 20:18   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Jaty Посмотреть сообщение
в поле `country`='$c' попадает 1, даже если я не выбрал страну производителя
Откуда берется у вас эта переменная $c ?

PS: - и почему у вас в запросе есть критерии, которые могут быть не определены?

Последний раз редактировалось Andkorol; 05.04.2012 в 20:26. Причина: PS
Andkorol вне форума Ответить с цитированием
Старый 05.04.2012, 20:22   #9
Jaty
Пользователь
 
Регистрация: 10.06.2010
Сообщений: 19
По умолчанию

я понял что чтобы выполнялся этот запрос, то обе переменные должны быть заполнены, но при нажатии на одну из ссылок, получаем значение только одной переменной, то есть либо main.manufacturer=$man пустое, либо main.country=$c пустое. как реализовать чтобы в таком случае оно выводило товары сначала с одним параметром, а потом при нажатии на ссылку страны оно выводило уже с двумя параметрами?
Jaty вне форума Ответить с цитированием
Старый 05.04.2012, 20:26   #10
Jaty
Пользователь
 
Регистрация: 10.06.2010
Сообщений: 19
По умолчанию

вот файл вывода
PHP код:
<?
    
if (isset($_GET['man'])){
        
$man $_GET['man'];
    } 
    if (!isset (
$man)){ $man 1;}
    if (isset(
$_GET['c'])){
        
$c $_GET['c'];
    } 
    if (!isset (
$c)){ $c 1;}
?>

<body>


<?
include ("Blocks/db.php");
include (
"Blocks/header.php");
include (
"Blocks/menu.php");
?>  
     
<div class="content">
  </div>
  <div class="content">
    <div class="content_resize">
      <div class="mainbar2">
<? 
include ("Blocks/filtr_menu.php");
include (
"Blocks/filtr_c.php");
?>

<?
    
    $result 
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);
        
$myrow mysql_fetch_array ($result);
        echo 
"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' " ;
        
/*var_dump($myrow);*/
        
do{
            
$result1 mysql_query("SELECT name FROM manufacturer WHERE id='{$myrow[manufacturer]}'");
            
$myrow1=mysql_fetch_array($result1);
            print(
"<table align='center' class='catalog'>
             <tr>
                <td width='20%' rowspan='2' align='center'><img align='center' height='80px' width='200px' src="
.$myrow['pimg']."></td>
                <td width='60%' class='catalog_title'><a href='view_prod.php?id="
.$myrow['id']."'>".$myrow1['name']." ".$myrow['model']."</a></td>
                <td width='20%' align='center' class='catalog_price'>Цена "
.$myrow['price']." у.е.</td>
             </tr>
             <tr>
                <td>"
.$myrow['description']."</td>
                <td width='20%' height='100' align='center' valign='bottom'><a href='byu.php'><img src='images/buy_but.jpg' /></a></td>
             </tr>
            </table><br>"
);
        }while(
$myrow mysql_fetch_array ($result));
?>
вот файл с ссылками на фильтр по производителям (filtr_menu.php)
PHP код:
<?
    $man_filtr 
mysql_query ("SELECT * FROM manufacturer"$db);
    
$man_row mysql_fetch_array ($man_filtr);
    do{
        print(
"<a href='view_manufacturer.php?man=".$man_row['id']."'><img height='80px' width='150px' src=".$man_row['m_img']."></a>");
    }while(
$man_row mysql_fetch_array ($man_filtr));
?>
вот файл с ссылками на фильтр по странам (filtr_c.php)
PHP код:
<?
    $c_filtr 
mysql_query ("SELECT * FROM contry"$db);
    
$c_row mysql_fetch_array ($c_filtr);
    do{
        print(
"<p><a href='view_manufacturer.php?c=".$c_row['id']."'>".$c_row['cname']."</a></p>");
    }while(
$c_row mysql_fetch_array ($c_filtr));
?>
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