1. Лучший говнокод

    В номинации:
    За время:
  2. C# / Говнокод #12892

    +100

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    int i = 0;
    foreach (SomeType item in someCollection)
    {
        if (i > 0) break;
    
        // ... обрабатываем item
    }

    Берём первый элемент коллекции и обрабатываем...

    kore_sar, 15 Апреля 2013

    Комментарии (18)
  3. PHP / Говнокод #12549

    +100

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    <?php
    /*
    Все очень просто. Создаем файл.
    Например login.php (что бы никто не догадался=) )
    И записываем в него несколько функций
    */
    function echoJavaScript($str)
    {
     echo " <script type=\"text/javascript\">
            <!--
            window.alert(\"$str\");
            //-->
            </script>";
    }
    function JavaScript_href()
    {
    echo " <script type=\"text/javascript\">
          <!--
          location.href = '/';
          //-->
          </script>";
    }
    ?>
    
    
    <?php
    /*Создаем еще один файл, где эти функции мы будем вызывать
     Ну, например, у вас имеются на сайте скрипты,
     доступные только зарегистрированным пользователям
     Получив отрицательный результат проверки юзера,
     Вы вызываете эти функции, не забыл, естественно,
     предварительно подключить нужный файл
    */
    include("login.php");
    #Вначале популярно объясняем что к чему
    echoJavaScript('Вы не имеете прав доступа к этой странице.');
    #А потом перенаправляем на главную страницу
    JavaScript_href();
    
    ?>

    Прячем JavaScript от пользователя.

    superfood, 07 Февраля 2013

    Комментарии (46)
  4. Куча / Говнокод #12042

    +100

    1. 1
    2. 2
    3. 3
    4. 4
    <form action="/cgi-bin/repare.mpl" method="post" enctype="multipart/form-data" class="frm">
    	<input type="hidden" name="sql" value="UPDATE  parcels p, parcels_doc d SET p.state = 'transporter_store' WHERE  d.doctype = 'confirm.L'  AND d.docid IN ($SORD)  AND p.good  IN ($ter)  AND d.docitem = p.good  AND p.state <> 'transporter_store'  AND d.parcel = p.id">
    	<input type="submit" class="butt" name="main_ok" value="Исправить">
    </form>

    Нашли тут в боевом проекте шедевральную SQL Injection "by design".

    aml, 01 Ноября 2012

    Комментарии (29)
  5. Pascal / Говнокод #11824

    +100

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    procedure TDetailForm.GridPanel1Click(Sender: TObject);
    var
      i: Integer;
      s: String;
    begin
      //set title and subtitle
      if Pos('Item', TControl(Sender).Name) > 0 then begin
        if Sender.ClassName = 'TImage' then begin
          i := Length(TControl(Sender).Name) - Length('ItemImage') - 1;
          s := Copy(TControl(Sender).Name, Length(TControl(Sender).Name) - i, Length(TControl(Sender).Name));
          ItemTitle.Caption := TLabel(DetailForm.FindComponent('ItemTitle' + s)).Caption;
          ItemSubtitle.Caption := TLabel(DetailForm.FindComponent('ItemSubTitle' + s)).Caption;
        end else if Pos('ItemSubTitle', TControl(Sender).Name) > 0 then begin
          ItemSubtitle.Caption := TLabel(Sender).Caption;
          i := Length(TControl(Sender).Name) - Length('ItemSubTitle') - 1;
          s := Copy(TControl(Sender).Name, Length(TControl(Sender).Name) - i, Length(TControl(Sender).Name));
          ItemTitle.Caption := TLabel(DetailForm.FindComponent('ItemTitle' + s)).Caption;
        end else if Pos('ItemDescription', TControl(Sender).Name) > 0 then begin
          i := Length(TControl(Sender).Name) - Length('ItemDescription') - 1;
          s := Copy(TControl(Sender).Name, Length(TControl(Sender).Name) - i, Length(TControl(Sender).Name));
          ItemTitle.Caption := TLabel(DetailForm.FindComponent('ItemTitle' + s)).Caption;
          ItemSubtitle.Caption := TLabel(DetailForm.FindComponent('ItemSubTitle' + s)).Caption;
        end else begin
          ItemTitle.Caption := TLabel(Sender).Caption;
          i := Length(TControl(Sender).Name) - Length('ItemTitle') - 1;
          s := Copy(TControl(Sender).Name, Length(TControl(Sender).Name) - i, Length(TControl(Sender).Name));
          ItemSubTitle.Caption := TLabel(DetailForm.FindComponent('ItemSubTitle' + s)).Caption;
        end;
      end;
    end;

    Код из шаблона New Metropolis UI Application в новом Delphi XE3. Рефлексия так и прет.

    kipar, 23 Сентября 2012

    Комментарии (45)
  6. Java / Говнокод #11481

    +100

    1. 1
    2. 2
    3. 3
    synchronized(new Object()){
    ...
    }

    http://stackoverflow.com/questions/9840959/how-to-judge-which-object-to-be-synchronized-in-java-thread

    3.14159265, 27 Июля 2012

    Комментарии (16)
  7. Pascal / Говнокод #10316

    +100

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    function Tf_MainFrame.DateToText(d: TDate; tp: integer): string;
    var s: string;
        g: integer;
    begin
      if DateToStr(d) = '00.00.0000' then
      begin
        result := '';
      end else begin
      case tp of
        2:begin
            s := ''; DateTimeToString(s,'dd',d);
            result := s;
            DateTimeToString(s,'mm',d);
            g := StrToInt(s);
            DateTimeToString(s,'yyyy',d);
            case g of
                1:  begin result := result + ' января ' + s; end;
                2:  begin result := result + ' февраля ' + s; end;
                3:  begin result := result + ' марта ' + s; end;
                4:  begin result := result + ' апреля ' + s; end;
                5:  begin result := result + ' майя ' + s; end;
                6:  begin result := result + ' июня ' + s; end;
                7:  begin result := result + ' июля ' + s; end;
                8:  begin result := result + ' августа ' + s; end;
                9:  begin result := result + ' сентября ' + s; end;
                10: begin result := result + ' октября ' + s; end;
                11: begin result := result + ' ноября ' + s; end;
                12: begin result := result + ' декабря ' + s; end;
            end;
          end
        else begin
           result := DateToStr(d);
        end;
      end;
      end;
    end;

    Календарь ацтеков, месяц майя:)

    Nilud, 18 Мая 2012

    Комментарии (24)
  8. PHP / Говнокод #10061

    +100

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    $sql = "SELECT (SELECT Name FROM dbo.RoutesTypes WHERE RowID = Type) AS Name --Название маршрута
          ,(SELECT Name FROM dbo.Destinations WHERE Name = '$Src') AS DestA --Пункт отправления
          ,(SELECT Name FROM dbo.Destinations WHERE Name = '$Dst') AS DestB --Пункт назначения
          --,(SELECT COUNT([RowID]) FROM [RoutePartInstances] WHERE [RoutePartType] = RoutesTypes.RowID AND [Occuped] = 0) AS FreePlaces --Количество свободных мест на выбранную часть маршрута
          ,(SELECT SUM(Cost) From RoutesParts WHERE Ordern >= RoutesTypes.OrderA AND Ordern <= RoutesTypes.OrderB AND InstanceID = Type) AS TicketCost --Стоимость билета на выбранную часть маршрута
          ,(SELECT SUM(TimeInWay) From RoutesParts WHERE Ordern >= RoutesTypes.OrderA AND Ordern <= RoutesTypes.OrderB AND InstanceID = Type) AS TimeInWay --Время в пути на выбранной части маршрута
    		--Расчёт времени отправления
          ,(SELECT DATEADD(Minute, 
                (SELECT 
    				CASE
    					WHEN RoutesTypes.OrderA > 1 THEN (SELECT SUM(TimeInWay) From RoutesParts WHERE Ordern < RoutesTypes.OrderA AND InstanceID = Type)+10*(SELECT COUNT(RowID) From RoutesParts WHERE Ordern < RoutesTypes.OrderA AND InstanceID = Type)
    					ELSE 0
    				END),[DateStart])) AS DepartureTime
    		--Расчёт времени прибытия
          ,(SELECT DATEADD(Minute,
    		   (SELECT SUM(TimeInWay) From RoutesParts WHERE Ordern >= RoutesTypes.OrderA AND Ordern <= RoutesTypes.OrderB AND InstanceID = Type)+10*(SELECT COUNT(RowID) From RoutesParts WHERE Ordern > RoutesTypes.OrderA AND Ordern <= RoutesTypes.OrderB AND InstanceID = Type), 
    			   (SELECT DATEADD(Minute, 
    				   (SELECT 
    						CASE
    							WHEN RoutesTypes.OrderA > 1 THEN (SELECT SUM(TimeInWay) From RoutesParts WHERE Ordern < RoutesTypes.OrderA AND InstanceID = Type)+10*(SELECT COUNT(RowID) From RoutesParts WHERE Ordern < RoutesTypes.OrderA  AND InstanceID = Type)
    					ELSE 0
    				END),[DateStart])))) AS ArrivalTime
    	
    	--,RoutesTypes.OrderA --Порядок выбранной точки отправления в маршруте. Это нам понадобится при покупке билета
        --,RoutesTypes.OrderB --Порядок выбранной точки назначания в маршруте. Это нам понадобится при покупке билета
        --,RoutesTable.[RowID] AS RouteID --Идентификатор рейса из таблицы расписаний. Это нам понадобится при покупке билета
        --,RoutesTable.[Type] AS RouteTypeID --Идентификатор типа маршрута из таблицы типов маршрутов. Это нам понадобится при покупке билета
    
      FROM [RoutesTable] AS RoutesTable
      INNER JOIN	(SELECT RoutesParts_A.[InstanceID],RoutesParts_A.[TimeA],RoutesParts_B.TimeB,RoutesParts_A.RowID,RoutesParts_  A.Ordern AS OrderA,RoutesParts_B.Ordern AS OrderB
    				FROM [RoutesParts] AS RoutesParts_A
    				INNER JOIN (SELECT [InstanceID],[TimeB],[Ordern] FROM [RoutesParts] WHERE [DestBID] = (SELECT RowID FROM Destinations WHERE Name = '$Dst')) AS RoutesParts_B ON RoutesParts_B.InstanceID = RoutesParts_A.InstanceID
    				WHERE [DestAID] = (SELECT RowID FROM Destinations WHERE Name = '$Src'))AS RoutesTypes ON RoutesTable.Type = RoutesTypes.InstanceID";

    Встретил на форуме phpforum.ru. Человек интересовался почему не работает запрос :)

    vagrand, 27 Апреля 2012

    Комментарии (15)
  9. PHP / Говнокод #10025

    +100

    1. 1
    2. 2
    3. 3
    if ($node->title == 'Главная страница' || $node->title == 'Home')
    {print '<img src="sites/all/themes/them/images/stock.png" />';
    }

    Говнокод по Drupal-овски.
    Найден в шаблоне page.tpl.php

    Dishvola, 23 Апреля 2012

    Комментарии (3)
  10. Куча / Говнокод #10002

    +100

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    procedure interpretation;
    var
    s,f:string;
    i,m,v:integer;
    
    begin
    s:=#0;
    
    for I:=0 to form9.Memo2.Lines.Count-1 do begin
      s:=form9.Memo2.Lines.Strings[i];//ïðîñìîòð ñòðîê èäåò
      //ñâåðõó âíèç
    
      if s='hex' then hex;
      if s='acsii' then acsii;
    
      if (s[1]='a') and (s[2]='d') and (s[3]='d') then begin
      form9.Edit6.Text:=s[5];
      form9.Edit5.Text:=s[7];
      peredsim;
      end;
    
      if (s[1]='s') and (s[2]='a') and (s[3]='m') then begin
      form9.Edit2.Text:=s[5];
      form9.Edit4.Text:=s[7];
      samsimbyl;
      end;
    
      if (s[1]='d') and (s[2]='e') and (s[3]='l') then begin
      form9.Edit3.Text:=s[5];
      for v:=1 to length(s) do
      deletesimbyl;
      end;
    
      if (s[1]='d') and (s[2]='e') and (s[3]='l') and (s[4]='s') then begin
      form9.Edit3.Text:=s[6];
      dels;
      end;
    
      if (s[1]='i') and (s[2]='n') and (s[3]='f') then begin
      form9.Memo1.Text:=s[5]+form9.Memo1.Text;
      end;
    
      if (s[1]='f') and (s[2]='n') and (s[3]='i') then begin
      form9.Memo1.Text:=form9.Memo1.Text+s[5];
      end;
    
      if (s[1]='p') and (s[2]='h') and (s[3]='e') then RapsrRedel;
    
    
      if (s[1]='n') and (s[2]='a') and (s[3]='b') then PerstNO;
    
    
      if (s[1]='a') and (s[2]='t') and (s[3]='s') then acsiitosim;
      if (s[1]='h') and (s[2]='t') and (s[3]='s') then hextosim;
      if (s[1]='h') and (s[2]='t') and (s[3]='a') then hextoacsii;
      if (s[1]='a') and (s[2]='t') and (s[3]='h') then acsiitohex;
    end;
    end;

    Нужно было быстро накодить интерпретатор, которым никто пользоваться не будет, кроме собственно автора программы, для создания простеньких скриптов (сами понимаете семантический анализатор писать, в данном случае не улыбалось). Потому получился такой МегОАдЪовый говнокод!

    Kerny, 21 Апреля 2012

    Комментарии (1)
  11. Pascal / Говнокод #8606

    +100

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    var s: string;
        res: string; 
    begin
      readln(s);
      res := 'Слишком большая строка';
      if length(s) = 0 then res := s;
      if length(s) = 1 then res := s;
      if length(s) = 2 then res := s;
      if length(s) = 3 then res := s;
      if length(s) = 4 then res := s[0] + ' ' + s[1] + s[2] + s[3];
      if length(s) = 5 then res := s[0] + s[1] +' ' + s[2] + s[3] + s[4];
      if length(s) = 6 then res := s[0] + s[1] + s[2] +' ' + s[3] + s[4] + s[5];
      if length(s) = 7 then res := s[0] + ' ' + s[1] + s[2] + s[3] +' ' + s[4] + s[5] + s[6];
      if length(s) = 8 then res := s[0] + s[1] + ' ' + s[2] + s[3] + s[4] +' ' + s[5] + s[6] + s[7];
      if length(s) = 9 then res := s[0] + s[1] + s[2] + ' ' + s[3] + s[4] + s[5] +' ' + s[6] + s[7] + s[8];
      writeln(res);
    end.

    Код масштабируемый - сейчас он обрабатывает строки, в которые можно записать от нуля до девяти символов, но его прозрачно можно смасштабировать до обработки хоть 20, хоть 50 символов.
    Кроме того, тут не используются платформозависимые API.

    Govnocoder#0xFF, 22 Ноября 2011

    Комментарии (26)