Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
 Аватар для prosto_lynx
49 / 25 / 2
Регистрация: 09.06.2008
Сообщений: 227

Организация поиска в БД по параметрам введенным в форме

11.01.2011, 23:50. Показов 3824. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как грамотнее сделать обработку формы для поиска по параметрам в базе данных (я использую MySQL)?..
Т.е.:
Например есть интернет магазин, где множество разных товаров и форма для поиска, в которой вводишь, например, цвет и высоту товара...
Тогда в обработчике формы (т.е. в файле php, который обрабатывается по нажатии submit) пишу:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (isset($_POST['color']))
{
    if (isset($_POST['height']))
        $result = mysql_query ("select * from tpredl where system='{$_POST['color']}' and city='{$_POST['height']}';");
    else
        $result = mysql_query ("select * from tpredl where system='{$_POST['color']}';");
}
else
{
    if (isset($_POST['city']))
        $result = mysql_query ("select * from tpredl where city='{$_POST['height']}';");
    else
        $result = mysql_query ("select * from tpredl;");
}
Но такой способ уж очень громоздкий получается... (и с добавлением каждого нового параметра размер кода увеличивается в 2 раза...)
Как проще решить этот вопрос?...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.01.2011, 23:50
Ответы с готовыми решениями:

Организация поиска в БД по параметрам введенным в форме
Как грамотнее сделать обработку формы для поиска по параметрам в базе данных (я использую MySQL)?.. Т.е.: Например есть интернет...

Организация поиска в форме
В общем есть база, прикрепил к сообщению. В ней есть связанные таблицы, одна из них Сотрудники с инфой об этих сотрудниках и таблица...

Поиск по введённым параметрам в MySQL
Есть БД MySQL.Мне нужно сделать поиск по ней.Пользователь с помощью формы выбирает страну.Скрипт полностью выводит строки из БД в которых...

3
163 / 163 / 9
Регистрация: 08.01.2011
Сообщений: 850
12.01.2011, 00:25
Уж извини, а я свою тему погну маленько

Качай Zend Framework, там берем Zend_Db.

Реализация твоего запроса. Причем с любым количеством параметров.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$select = new Zend_Db_Table; //создаем класс
$query = $this->getAdapter()->select()->from('table_name', '*'); //создаем SQL. тут SELECT * FROM table_name ...
if(isset($POST['color'])){
$query->where('color LIKE ?', $POST['color']); // where (color LIKE $POST['color'])
}
if(isset($POST['height'])){
$query->where('height = ?', $POST['height']); // where (height = $POST['height'])
}
 
if(isset($POST['что угодно'])){
$query->where('что угодно = ?', $POST['что угодно']); // и так хоть сто раз
}
 
$result = $select->fetchAll($query);
При замене все квотится само, по-моему, так что еще и защита.
А свой метод забудь, он действительно очень громоздкий. А если будет 60 параметров?
0
 Аватар для Sulik78
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
12.01.2011, 00:50
я делал примерно так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
$post = isset($_GET) ? $_GET : false;
 
            if ($post['yearot']) {
 
                if ($post['make']) {
                    $where = $where == "" ? "WHERE auto_cars.brend = '".$post['make']."'" : $where." AND auto_cars.brend = '".$post['make']."'";
                    if ($post['model']) {
                        $where = $where." AND auto_cars.model = '".$post['model']."'";
                    }
                }
                if ($post['body']) {
                    $where = $where == "" ? "WHERE auto_cars.body = '".$post['body']."'" : $where." AND auto_cars.body ='".$post['body']."'";
                }
                if ($post['transmis'] != "" ) {
                    $where = $where == "" ? "WHERE auto_cars.transmis = '".$post['transmis']."'" : $where." AND auto_cars.transmis = '".$post['transmis']."'";
                }
                if ($post['color'] != "fff" && $post['color']) {
                    $where = $where == "" ? "WHERE auto_cars.color = '".$post['color']."'" : $where." AND auto_cars.color = '".$post['color']."'";
                }
                if ($post['metallic'] != "") {
                    $where = $where == "" ? "WHERE auto_cars.metallic = '".$post['metallic']."'" : $where." AND auto_cars.metallic = '".$post['metallic']."'";
                }
                if ($post['priceot']) {
                    $priceot = $post['priceot']-1;
                    $where = $where == "" ? "WHERE auto_cars.price > '".$priceot."'" : $where." AND auto_cars.price > '".$priceot."'";
                }
                if ($post['pricedo']) {
                    $pricedo = $post['pricedo']+1;
                    $where = $where == "" ? "WHERE auto_cars.price < '".$pricedo."'" : $where." AND auto_cars.price < '".$pricedo."'";
                }
                if ($post['yearot']) {
                    $yearot = $post['yearot']-1;
                    $where = $where == "" ? "WHERE auto_cars.year > '".$yearot."'" : $where." AND auto_cars.year > '".$yearot."'";
                }
                if ($post['yeardo']) {
                    $yeardo = $post['yeardo']+1;
                    $where = $where == "" ? "WHERE auto_cars.year < '".$yeardo."'" : $where." AND auto_cars.year < '".$yeardo."'";
                }
                if ($post['probegot']) {
                    $probegot = $post['probegot']-1;
                    $where = $where == "" ? "WHERE auto_cars.probeg > '".$probegot."'" : $where." AND auto_cars.probeg > '".$probegot."'";
                }
                if ($post['probegdo']) {
                    $probegdo = $post['probegdo']+1;
                    $where = $where == "" ? "WHERE auto_cars.probeg < '".$probegdo."'" : $where." AND auto_cars.probeg < '".$probegdo."'";
                }
                if ($post['patrol']) {
                    $where = $where == "" ? "WHERE auto_cars.patrol = '".$post['patrol']."'" : $where." AND auto_cars.patrol = '".$post['patrol']."'";
                }
                if ($post['privod']) {
                    $where = $where == "" ? "WHERE auto_cars.privod = '".$post['privod']."'" : $where." AND auto_cars.privod = '".$post['privod']."'";
                }
                if ($post['vot']) {
                    $vot = $post['vot']-0.01;
                    $where = $where == "" ? "WHERE auto_cars.litr > '".$vot."'" : $where." AND auto_cars.litr > '".$vot."'";
                }
                if ($post['vdo']) {
                    $vdo = $post['vdo']+0.01;
                    $where = $where == "" ? "WHERE auto_cars.litr < '".$vdo."'" : $where." AND auto_cars.litr < '".$vdo."'";
                }
                if ($post['new'] != "") {
                    $where = $where == "" ? "WHERE auto_cars.new = '".$post['new']."'" : $where." AND auto_cars.new = '".$post['new']."'";
                }
                if (sizeof($post['options'])) {
                    for ($i=0; $i<sizeof($post['options']); $i++) {
                        $addoptc = $i == 0 ? " AND auto_cars.id = auto_options_c.idc" : "";
                        $where = $where == "" ? "WHERE auto_options_c.ido = '".$post['options'][$i]."'$addoptc" : $where." AND auto_options_c.ido = '".$post['options'][$i]."'$addoptc" ;
                    }
                    $optsc = ", auto_options_c";
                } else {
                    $optsc = "";
                }
            }
 
$query = mysql_query("SELECT auto_cars.* FROM auto_cars$optsc $where ORDER BY $orderby LIMIT $start_item, $onpage");
ну там просто много параметров поиска около 30

Добавлено через 4 минуты
prosto_lynx, всмысле добавлять можно только значение в WHERE а больше нечего не трогать
0
0 / 0 / 0
Регистрация: 12.08.2012
Сообщений: 17
20.08.2012, 02:06
уважаемые, не могли бы вы чуть подробней написать код php. а то, насколько я понимаю, это кусок кода. я в php новичок и вот уже 3 дня подряд мучаю гугл в поисках ответа. имеется простенькая база из 4 параметров и соответствующая форма подбора. если можно, напишите как целиком должна выглядеть страница с этим кодом, потому что у меня он выводит пустую страницу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.08.2012, 02:06
Помогаю со студенческими работами здесь

Поиск записей в подчиненной форме по различным параметрам полей в главной форме
Доброго времени суток уважаемые Форумчане! Пожалуй, заключительный вопрос. Суть вопроса: на форме Водители имеем подчиненную форму...

Организация поиска в списке. Исправить ошибку в методе поиска
Сколько бы у меня желания не было, найти ее не могу. Может кто помочь? Заранее спасибо... #include &quot;stdafx.h&quot; #include...

Ошибка поиска по параметрам
Делаю интернет магазин с помощью видео, видео старое но все же, есть код для поиска по параметрам т.е по брендам: brand и цене:...

Форма поиска по параметрам
Всем доброго времени суток! Возникла такая проблема: Есть форма, состоящая из трех параметров &lt;select...

Составление верного запроса для поиска в БД по введенным значениям
Передаю данные с формы вот код обработки формы не рагирует на запрос помогите правильно составить запрос с условием &lt;?php /**...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru