Динамический запрос, основанный на множественных переменных GET (уточните форму поиска) - PullRequest
1 голос
/ 21 сентября 2009

Так что я пытаюсь найти скрипт, который может начать меня с создания панели «точного поиска», которая будет формой, надеюсь, что-то похожее на то, что Ebay получил в данный момент.

Хотя я знаю, что это будет форма и, используя метод GET, я не могу найти скрипт, который может анализировать URL-адрес для нескольких параметров и динамически обновлять запрос.

Я не совсем уверен, как это сделать без миллиона и одного оператора if. (около 10 или около того возможных переменных GET, но может быть намного быстрее.)

Так что мне нужно простое:

  • foreach GET add WHERE field=GET[variable]

какие-нибудь готовые скрипты, о которых вы знаете?

Ответы [ 3 ]

3 голосов
/ 21 сентября 2009

Я не знаю какого-либо консервативного скрипта для этого.

Но это довольно легко написать самому.

<?PHP
    $valid_fields = array('field1','field2',...'fieldN');

    $where = "WHERE 1=1 ";

    foreach($valid_fields as $fname){
       if (! empty($_GET[$fname])){
          $where .= " AND $fname='" . mysql_real_escape_string($_GET[$fname]) ."'";
       }
    }

Этот код просто перебирает ожидаемые входные переменные, и, если они передаются в качестве параметра в $ _GET, объявляет AND в предложении WHERE.

Затем вы просто добавляете $ куда в конец вашего запроса (каким бы он ни был):

$sql = 'SELECT * FROM some_table ' . $where;

Изменить пример кода, чтобы скрыть имена столбцов:

<?PHP
//keys are parameter names in _GET, values are database column names.
$fieldmap = array(
'fname'=>'first_name',
'lname'=>'last_name'
);

$where = '1=1 ';

foreach($fieldmap as $get_name => $col_name){
  if (! empty($_GET[$get_name])){
    $where .= " AND $col_name = '" . mysql_real_escape_string($_GET[$get_name]) . "'";
  }
}
?>
0 голосов
/ 21 сентября 2009

Ты имеешь в виду что-то подобное?

<?php
$query = "SELECT [WHATEVER YOU'RE SELECTING] FROM your_table WHERE ";
$length = count($_GET);
$count = 0;
foreach($_GET as $key => $value){
    if($count <= $length){
        $query .= "$key='{$value}' OR ";
    }else{
        $query .= "$key='{$value}'";
    }

    $count++;
}
?>

Это будет циклически проходить по вашему массиву $ _GET, добавляя строки типа key = 'value' в строку запроса. Затем, как только вы закончите повторение массива, вы можете делать что угодно с полной строкой запроса.

Как обычно, используйте стандартные дезинфицирующие функции при сборе входных данных (strip_slashes, mysql_real_escape_string и т. Д.)

0 голосов
/ 21 сентября 2009

Я почти ничего не знаю о PHP, но здесь обсуждается вопрос получения и анализа строки запроса (прокрутите немного вниз):

http://us2.php.net/manual/en/reserved.variables.get.php

Вы, вероятно, можете поднять некоторый полезный код, чтобы извлечь все параметры GET и использовать их для создания предложения WHERE. Я не уверен, как настроена ваша модель данных, поэтому я не могу дать подробный совет по этому поводу - кроме обычных советов по дезинфекции всех ваших входных данных, чтобы вы не получили таблицы Бобби на твоих руках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...