Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Linnard
10 / 10 / 1
Регистрация: 07.06.2010
Сообщений: 124
1

Фильтрация данных, переданных через адресную строку

15.11.2013, 22:56. Просмотров 1189. Ответов 9
Метки нет (Все метки)

Доброго времени суток.
В общем передаю идентификаторы через запятую в адресной строке, например:
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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2013, 22:56
Ответы с готовыми решениями:

Народ как сделать вход на форум через адресную строку браузера???
Народ как сделать вход на форум через адресную строку браузера??? вот форма входа: <meta...

Поменять адресную строку
Добрый день. У меня такой вопрос: Как можно использовать вид url адреса в виде папок ? тоесть...

Получить значения переменных, переданных через форму (перенесено из другой темы)
Согласно комплектации Денвера - модуль PHP входит в комплект. Добавлено через 10 минут 23...

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

9
snikes
5 / 5 / 1
Регистрация: 15.11.2013
Сообщений: 99
15.11.2013, 23:07 2
а не проще использовать парсер implode(разделитель, строка) -вернет массив
0
Linnard
10 / 10 / 1
Регистрация: 07.06.2010
Сообщений: 124
15.11.2013, 23:46  [ТС] 3
Цитата Сообщение от snikes Посмотреть сообщение
а не проще использовать парсер implode(разделитель, строка) -вернет массив
Но массив нужно еще и обрабатывать, а без цикла не обойтись. Нужны способы проще
0
snikes
5 / 5 / 1
Регистрация: 15.11.2013
Сообщений: 99
16.11.2013, 00:25 4
Цитата Сообщение от Linnard Посмотреть сообщение
Но массив нужно еще и обрабатывать, а без цикла не обойтись. Нужны способы проще
тогда не пойму зачем вам передавать параметры раздельно, если вы хотите их склеить воедино!

Добавлено через 1 минуту
или все же кадый параметр играет роль и обрабатывать будет отдельно? тогда чем плох массив?
0
Linnard
10 / 10 / 1
Регистрация: 07.06.2010
Сообщений: 124
16.11.2013, 01:57  [ТС] 5
Цитата Сообщение от snikes Посмотреть сообщение
тогда не пойму зачем вам передавать параметры раздельно, если вы хотите их склеить воедино!

Добавлено через 1 минуту
или все же кадый параметр играет роль и обрабатывать будет отдельно? тогда чем плох массив?
дело в том, что данные уже передаются склеенными. их можно вставить в sql запрос итак - но тогда сделать sql инъекцию не составит труда. задача в том чтобы максимально просто и быстро отфильтровать полученную строку. Убрать все кроме запятых и чисел, а также убрать лишние запятые.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16807 / 6687 / 877
Регистрация: 12.06.2012
Сообщений: 19,959
Завершенные тесты: 1
17.11.2013, 02:13 6
Цитата Сообщение от Linnard Посмотреть сообщение
Но массив нужно еще и обрабатывать, а без цикла не обойтись.
PHP
1
2
3
4
$ids=urldecode($url_ids);
$ids = explode(',', $ids); // удалить все кроме запятых и чисел
$ids = array_filter( $ids, function($val) { return sprintf("%d", $val) == sprintf("%s", $val); });
$ids = join(',', $ids);
Цитата Сообщение от Linnard Посмотреть сообщение
Вот мой почти работающий способ:
PHP
1
2
$ids=urldecode($url_ids);
$ids = preg_replace('/\\A\\D*|\\D+?(?=(?:,\\d)|\\Z)/', '', $ids); // удалить все кроме запятых и чисел
1
DebianLife
16 / 16 / 1
Регистрация: 13.12.2012
Сообщений: 191
18.11.2013, 08:30 7
Цитата Сообщение от Linnard Посмотреть сообщение
Если поставить одну запятую перед первым идентификатором - она не удаляется, и если поставит запятую сразу после последнего айди - она тоже не удаляется. Возможно есть другие, более простые способы фильтровать такие данные? Что скажете?
Сделай так:

PHP
1
2
3
$ids = urldecode($url_ids);
$ids = preg_replace('/[^0-9,]/', '', $ids); // удалить все кроме запятых и чисел
$ids = trim(preg_replace('/,+/', ',', $ids), ',');
Добавлено через 9 минут
Не мой вариант не катит, не подумал, тебеж нужно и перед первым id удалить запятую. ) Сори, хотел быстро ответить, не подумал.

Добавлено через 4 минуты
Хотя погоди, это у тебя отдельный параметр? Потому что если ты весь URL фильтруешь, то [^0-9,] удалит и это mysyte.ru/show/, а если у тебя это отдельный параметр, то мой вариант подходит идеально. Тобишь если у тебя это 2,5,6,7,10,15,13 в отдельной переменной.
1
OnYourLips
507 / 357 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
18.11.2013, 08:42 8
mysyte.ru/show/?ids[]=2&ids[]=5&ids[]=6&ids[]=7&ids[]=10&ids[]=15&ids[]=13
0
DebianLife
16 / 16 / 1
Регистрация: 13.12.2012
Сообщений: 191
18.11.2013, 09:02 9
Цитата Сообщение от OnYourLips Посмотреть сообщение
mysyte.ru/show/?ids[]=2&ids[]=5&ids[]=6&ids[]=7&ids[]=10&ids[]=15&ids[]=13
Он же сказал что не хочет массив, и это ужас а не запрос )
0
OnYourLips
507 / 357 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
19.11.2013, 09:00 10
Чем он хуже того, который приведен выше?
Оба имеют одинаковый action, оба не являются ЧПУ.
0
19.11.2013, 09:00
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2013, 09:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Блокирование данных в поле формы при заполнении через адресную строку
Добрый день. Есть следующая задача: При переходе по ссылке в адресной строке прописываю...

Запретить доступ через адресную строку
Всем привет, как можно запретить доступ через адресную строку ? То есть у меня есть файл index.php...

Запрет доступа через адресную строку
Для того чтобы нельзя было перейти на страницы используемые для админа на прямую(через адресную...

Запрет GET в ручную через адресную строку
При удалении записи из таблицы формируется GET запрос и в адресной строке появляется следующее...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.