powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Фильтрация данных, переданных через адресную строку
8 сообщений из 8, страница 1 из 1
Фильтрация данных, переданных через адресную строку
    #38467130
linnard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
В общем передаю идентификаторы через запятую в адресной строке, например:

mysyte.ru/show/2,5,6,7,10,15,13/

После получения данных, необходимо отфильтровать полученные айди (удалить все кроме запятых и чисел, удалить лишние запятые).

Вот мой почти работающий способ:

Код: php
1.
2.
3.
$ids=urldecode($url_ids);
ids = preg_replace('/[^0-9,]/', '', $ids); // удалить все кроме запятых и чисел
$ids = preg_replace('#,+#', ',',$ids); // удалить лишние запятые



Если поставить одну запятую перед первым идентификатором - она не удаляется, и если поставит запятую сразу после последнего айди - она тоже не удаляется. Возможно есть другие, более простые способы фильтровать такие данные? Что скажете?

ПС: очень важно получить отфильтрованные айди именно через запятую, ибо выборка из БД идет с помощью
Код: sql
1.
WHERE id IN
...
Рейтинг: 0 / 0
Фильтрация данных, переданных через адресную строку
    #38467154
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так не делают. Делают так. Берут текст, превращают его в данные, затем из данных делают валидный для текущего контекста текст.

Это значит

$params = preg_replace('/\s+/', '', $params); // удалили все пробелы
$arr = explode(',' $params); // превратили массив символов в суб-массивы токенов
$arr = array_filter($arr); // удалили все false значения, например пустые ''
$arr = array_unique($arr); // оставили только уникальные токены

// Готово. Теперь в $arr нормальные значения которые можно юзать. Для where in() потребуется

$wherein = 'WHERE IN ( . join(',', $arr) . ')';

Вполне понятно теперь можно обойтись без шаманского вереина. Наделать столько запросов, сколько пришло элементов в $arr и закинуть их в мультиквери.

Или как-то еще использовать. Потому что данные нормальны.
...
Рейтинг: 0 / 0
Фильтрация данных, переданных через адресную строку
    #38467156
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл оформить. И подразумевается что параметры уже получены в строке из URI. Из которой делаются токены по той же схеме

$router = explode('/', $uri);
...
Рейтинг: 0 / 0
Фильтрация данных, переданных через адресную строку
    #38467157
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять забыл оформить. Так передаются данные в корзину? А по сессии она не наполняется что ли?
...
Рейтинг: 0 / 0
Фильтрация данных, переданных через адресную строку
    #38467360
linnard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
deblogger,

Спасибо. интересный вариант. сейчас попробую.

deblogger Так передаются данные в корзину? А по сессии она не наполняется что ли?

Пользователь с помощью чек боксов выбирает, какие категории товаров отображать на сайте.
...
Рейтинг: 0 / 0
Фильтрация данных, переданных через адресную строку
    #38467367
linnard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
debloggerВполне понятно теперь можно обойтись без шаманского вереина. Наделать столько запросов, сколько пришло элементов в $arr и закинуть их в мультиквери.

А чем плох вереин, и быстрее ли работает mysqli_multi_query() ?
...
Рейтинг: 0 / 0
Фильтрация данных, переданных через адресную строку
    #38467389
Код: php
1.
2.
3.
$str = '2,5,6,7,10,15,13';        
preg_match_all('/\d+/', $str, $out);        
var_dump(implode(',', $out[0]));


там можешь ещё проверять если $out пустой то и условие запроса ненужно.
...
Рейтинг: 0 / 0
Фильтрация данных, переданных через адресную строку
    #38467632
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам подход подозрителен. Неизвестно заранее сколько будет OR. Пять, 10, или over9000.

Чтобы понять как правильно надо посмотреть вперед. Что придется делать с этим набором? Допустим записать в заказ. Таблица заказов: order_id, item_id, amount, comment. Следовательно имеем типичный инсерт инто values(),(),()... и последующую выборку по одному order_id. Или по user_name применительно к поставленной задаче.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Фильтрация данных, переданных через адресную строку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]