Jump to content
  • 0

Запрос с учетом массива GET


alex_anderr
 Share

Question

Привет.

В ссылке передаются (в различных количествах) переменные в массив $_GET вида ?v1=1&v2=2...

Как составить запрос выборки из таблицы с учетом всех этих перменных.

Хочется так:


"SELECT * FROM table WHERE sub_id = '$_GET'";

Так как значений много, то запрос логично выглядел бы так:


$v1 = $_GET['v1'];
$v2 = $_GET['v2'];
"SELECT * FROM table WHERE sub_id = '$v1' AND sub_id = '$v2' AND ...";

Писать цикл на все полученные переменные GET?

Edited by alex_anderr
Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0
запрос логично выглядел бы так

Ничего не логично. Как одно поле у одной записи может сразу быт равно и 1, и 2?

По теме — прежде чем что-то делать, внимательно изучите вот это: http://phpfaq.ru/slashes#quick (и вообще всю страницу). Избавит от множества натоптанных другими граблей и необходимости всё переделывать.

А что касается самой базы, то если она MySQL, то, возможно, пригодится запрос вида sub_id IN(значение1, значение2, ..., значениеn).

  • Like 1
Link to comment
Share on other sites

  • 0

Мне нужно выбрать нужные строки, где поля равны значениям переменных из ГЕТ. То есть все строки где в столбце sub_id встречаются значения из v1, v2 и т.д.

С AND да, косяк. Хотелось написать для примера, получилось совсем не то.

По теме и ссылке уже читал, спасибо, за напоминание о безопасности.

--

За IN () отдельно благодарю. Может подойти.

Link to comment
Share on other sites

  • 0


$get = $_GET;
ob_start();
foreach ($get as $v) {
echo $v . " ";
}
$values = ob_get_contents();
ob_end_clean();
$new_val = explode(" ", $values);
$new_val = implode(", ", $new_val);
$new_val = chop($new_val, ", ");

$sql = "SELECT * FROM tovar WHERE some_id IN ($new_val)";

Извращение? :)

Link to comment
Share on other sites

  • 0

Был в этом уверен. Но нужную мне функцию выполняет )

--

У меня интернет-магазин с кучей товарных групп, по которым фильтруется таблица вывода этих товаров для пользоватедя. Хотелось бы чтобы результаты поиска выводились одним пхп скриптом для различных вариантов фильтрации на одной пхп странице. Придумал через get-запросы. Имеет право жить?

Edited by alex_anderr
Link to comment
Share on other sites

  • 0

Get-запрос для фильтрации — это здорово и правильно. Но обработка Get-параметров — через жуткое заднее кирильцо :)

Если фильтрация по одному полю, притом, как я понял, числовому — нельзя ли передать все составляющие фильтра массивом (имя поля с "[]"), гарантированно привести все элементы массива к числу (напр., через array_map + inval), а потом спокойно implode-нуть этот массив и подставить в IN(...)?

Link to comment
Share on other sites

  • 0

Все чуть сложнее.

1. Числовые параметры - это значения внешних ключей из бд.

2. Будут еще параметры. Например, view=table(или grid) (вывести результаты поиска таблицей(или сеткой)). И еще несколько, включая сортировку.

И здесь, я понимаю, что колхозная обработка уже не поможет :) Придется вычленять все переменные на букву v для sql-запроса, а остальные кидать в переменные и уже дальше с ними отдельно работать.

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy