Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: проблема с $_GET['id'] и регулярное выражение

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
ridvik
Отправлено: 23 Октября, 2012 - 15:02:16
Post Id


Частый гость


Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)

[+]


Добрый день. Интересует такой вопрос. Нужно параметры гет ид поверить регуляркой чтобы там были только цифры.... так вот preg_match('/^[1-9]\d*$/', $_GET['id']) данное регулярное выражение как то не так работает.... то есть я этой регуляркой сделал проверку, если только число то код работает, иначе выходит ошибка.... проблема в том, что если гет ид равен 1 все норм, если 2 и больше выходит ошибка, почему понять не могу.... посоветуйте пожалуйста что-нибудь....
 
 Top
armancho7777777 Супермодератор
Отправлено: 23 Октября, 2012 - 15:05:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['id']) && preg_match('/[\d]+$/', $_GET['id']))
  2. {
  3.     echo 'Go!';
  4. }

(Отредактировано автором: 23 Октября, 2012 - 15:06:24)

 
 Top
ridvik
Отправлено: 23 Октября, 2012 - 15:15:37
Post Id


Частый гость


Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)

[+]


Благодарю, вечером попробую. А вот из-за чего мой вариант не работает? Так сказать на будущее что бы знать....
 
 Top
OrmaJever
Отправлено: 23 Октября, 2012 - 15:18:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




armancho7777777 в последнее время ты как-то не очень логично отвечаешь. Зачем использовать рег выражения если есть is_numeric?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
armancho7777777 Супермодератор
Отправлено: 23 Октября, 2012 - 15:20:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




ridvik пишет:
А вот из-за чего мой вариант не работает?

Почему он не работает именно у Вас, - я не знаю.
У меня он работает.
 
 Top
ridvik
Отправлено: 23 Октября, 2012 - 16:02:22
Post Id


Частый гость


Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)

[+]


OrmaJever мне нужно именно целочисленное значение, я пробовал (is_numeric(is_int($_GET['id'])) не работает.... не помню что было, но либо ошибка либо ещё что то((((
 
 Top
AlexAnder
Отправлено: 23 Октября, 2012 - 16:06:31
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


Помог: 34 раз(а)




ridvik пишет:
OrmaJever мне нужно именно целочисленное значение, я пробовал (is_numeric(is_int($_GET['id'])) не работает.... не помню что было, но либо ошибка либо ещё что то((((

is_int? А?!


-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
OrmaJever
Отправлено: 23 Октября, 2012 - 16:59:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




ridvik пишет:
я пробовал (is_numeric(is_int($_GET['id'])) не работает

ну... про is_int я ничего не говорил, так оно работать и не будет, а вот так запросто


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
ridvik
Отправлено: 23 Октября, 2012 - 18:27:27
Post Id


Частый гость


Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)

[+]


OrmaJever , а оно мне будет только целочисленное значение выдавать?????
 
 Top
dubasua
Отправлено: 23 Октября, 2012 - 18:41:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Ну ващето в любой передаваемой переменной (POST,GET) все типы строковые, нужно сначала перевести строку в число. Можно вот так еще
PHP:
скопировать код в буфер обмена
  1.  
  2. if(((int)$_GET['id'] * 1) == (int)$_GET['id'])
  3.   echo 'Go!';
  4.  
 
 Top
ridvik
Отправлено: 23 Октября, 2012 - 20:59:05
Post Id


Частый гость


Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)

[+]


id=2. вот так вот почему то работает даже если сделать при любом значение кроме регулярки, но зато с регуляркой больше чем ид =1 не работает....
(Добавление)
и если даже id=0000000000000000001
 
 Top
dubasua
Отправлено: 23 Октября, 2012 - 22:03:20
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




ridvik пишет:
id=2. вот так вот почему то работает даже если сделать при любом значение кроме регулярки, но зато с регуляркой больше чем ид =1 не работает....
(Добавление)
и если даже id=0000000000000000001


Ну начнем с того что сам php язык НЕ строго-типизированный, а регуляркой ты можешь проверить только строку а не число. Вот и сделай сам выводы.
 
 Top
OrmaJever
Отправлено: 23 Октября, 2012 - 22:24:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




dubasua пишет:
if(((int)$_GET['id'] * 1) == (int)$_GET['id'])

о_О А в чём тут логика? Если число умноженое на 1 равно самому себе? Помоему любое число умноженое на 1 не изменяется


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
EuGen Администратор
Отправлено: 23 Октября, 2012 - 22:30:19
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




На самом деле из-за того, что данные в GPC-массивах всегда будут строками, is_int применять проблематично. Поэтому с применением приведения типов нужно несколько условий. is_numeric пропустит не только целое число, но и числа с точкой или отрицательным знаком (либо даже со знаком экспоненты).
В одно условие можно записать регулярным выражением - выше предлагалось, но почему-то не совсем точно.
Например, подойдет
PHP:
скопировать код в буфер обмена
  1. if(preg_match('/^[1-9][0-9]*$/', $_GET['id']))
  2. {
  3.    //...
  4. }


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
dubasua
Отправлено: 23 Октября, 2012 - 22:39:43
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




OrmaJever пишет:
dubasua пишет:
if(((int)$_GET['id'] * 1) == (int)$_GET['id'])

о_О А в чём тут логика? Если число умноженое на 1 равно самому себе? Помоему любое число умноженое на 1 не изменяется


Если строковое значение перевести в число, что получим на выходе???
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB