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
Форумы портала PHP.SU :: Версия для печати :: проблема с $_GET['id'] и регулярное выражение
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » проблема с $_GET['id'] и регулярное выражение

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

1. ridvik - 23 Октября, 2012 - 15:02:16 - перейти к сообщению
Добрый день. Интересует такой вопрос. Нужно параметры гет ид поверить регуляркой чтобы там были только цифры.... так вот preg_match('/^[1-9]\d*$/', $_GET['id']) данное регулярное выражение как то не так работает.... то есть я этой регуляркой сделал проверку, если только число то код работает, иначе выходит ошибка.... проблема в том, что если гет ид равен 1 все норм, если 2 и больше выходит ошибка, почему понять не могу.... посоветуйте пожалуйста что-нибудь....
2. armancho7777777 - 23 Октября, 2012 - 15:05:49 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['id']) && preg_match('/[\d]+$/', $_GET['id']))
  2. {
  3.     echo 'Go!';
  4. }
3. ridvik - 23 Октября, 2012 - 15:15:37 - перейти к сообщению
Благодарю, вечером попробую. А вот из-за чего мой вариант не работает? Так сказать на будущее что бы знать....
4. OrmaJever - 23 Октября, 2012 - 15:18:16 - перейти к сообщению
armancho7777777 в последнее время ты как-то не очень логично отвечаешь. Зачем использовать рег выражения если есть is_numeric?
5. armancho7777777 - 23 Октября, 2012 - 15:20:51 - перейти к сообщению
ridvik пишет:
А вот из-за чего мой вариант не работает?

Почему он не работает именно у Вас, - я не знаю.
У меня он работает.
6. ridvik - 23 Октября, 2012 - 16:02:22 - перейти к сообщению
OrmaJever мне нужно именно целочисленное значение, я пробовал (is_numeric(is_int($_GET['id'])) не работает.... не помню что было, но либо ошибка либо ещё что то((((
7. AlexAnder - 23 Октября, 2012 - 16:06:31 - перейти к сообщению
ridvik пишет:
OrmaJever мне нужно именно целочисленное значение, я пробовал (is_numeric(is_int($_GET['id'])) не работает.... не помню что было, но либо ошибка либо ещё что то((((

is_int? А?!
8. OrmaJever - 23 Октября, 2012 - 16:59:47 - перейти к сообщению
ridvik пишет:
я пробовал (is_numeric(is_int($_GET['id'])) не работает

ну... про is_int я ничего не говорил, так оно работать и не будет, а вот так запросто
9. ridvik - 23 Октября, 2012 - 18:27:27 - перейти к сообщению
OrmaJever , а оно мне будет только целочисленное значение выдавать?????
10. dubasua - 23 Октября, 2012 - 18:41:56 - перейти к сообщению
Ну ващето в любой передаваемой переменной (POST,GET) все типы строковые, нужно сначала перевести строку в число. Можно вот так еще
PHP:
скопировать код в буфер обмена
  1.  
  2. if(((int)$_GET['id'] * 1) == (int)$_GET['id'])
  3.   echo 'Go!';
  4.  
11. ridvik - 23 Октября, 2012 - 20:59:05 - перейти к сообщению
id=2. вот так вот почему то работает даже если сделать при любом значение кроме регулярки, но зато с регуляркой больше чем ид =1 не работает....
(Добавление)
и если даже id=0000000000000000001
12. dubasua - 23 Октября, 2012 - 22:03:20 - перейти к сообщению
ridvik пишет:
id=2. вот так вот почему то работает даже если сделать при любом значение кроме регулярки, но зато с регуляркой больше чем ид =1 не работает....
(Добавление)
и если даже id=0000000000000000001


Ну начнем с того что сам php язык НЕ строго-типизированный, а регуляркой ты можешь проверить только строку а не число. Вот и сделай сам выводы.
13. OrmaJever - 23 Октября, 2012 - 22:24:49 - перейти к сообщению
dubasua пишет:
if(((int)$_GET['id'] * 1) == (int)$_GET['id'])

о_О А в чём тут логика? Если число умноженое на 1 равно самому себе? Помоему любое число умноженое на 1 не изменяется
14. EuGen - 23 Октября, 2012 - 22:30:19 - перейти к сообщению
На самом деле из-за того, что данные в GPC-массивах всегда будут строками, is_int применять проблематично. Поэтому с применением приведения типов нужно несколько условий. is_numeric пропустит не только целое число, но и числа с точкой или отрицательным знаком (либо даже со знаком экспоненты).
В одно условие можно записать регулярным выражением - выше предлагалось, но почему-то не совсем точно.
Например, подойдет
PHP:
скопировать код в буфер обмена
  1. if(preg_match('/^[1-9][0-9]*$/', $_GET['id']))
  2. {
  3.    //...
  4. }
15. dubasua - 23 Октября, 2012 - 22:39:43 - перейти к сообщению
OrmaJever пишет:
dubasua пишет:
if(((int)$_GET['id'] * 1) == (int)$_GET['id'])

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


Если строковое значение перевести в число, что получим на выходе???

 

Powered by ExBB FM 1.0 RC1