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

Тема в разделе "PHP программирование", создана пользователем prosto_lynx, 11 янв 2011.

  1. prosto_lynx

    prosto_lynx Гость

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

    Код (PHP):
    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 раза...)
    Как проще решить этот вопрос?...
     
  2. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    в качестве идеи, сам язык не знаю=)
    пхп не позволяет задать массив, хранящий соответствие имен полей $_POST (на форме пост-запроса - 'color' и т.д.) и БД (system и т.д.) и потом пройтись по элементам этого массива, проверяя, задано ли значение у поля (isset), получить значение поля в БД и подкорректировать условие Where запроса к БД? (для первого условия дописать where, для последующих - and)
    просто всё еще зависит от логики сочетания условий.
    и еще - так копипакостничать не стоит:
    а также задавать вопросы в теме, где выкладываются уже готовые решения.
     
  3. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    ой, ваш сайт так сразу улетит если в посте будет часть sql-кода..

    в помощь могу дать одну из функции одного старого проекта (урезанную):

    Код (PHP):
        public function get($params = array()) {
    $id = null;
    $system = null;
    $type = null;
    ...................

    extract($params, EXTR_IF_EXISTS);

    list($id, ) = pca($id, 'intval');
    list($system,) = pca($system, array($this->db, 'escape'), true);
    list($type, ) = pca($type, 'intval');
    ........................

    $where = '';
    $where .= $id ? ($where ? ' AND ' : '') . 'MDL.id IN (' . $id . ')' : '';
    $where .= $system ? ($where ? ' AND ' : '') . 'MDL.system IN (' . $system . ')' : '';
    $where .= $type ? ($where ? ' AND ' : '') . 'MDL.type IN (' . $type . ')' : '';
    ..............

    $query = '
    SELECT
    fields
    FROM
    %prefix%table AS table'

    . ($where ? '
    WHERE
    '
    . $where : '')
    . ($order ? '
    ORDER BY
    '
    . $order : '');
    return $this->db->select($query, $params);
    }
     
Загрузка...

Поделиться этой страницей