1. PHP / Говнокод #2323

    +163.1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    $hash = $sql->Execute("INSERT INTO `x_client_info` 
    					VALUES(null, '".$cli['ip']."', '".$cli['fio']."', '".$cli['org_name']."', 
    					'".$cli['phone']."', '".$cli['email']."', '".$cli['icq']."', '".$cli['skype']."', 
    					'".$cli['passport']."', '".$cli['airline_order']."', '".$cli['train_order']."', '".$cli['car_order']."', '".$cli['hotel_order']."', 
    					'".$cli['cash']."', '".$cli['invoice']."', '0', 'w_proc', '0', '0', 
    					'".time()."', '".@date('d.m.Y H:i:s')."', '".guid()."')")
                          ->Assoc();

    по мне - так говнокод. Как от него избавиться - хз. Вечно бесило такое обилие кавычек

    Запостил: nolka4, 24 Декабря 2009

    Комментарии (28) RSS

    • Как как!? Использовать грамотный враппер БД )
      И кстати, а что будет если добавить в таблицу новое поле? ;)

      Я делаю так: создаю массив, где ключи - имена полей бд, а значения - данные. Ну а потом циклом генерю квери со всякими раздеваниями, аддслешами и пр ерундой. Имхо самый трушный подход
      Ответить
      • спасибо, хорошая идея, буду пробовать
        Ответить
    • Использовать prepared statements. PDO их поддерживает, и никакие говно-велики не нужны.
      Ответить
      • я люблю свои велосипеды ( = опыт). Если что то где то сломается - я очень быстро найду поломку. Велосипеды рулят, а вы дальше дрочите на фреймворки, кто написал кто то другой ;)
        Ответить
        • Поддерживаю велосипеды, но... на собственном опыте понял, что перед написанием своего велосипеда лучше детально изучить несколько чужих работ того же плана, особенно тех, что на слуху. А то потом бывает мучительно больно за непродуманные вещи, которые у других давно красиво исполнены, а у себя - нерасширяемая кривизна. Свой опыт бесценен, но чужой подсматривать тоже ой как полезно.
          Ответить
        • > Если что то где то сломается - я очень быстро найду поломку
          Очевидно, мальчику ещё не приходилось работать в команде.
          Ответить
        • Я не имел в виду фреймворки, [url=http://php.net/pdo]PDO[/url] - это стандартный модуль PHP5 для работы с БД. Пора бы знать.
          Ответить
    • фреймворки разные бывают. Мне в прошлом году разрекламировали джангу, я попробовал с ней работать, написал полтора сайта - плюнул и вернулся к родному пыху. Высокоуровневые фреймы - это зло, ибо если ты тупо следуешь концепции, заложенной во фрейм его разработчиками, у тебя, возможно, не будет проблем. Но не дай боже отступить - и тут же потребуется столько костылей, что в скором времени они обрастают в собственный мини-фреймворк поверх фреймворка ) Вот такая абракадабра.

      Ну вот... Теперь ругайте меня, что я ниче не понимаю в колбасных обрезках
      Ответить
      • Мне кажется, дело в том, что высокоуровневые фреймворки слишком специализированны. Вот тебе такая-то система регистрации пользователей, вот тебе такая-то обязательная структура базы и так далее. При таком подходе как раз и наблюдается то явление, что ты описал: строго по канонам лепить просто, шаг влево/вправо - вешалка. Может быть, просто фреймворки следует писать более низкого уровня, чтобы часть функционала разработчику приходилось-таки писать самому? Или просто разделять фреймворк на "фундамент", имеющий строго определённую планку уровня логики, и "надстройку", представляющую собой своего рода CMSку на базе "фундамента": не нравится CMSка - ты всегда волен её выкинуть (причём легко выкинуть) и, опираясь на базовый функционал фундамента (который намеренно делается не слишком высокоуровневым), слепить что-то своё. Что бы могло оказаться в таком "фундаменте"? Имхо, средства работы с ЧПУ, шаблонизатор, несколько низкоуровневых классов (абстракция от БД, кэширование...) да и хватит. Свистоперделки типа конкретной организации контента - это всё выше уровнем.
        Дискасс, а?
        Ответить
        • вот поэтому и получается, что с опытом у велосипедиста появляется сначала набор библиотек, а потом свой аналог фреймворка...

          свой код я стараюсь писать как можно понятнее, безо всяких выкрутасов, а так же хорошо комментирую, если вдруг кому то придется туда в дальнейшем лезть что то поправить
          Ответить
          • > сначала набор библиотек, а потом свой аналог фреймворка...
            Да-да-да... Появляется и почти не изменяется из проекта в проект - база-то одна. И хоть такой недофреймворк законченной поделкой не является, поскольку довольно низкоуровневый - автор, хорошо знакомый с его структурой, на его основе делает всё, что нужно.
            Ответить
      • никогда бы не вернулся с джанги на пхп, но пока работаю на пхп =\

        да там случались сложности, но не такие большие, мне их система шаблонов оч.нравится
        Ответить
        • Да, в их шаблонах есть прикольная штука - наследование. По моему, я видел какой-то костыль для смарти, позволяющий реализовать что-то похожее.
          Но кстати, в питоне проблема шаблонизатора стоит более явно, а вот пхп - сам шаблонизатор, и юзать поверх него еще что-то - имхо это хамство. Так что на пыхе у меня весь шаблонизатор - это массив $t, куда кидается все, что нужно вывести.

          Мне понравилась первая фраза "никогда бы не вернулся с джанги на пхп, но пока работаю на пхп =\". Она полна трагизма. Вы заключили договор с дьяволом писать сто лет только на пыхе? :)
          Ответить
          • скоро сессия и новый год, в общем поиски новой работы меня сейчас просто не прельщают =)
            Ответить
          • > а вот пхп - сам шаблонизатор, и юзать поверх него еще что-то - имхо это хамство
            Хамство ли нет ли... Но что меня больше всего достаёт, это сначала вёрстка макета в отдельной HTMLке, потом нарезка её на кусочки и рассовывание по уютненьким PHP-функциям. А с помощью того же Smarty мы расставляем няшные {$теги}, а всю эту нарезку и вывод движуха берёт на себя, мы ей только говорим, какой $тег на что заменять. Так вот и рвёшься между громоздкостью движка и удобством разработки, блин.
            Ответить
            • Поддерживаю.
              В идеале в самом php-коде количество html-данных должно стремиться к нулю.
              Вариант, когда php встраивается в html - не рассматриваю.
              Ответить
              • Твоё "в идеале" вернее истолковать как "согласно канонам разделения представления и бизнес-логики", и это тем уместнее, чем крупнее проект. А вот когда балансируешь на той грани, когда, вроде бы, юзать Smarty - это пока ещё стрелять из пушки по воробьям, а следовать классическому PHP+HTML уже муторно и трудоёмко... Я уж не говорю о случаях, когда приходится допиливать чей-нибудь старый сайт, особенно если он создавался в те бородатые времена, когда в PHP даже ООП толком-то и не было, а использование register_globals считалось само собой разумеющимся.
                Всё, я решил, каким будет мой следующий велосипед. Сильно урезанный аналог Смарти без лишнего блэкджека и шлюх, которые пригождаются раз в пятилетку.
                Ответить
        • Согласен. Поле Питона+Джанги похапе выглядит крайне уныло.
          Ответить
          • ниче не скажу насчет пхп, он действительно уныловат, но мне сишный синтаксис куда роднее, чем питоновский. Это, пожалуй, один из основных моментов.
            У меня сложилось такое впечатление, что питон сделан для того, чтобы дисциплинировать быдлокодеров, которые не умеют грамотно форматировать свой код. Или как иначе понимать определение блоков по количеству отступов?
            В процессе отладки часто бывает нужно загнать часть кода в условие или вообще вынести в отдельную функцию. Если юзаешь Ultraedit, или другой редактор, поддерживающий блочное выделение - еще куда ни шло, но если приходится перебивать инденты построчно - это смерть!!!

            Что в пхп реально херово - это массивы. Во-первых, массив и хеш ничем не отличаются - это, пожалуй, самая большая беда пхп. Во-вторых, синтаксис этих самых массивов/хэшей просто убог, начиная с объявления "array()" и заканчивая разделителями ключей-значений "=>"! Давно бы уже сделали как во всех цивилизованных языках: ['val1','val2',...] и {key1:'val1', key2:'val2',...} !
            Еще в пхп добивает конкатенация строк через точку. Какой дебил это придумал? Опять же, во всем цивильном мире точка - разделение имени объекта и свойства, а конкатенация - плюсик. Ну и последнее что бесит - доллар в начале переменных, но с этим уже ниче не поделаешь.

            А что касается функционала - с точки зрения написания веб-приложений, пхп достаточно развит для удовлетворения широкого спектра запросов. А с другой точки зрения его никто и не оценивает )
            Ответить
            • > как иначе понимать определение блоков по количеству отступов?
              В рот мне ноги... ни разу не писал на питоне-кун

              Что касаеся остального... Это уже сказано-пересказано, холиварено-перехоливарено и, конечно же, справедливо =)
              Ответить
            • В пхп переменная содержащая строку из цифр раccматривается как число, если она в математическом выражении участвует. Так вот надо и определять, когда ты конкатенацию делаешь, а когда математическое выражение вычисляешь.
              Ответить
              • чорт, а ведь правда
                echo '123'+'456';
                вывел мне 579...

                Ушол пить йат )
                Ответить
              • В JavaScript такая проблема решается по-деревянному, но по-своему изящно. Хотите быть уверенными, что значения в переменных будут восприняты как строки и конкатенируются, а не сложатся как числа - пишите '' + a + b вместо a + b.
                Ответить
    • nolka4 , набери в яндексе "экранировка в php" , данный скрипт более правильный и этичный чем вы привыкли писать всё в куче " ", хоть и смотреться странно
      Ответить
      • вообще в $cli уже все значения экранированы, поэтому в коде нет mysql_real_escape_string. Кроме того, я дописал враппер, как соватовал товарищ Yozheg в самом первом каменте. + к тому еще написал функцию фильтрации передаваемых данных. Так сказать защита от дурака. Ведь если в массиве передать значение для несуществующего поля, то плохо будет, а тут это уже предусмотрено ;)
        Ответить

    Добавить комментарий