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

    +149

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    <?php
    while($menu = mysql_fetch_assoc($q))
    {
    	?>
    	<option value="<?=$menu['id']?>"<?=($id === $menu['id']) ? ' selected="selected"' : ''?>><?=$menu['title']?></option>
    	<?php
    }
    ?>

    Адовейший пиздец наговнокодил сегодня. Ну не люблю я HTML-теги в PHP писать, о шаблонизаторах никогда не слышал

    Запостил: 3Jlou_OguHo4ka, 30 Июня 2013

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

    • Ну так PHP сам по себе вполне пригоден в качестве шаблонизатора. Правда есть и недостаток - нет автоматической экранировки подставляемых значений, и х.з. как ее прикрутить. Да и <?php длинновато, короткие теги не поощряются, а ASP теги, емнип, обычно отключены.
      Ответить
      • ASP-теги у меня включены, но мне кажется юзать их !== Ъ
        Ответить
      • Я подумал о том, что всякий программизм типа ифов лучше вынести в хелперы. Т. е. написать так:
        function helper($id, $menu)
          {
            return ($id === $menu['id']) ? ' selected="selected"' : '';
          }
        А в шаблоне так:
        <option value="<?=$menu['id']?>"<?=helper($id, $menu)?>><?=$menu['title']?></option>
        Или вообще все атрибуты собирать в хелпере. Так и проблему экранировки решить можно.
        Ответить
        • Ну не все и не всегда можно вынести в хелперы. Тот же цикл по коллекции или проверку коллекции на пустоту и вывод ее заменителя, имхо, в хелпер выносить не стоит.
          Ответить
    • По моему, типичный похапе код, средний проект состоит из такого чуть менее чем полностью.
      Ответить
      • Ваш комментарий настолько толстый, что не поместился на моем 28-дюймовом дисплее, а жир потек прямо из корпуса.
        Ответить
      • Типичный второго рода. Типичный первого рода выводил бы всё через echo.
        Ответить
    • <?php
      while($menu = mysql_fetch_assoc($q))
      {
        echo '<option value="'.$menu['id'].'"'.(($id === $menu['id']) ? ' selected="selected"' : '').'>'.$menu['title'].'</option>';
      }
      ?>
      Так не лучше? Или это выглядит слишком по-программерски?
      Ответить
      • Это все выглядит замечательно, честное слово. Раньше так и писал. Потом упоролся по выносу HTML-кода за пределы PHP.
        Ответить
        • Можно и не выносить. Можно вообще не писать HTML:
          $tugoment = new DOMDocument();
          while($menu = mysql_fetch_assoc($q))
            {
              $element = $tugoment->createElement('option', $menu['title']);
              $element->setAttribute('value', $menu['id']);
              if ($id === $menu['id']) $element->setAttribute('selected', 'selected');
              $tugoment->appendChild($element);
            }
          echo $tugoment->saveXML();
          Ответить
    • а не проще ли всё это сначало в массив, а затем одной строчкой через implode?
      Ответить
    • А выше наверно еще и SQL код, с неэкранированной вставкой переменных, и комментариями на русском языке. Все по Попову (сами думайте какому).
      Ответить
      • Нет, слава аллаху, до видеоуроков я не докатился, а в плане фильтрации - в этом плане я параноик, чекаю $_SERVER['REMOTE_ADDR'] два раза - через explode(".") и регуляркой
        Ответить
        • Лолшто? Код в студию.
          Ответить
        • > через explode(".") и регуляркой
          ipv6 на вас нет.
          Ответить
          • Использую register_globals on
            Ответить
            • Сорри, я пост поправил, потер свой первый вопрос ;)

              >> А $_GET[...] и $_POST[...] тоже чекаете?
              > Использую register_globals on
              А чем оно помогает в проверке данных, пришедших от юзера?
              Ответить
            • > Использую register_globals on

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


              однажды меня попросили перенести пхпшный сайт с одного хостинга на другой. скопировал файлы и БД, один к одному, проверил - не работает.
              как вы наверное догадались, дело было как раз в глобалсах, но пришлось потратить время на выяснение этого факта. обматерив разработчика, сделал на скорую руку софверную эмуляцию глобалсов (с помощью extract).
              так я обрел сакральное знание из мира пхп, что php.ini может сломать сайт.
              а также открыл для себя, что тот сайт - чуть менее, чем полностью состоял из отборнейшего говна с мегаswitchем и инъекциями - кстати, наиболее смешные куски попали сюда.
              Ответить
              • А еще php.ini может лишить говносайт призрачной безопасности, если выключить maagic_quotes...
                Ответить
                • Есть еще более тонкий вброс включить magic_quotes_runtime.
                  Ответить
    • показать все, что скрыто
      * g o a t s e x * g o a t s e x * g o a t s e x *
      g                                               g  
      o /     \             \            /    \       o
      a|       |             \          |      |      a
      t|       `.             |         |       :     t
      s`        |             |        \|       |     s
      e \       | /       /  \\\   --__ \\       :    e
      x  \      \/   _--~~          ~--__| \     |    x  
      *   \      \_-~                    ~-_\    |    *
      g    \_     \        _.--------.______\|   |    g
      o      \     \______// _ ___ _ (_(__>  \   |    o
      a       \   .  C ___)  ______ (_(____>  |  /    a
      t       /\ |   C ____)/      \ (_____>  |_/     t
      s      / /\|   C_____)       |  (___>   /  \    s
      e     |   (   _C_____)\______/  // _/ /     \   e
      x     |    \  |__   \\_________// (__/       |  x
      *    | \    \____)   `----   --'             |  *
      g    |  \_          ___\       /_          _/ | g
      o   |              /    |     |  \            | o
      a   |             |    /       \  \           | a
      t   |          / /    |         |  \           |t
      s   |         / /      \__/\___/    |          |s
      e  |           /        |    |       |         |e
      x  |          |         |    |       |         |x
      * g o a t s e x * g o a t s e x * g o a t s e x *
      Ответить

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