anonymous@RULINUX.NET~# Last login: 2024-11-13 01:08:02
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

[Индусокод]Оригинальный способ валидации ввода.

]
$program = $_GET['W'];  //The program to generate instructions for.
                            //Valid options are: photoshop, illustrator, publisher,
                            //fireworks, corel, freehand, wordperfect, word,
                            //OpenOffice, paint_shop_pro
switch( $program ){     //Validate input. Default to photoshop
        case "photoshop":
        case "illustrator":
        case "publisher":
        case "fireworks":
        case "corel":
        case "freehand":
        case "wordperfect":
        case "word":
        case "OpenOffice":
        case "paint_shop_pro":
        case "mailing_list":
            break;
        default:
            $program = "photoshop";
    }
 

Tux-oid(*) (2012-08-30 18:54:54)
Отредактировано Tux-oid по причине "не указана"
Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120604 Firefox/13.0 SeaMonkey/2.10

[Ответить на это сообщение]
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

Не вижу особых причин для возмущения. Конечно лучше было бы где-нить в конфиге хеш инициализировать, но так-то чем плохо?

anonymous(*)(2012-08-30 19:02:58)

avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

да ничем разве что это короче

php
if (!in_array($program, array(<весь этот список)))>)) {
  $program = "photoshop";
}
 
Или я не догнал юмора?)))

Ax-Xa-Xa(*)(2012-08-30 19:42:04)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.81 Safari/537.1
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

возмутительно, что это не валидация на самом деле. При опечатке в ключевом слове надо выпасть в сегфолт, а не делать что-то для случая, который пользователем указан не был.

bugmaker(*)(2012-08-30 19:44:43)

Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

]
SELECT
                    shipping_cost,
                    shipping_paid,
                    shipping_type,
                    shipping_type_old,
                    date_created,
                    shipping_fee,
                    handling_fee,
                    shipping_fee_paid,
                    handling_fee_paid,
                    category_id,
                    delivery_date,
                    (SELECT SUM(shipping_paid) FROM orders_shipping_history WHERE order_id = $1) AS shipping_paid_total,
                    (SELECT SUM(shipping_fee) FROM orders_shipping_history WHERE order_id = $1) AS shipping_fee_total,
                    (SELECT SUM(handling_fee) FROM orders_shipping_history WHERE order_id = $1) AS handling_fee_total,
                    (SELECT SUM(shipping_fee_paid) FROM orders_shipping_history WHERE order_id = $1) AS shipping_fee_paid_total,
                    (SELECT SUM(handling_fee_paid) FROM orders_shipping_history WHERE order_id = $1) AS handling_fee_paid_total
                FROM orders_shipping_history
                WHERE order_id = $1 ORDER BY id ASC;
 

Tux-oid(*)(2013-01-09 14:51:02)
Отредактировано Tux-oid по причине "не указана"
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Firefox/17.0 SeaMonkey/2.14
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

И чо не так?

anonymous(*)(2013-01-09 15:17:34)

avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

> И чо не так?
Наверно, что на каждую итоговую запись в результате делается + 5 запросов. Из той же таблицы к тому же. Нее?)))

Ой бля, да там вообще "тяжёлый случай")))

Ax-Xa-Xa(*)(2013-01-09 15:25:21)
Отредактировано Ax-Xa-Xa по причине "не указана"
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

> Наверно, что на каждую итоговую запись в результате делается + 5 запросов.

Ну и что с того? SQL для того и существует, чтобы вытягивать данные, которые нужны.

> Из той же таблицы к тому же.

Это же хорошо, что данные берутся из кеша.

> Нее?)))

Что ты блеешь? БД вытягивает в кеш несколько строк единственного заказа, отфильтрованные по ключу ИД, проделывает над ними указанные манипуляции и выплёвывает результат. Там нечему тормозить.

anonymous(*)(2013-01-09 15:51:54)

avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

> SQL для того и существует, чтобы вытягивать данные, которые нужны.
Да существует для этого))) Но одни и теже данные можно и за секунду вытащить, а можно и за час, а если очень постараться, то и за три))) Но в конкретном случае дело даже не в этом)))

>> Нее?)))
> Что ты блеешь?


Ладно обещал не гнобить ананимуса))) Еще раз внимательно посмотри на код, подумай, покури, подумай, еще раз посмотри)))

Там даже SQL знать не надо что бы понять всё глубину мудрости индийских мудрецов)))

Ax-Xa-Xa(*)(2013-01-09 15:56:06)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

>> Из той же таблицы к тому же.
> Это же хорошо, что данные берутся из кеша.


Это хорошо пока данные помещаются в кэш))) Но когда БД разрастается, и неожиданно, а от таких приколов она проседает неожиданно, быдлокодера написавшего такой код начинают гонять по офису сцаными тряпками.)))

Ax-Xa-Xa(*)(2013-01-09 16:06:56)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

>БД вытягивает в кеш несколько строк единственного заказа, отфильтрованные по ключу ИД, проделывает над ними указанные манипуляции и выплёвывает результат.
Учитывая, что с 99% вероятностью дальше будет цикл по результату данного запроса, не очень понятно, почему бы не вынести подсчёт сумм в этот самый цикл. Хотя да, если полагаться на кэш, то разницы особой не будет, это уже вопрос вкуса - делать вычисления на стороне БД или на стороне приложения.

Алсо, про mysql пишут что-то такое:

The cache is not used for queries of the following types:

Queries that are a subquery of an outer query
...


Не знаю, насколько это работает в данном случае (тут надо смотреть в EXPLAIN-ы и покрутить это под нагрузкой), но какие-то сомнения на тему кэша БД даёт. Лично я бы, для надёжности, посчитал всё в приложении.

SystemV(*)(2013-01-09 16:13:11)

Emacs-w3m/1.4.508 w3m/0.5.3
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

> Учитывая, что с 99% вероятностью дальше будет цикл по результату данного запроса, не очень понятно, почему бы не вынести подсчёт сумм в этот самый цикл.


Систем, блэ, каких сум?))) Посмотри еще раз внимательно, что там суммируется и откуда и с каким условие)))

Ax-Xa-Xa(*)(2013-01-09 16:16:57)
Отредактировано Ax-Xa-Xa по причине "не указана"
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

> про mysql пишут что-то такое

Ой да ладно, где ты видишь кретинов, которые бы пользовались MySQL в XXIм веке??

anonymous(*)(2013-01-09 16:18:01)

avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

>Систем, блэ, каких сум?))) Посмотри еще раз внимательно, что там суммируется и откуда и с каким условие)))
Ну вот смотрю. Делается запрос для вывода записей из orders_shipping_history для определённого id. Для каждой строки считается общая сумма некоторых колонок для этой же выборки. То есть автор хотел вывести все записи для данного id и суммы некоторых колонок к ним, разве не так?

SystemV(*)(2013-01-09 16:20:36)

Emacs-w3m/1.4.508 w3m/0.5.3
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

Тащите дефибриллятор, у поцыэнта остановился мозг!

anonymous(*)(2013-01-09 16:20:51)

avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

>Ой да ладно, где ты видишь кретинов, которые бы пользовались MySQL в XXIм веке??
Весь интернет забит мускулем, между прочим. Многие CMS даже другого не умеют.

SystemV(*)(2013-01-09 16:22:38)

Emacs-w3m/1.4.508 w3m/0.5.3
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

>> про mysql пишут что-то такое
> Ой да ладно, где ты видишь кретинов, которые бы пользовались MySQL в XXIм веке??


Да бля, ну всё, пора тебя сажать в виману и отправлять к духовным братьям в Индию.

Ax-Xa-Xa(*)(2013-01-09 16:23:38)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

>> Систем, блэ, каких сум?)))
> То есть автор хотел вывести все записи для данного id и суммы некоторых колонок к ним, разве не так?


Тебя не настораживает, что для выборки основной записи и сум используется одно и тоже условие "FROM orders_shipping_history WHERE order_id = $1"?

Ax-Xa-Xa(*)(2013-01-09 16:26:03)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

>Тебя не настораживает, что для выборки основной записи и сум используется одно и тоже условие "FROM orders_shipping_history WHERE order_id = $1"?
Нет, это ведь как раз то, что хотел автор.

Вот у нас есть таблица:


id order_id shipping_paid other_shit
 1        1            10      '...'
 2        1            20      '...'
 3        1            30      '...'
 


Автор на выходе хочет получить что-то такое:


id order_id shipping_paid shipping_paid_total
 1        1            10                  60
 2        1            20                  60
 3        1            30                  60
 


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

То есть то же самое он бы сделал, послав простой SELECT без подзапросов, и пройдя по ним в цикле, считая суммарный shipping_paid. Автор же переложил задачу подсчёта на БД, считая эту сумму в каждой строке. Если верить, что БД умная, и сначала вытащит все нужные записи, а потом где-то в памяти подсчитает SUM-ы, то всё ок. Если же не верить, то, конечно, так делать не стоит.

SystemV(*)(2013-01-09 16:32:17)

Emacs-w3m/1.4.508 w3m/0.5.3
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

> Весь интернет забит мускулем, между прочим. Многие CMS даже другого не умеют.

Это нищеброды понаделали когда-то в мрачном прошлом, теперь оно медленно умирает.

anonymous(*)(2013-01-09 16:33:16)

avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

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

По виду запроса, я бы предположил, что оно скорее отдаётся в тесмплейтный движок для формирования инвойса или какого-нибудь отчёта..

anonymous(*)(2013-01-09 16:35:03)

avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

>Это нищеброды понаделали когда-то в мрачном прошлом, теперь оно медленно умирает.
Теперь в моде кроссплатформенные движки, которые могут и мускуль, и постгрес, и даже sqlite. Чтоб с гарантией у всех заработало, пусть и не так хорошо. Вот в такой штуке как раз и нужно предполагать, что БД глупая, и вообще работает абы как, чтобы потом клиенты не ныли, что на их любимом хостинге оно плохо работает. Ну или писать разный код для разных БД, что не всегда рационально.

Опять же, от проекта зависит. Если проект большой и пишется для конкретной задачи, то можно и предположить, что будет нормальная БД. Если же проект пишется "для всех", чтобы кто-то мог его купить и установить себе, стоит заранее прикинуть вариант с запуском его на убогой базе.

SystemV(*)(2013-01-09 16:37:28)

Emacs-w3m/1.4.508 w3m/0.5.3
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

>По виду запроса, я бы предположил, что оно скорее отдаётся в тесмплейтный движок для формирования инвойса или какого-нибудь отчёта..
Ну так те же яйца выходят. Всё равно потом приложение (темплейтный движок) циклом проходит по результату запроса, и рисует какую-нибудь табличку по строкам. Думаю, почти везде есть возможность на ходу ещё и сумму подсчитать, и это будет очень быстро. Если же посчитать дальше возможности нет, то это какие-то direct-from-database движки уже, маргинальщина.

SystemV(*)(2013-01-09 16:39:58)

Emacs-w3m/1.4.508 w3m/0.5.3
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

> Автор же переложил задачу подсчёта на БД, считая эту сумму в каждой строке. Если верить, что БД умная


Ну если БД умная, то может и прокатит первые 5-6 месяцев продакшена )))

Нечто подобное не так давно в практике было. Ну в принципе нет худа без добра, три человека за двое суток от рефакторили свой код))) Потом правдо, когда через месяц таже херня повторилась, чуть не утопили в поилке четвертого, который написал "быстрый и лаконичный SQL запрос")))

Ax-Xa-Xa(*)(2013-01-09 16:42:31)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

Вот видишь как много должен был рассказать Тюксоид о том, почему он считает приведённый запрос индусокодом.

anonymous(*)(2013-01-09 16:45:27)

avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

>Ну если БД умная, то может и прокатит первые 5-6 месяцев продакшена )))
Я видел людей, которые любят вообще всю логику в БД реализовать. Триггеры какие-то, view и функции, а на выходе приложение почти ничего не делает, кроме дорисовки мелочей. Наверное такой подход тоже нормален, но тут нужно заранее знать, что за БД у тебя будет (лучше даже знать параметры железа), и иметь в штате серьёзного специалиста по работе с этой БД, который и настройки оптимизирует, и запросы без EXPLAIN-а сходу распознает. Такие люди, имхо, редкость, так как на всех этих PL/SQL что-то писать, имхо, тяжко и муторно.

Один мой знакомый примерно таким методом клепает формочки на оракле для некоторых госструктур, вроде справляются.

SystemV(*)(2013-01-09 16:49:55)

Emacs-w3m/1.4.508 w3m/0.5.3
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

> Ну так те же яйца выходят. Всё равно потом приложение (темплейтный движок) циклом проходит по результату запроса, и рисует какую-нибудь табличку по строкам. Думаю, почти везде есть возможность на ходу ещё и сумму подсчитать, и это будет очень быстро. Если же посчитать дальше возможности нет, то это какие-то direct-from-database движки уже, маргинальщина.

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

anonymous(*)(2013-01-09 16:50:40)

avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

> Вот видишь как много должен был рассказать Тюксоид о том, почему он считает приведённый запрос индусокодом.

А подумать самому прежде чем писать:

anonymous> И чо не так?
anonymous> Что ты блеешь? БД вытягивает ...

Мозга своего не хватает?

Ax-Xa-Xa(*)(2013-01-09 16:51:53)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

> Один мой знакомый примерно таким методом клепает формочки на оракле для некоторых госструктур, вроде справляются.


Ага, а потом когда тебя приглашают оптимизировать подобный код который не успевает за ночь сформировать отчеты, а у тебя он неожиданно начинает всё это делать за 5-10 минут. Тебя обвиняют что ты их пытаешься наебать и развести на деньги.

Приходится советовать нанять еще одного спеца, что бы он подтвердил, что первый спец действительно оптимизировал всё правильно)))

Кстати с Ораклом это и было)))

Ax-Xa-Xa(*)(2013-01-09 16:58:22)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

В сегфолт выпадать никогда не надо

anonymous(*)(2013-01-09 17:43:03)

Mozilla/5.0 (X11; FreeBSD amd64; rv:13.0) Gecko/20100101 Firefox/13.0.1
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

> Я видел людей, которые любят вообще всю логику в БД реализовать. Триггеры какие-то, view и функции, а на выходе приложение почти ничего не делает, кроме дорисовки мелочей.

Я такую шнягу сделал в конце 90х. Самописный ISAPI бинарник, аналог mod_owa, держит пул коннектов в Oracle и через них роутит ХТТП-запросы в вызовы соответствующих процедур в базе.

Все вызовы возвращают клиенту ХМЛ с кодом и описанием результата выполнения операции, а так же блок данных изменившихся с момента последнего обращения клиента (всех категорий данных, к которым обращался клиент - для этого запоминается что ему было отгружено: например если сервер знает, что клиент запрашивал категорию "яблоки" с условием "красные" и с тех пор в базу кем-то было добавлено одно красное яблоко, а другое было удалено, то при первом же обращении к серверу на клиента будет передано две дельта-записи, если у него есть права видеть оба эти яблока).

Клиент - бровсер. На клиенте средствами ХМЛ сождан локальный кеш данных, синхронизируемый с БД посредством вышеописанного механизма. Отображение страничек делается прикладыванием стайлшита к этому ХМЛ-дереву.

Плюсы: Балансировка нагрузки - запросы процессятся несколькими серверами (по числу коннекшенов в пуле) на стороне БД. Масштабируемость. Минимальный трафик между БД и приложением (обработка данных на стороне БД), а у нас сеть тогда тормозная была. Кроссплатформенность серверной части: работало и под апачем с родным mod_owa и под ИИСом с моим модулем (я впоследствии поднимал это под линуксом без проблем). Ну и в нашей локальной реальности было бы проще найти специалиста по PL/SQL чем по какому-нибудь пыху.

Минусы: высокая латентность - с современными вычислительными мощами я бы реализовывал функциональную часть на стороне сервера приложений, с кешированием данных. Некроссплатформенность клиента: я тогда не нашёл как прикрутить весь этот аякс к мозилле, поэтому приложение могло работать только с ИИСом.

anonymous(*)(2013-01-09 17:43:41)

avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

Ну и зачем для этого использовать вложенные запросы?

З.Ы. БД - PostgreSQL. Проект относительно высоконагруженный.

Tux-oid(*)(2013-01-09 17:53:57)

Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Firefox/17.0 SeaMonkey/2.14
avatar
Скрыть

Re:[Индусокод]Оригинальный способ валидации ввода.

> Ну и зачем для этого использовать вложенные запросы?

Странно, мы уже задолбались угадывать, что это за запрос и для чего он такой. Это же ты разместил тут этот запрос, вот и рссказывай почему в твоём случае они оказались неоптимальны и какое увеличение производятельности ты получил изменив данный запрос.

anonymous(*)(2013-01-09 17:58:52)

Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!