kurkuma 08.03.2012 15:49 mind

Начал ковырять Python и сразу наткнулся на первую неприятную штуку. При конвертировании string в integer в PHP он просто выкидывал все нецифровые символы, то есть строка "1a2b3c" преобразуется в число 123. Очень удобно, кстати, применять такие штуки вместо всяких ебанутых проверок:
$id = (int) $_GET['id']; и все, например, а не втыкать какой-нибудь регексп для проверки (про is_numeric знаю, но он не только на integer'ы true возвращает).
А пистон так не может — это и огорчает, так что повременю пока с переходом на него.

1. d1ffuz0r 08.03.2012 15:50

ну и говноедство

2. kurkumad1ffuz0r /1 08.03.2012 15:51 mind

насчет?

3. d1ffuz0rkurkuma /2 08.03.2012 15:51

пихать данные такого вида "1a2b3c" в запрос

4. kurkumad1ffuz0r /3 08.03.2012 15:53 mind

я такие данные не буду никуда пихать, но это же вэб. какое-нибудь хуйло может взять и в строке адреса поменять index.php?id=14 на index.php?id=1hh21d7d8273 или вообще кавычку туда засунуть

5. d1ffuz0rkurkuma /4 08.03.2012 15:53

ну и посылай его нахуй с такими данными, пусть правильно вводит

6. kurkumad1ffuz0r /5 08.03.2012 15:55 mind

делать мне больше нехуй, дрочить регекспом каждый параметр? это во-первых тормоз, во-вторых не нужно. из $_GET['id'] выдернутся чисто числа и если id есть в базе — вернется запрос нормальный и юзер угаманится, если нет — пёрнет про 404 и юзер угаманится

7. d1ffuz0rkurkuma /6 08.03.2012 15:58

не проще проверять на тип данных ещё на стороне клиента, чтобы не делать личшний раз запрос к серверу?

8. kurkumad1ffuz0r /7 08.03.2012 16:00 mind

проверять тип данных на стороне клиента получится только через javascript, который без особых напрягов можно отключить или подделать. в вебе ВООБЩЕ НЕЛЬЗЯ ДОВЕРЯТЬ КЛИЕНТУ, ты еще и экранировать кавычки предложи на стороне клиента, лол

9. d1ffuz0rkurkuma /6 08.03.2012 16:01

да и зачем дрочить параметры, обычно во фреймворках идут средства валидации

10. d1ffuz0rkurkuma /8 08.03.2012 16:01

в дополнение к серверной валидации

11. kurkumad1ffuz0r /9 08.03.2012 16:03 mind

у меня в работе фреймворки не используются. я поддерживаю кучу разной сложности сайтов, большинство из которых созданы еще в 99-2000 годах, допиливаю, переделываю их — фреймворк тут воткнуть некуда просто, да он и не нужен. а
$id = (int) $_GET['id'];
например штука простая, быстрая и ненапрягающая, в отличии от например проверки по регулярному выражению

12. kurkumad1ffuz0r /10 08.03.2012 16:04 mind

да и javascript ничего не сможет сделать, если клиент тупо в строке адреса заменит index.php?id=14 на index.php?id=1хуй4.

13. d1ffuz0rkurkuma /11 08.03.2012 16:04

ну должны быть и отдельные либы валидации же

14. d1ffuz0rkurkuma /12 08.03.2012 16:05

большинство пользователей и не задумываются что там у них в строке, главное чтобы КНОПОЧКА работала

15. kurkumad1ffuz0r /13 08.03.2012 16:05 mind

зачем мне их тянуть, блять, если все решается элементарно, быстро и наглядно в пару строк на plain пыхе? зачем тащить какую-нибудь очередную либу с метр весом, с кучей всякой ненужной хуйни, для того, чтобы не пустить в $id что-то кроме чисел?

16. kurkumad1ffuz0r /14 08.03.2012 16:06 mind

в кнопочках у меня всё ок, все валидным отдается, но никто не мешает пользователю, например, через firebug поменять html-код

17. d1ffuz0rkurkuma /16 08.03.2012 16:09

ну а питон здесь причём, не cgi скрипты же писать будешь, там на уровне роутов все эти проблемы решаются

18. d1ffuz0rd1ffuz0r /17 08.03.2012 16:11

например веркцойг
>>Rule('/news/<int(min=2000, max=2099):year>/<int(min=1, max=12):month>', endpoint='news_index'),
и он примет только числа да и ещё и проверит чтобы не выходили за пороги возможных значений

19. d1ffuz0rd1ffuz0r /18 08.03.2012 16:13

а спецсиволы и буквы пошлёт, так что ИТТ ПЫХОПРОБЛЕМЫ

20. kurkumad1ffuz0r /17 08.03.2012 16:14 mind

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

21. kurkumad1ffuz0r /18 08.03.2012 16:15 mind

ладно, поковыряю еще питон и жагну, потом уже сделаю выводы

22. kurkumad1ffuz0r /19 08.03.2012 16:16 mind

в пыховских фреймворках тоже роуты есть, я же делал сравнение в plain языках

23. 238328 08.03.2012 18:10 1425145538133122954049241

какое-то мудацкое преимущество, ибо хер проссышь, что идёт внутрь, а еще крайне небезопасно. МЕНЯЙ СОЗНАНИЕ, ЭТО НЕ НЕДОСТАТОК

24. 238328 08.03.2012 18:25

>>> s = "1a2b3c"
>>> print ''.join(c for c in s if c.isdigit())
123

>>> print s.lower().translate(None, ''.join([chr(c) for c in range(ord('a'), ord('z')+1)]))
123

>>> re.sub(r'\D*', '', s)
'123'

25. 238328 08.03.2012 18:26 1425145538133122954049241

алсо, питон не нужен, рор фтв

Do you really want to delete ?