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

    +179

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    $sql=mysql_query("SELECT id FROM table");
    $id=mysql_num_rows($sql)+1;
    
    $qry=mysql_query("INSERT INTO table(id, .....)  VALUES ('$id','.....')")
        or die (mysql_error());

    Осуществление auto_increment-а!
    Угадайте, что будет если кто то удалить одну строку из таблицу?

    gotha, 14 Июля 2010

    Комментарии (20)
  2. PHP / Говнокод #3700

    +157

    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
    <?
    @$ok=$HTTP_POST_VARS["ok"];
    @$user=$HTTP_POST_VARS["user"];
    @$pwd=$HTTP_POST_VARS["pwd];
    if(!isset($ok))
    echo "<form action=.$2.php. method=POST>"
    ."Name<input type=text name user><br>"
    ."Password<input type=password name=pwd><br>"
    ."<input type=submit name=ok value=Войти>"
    ."</form>";
    else
    {
    if(($user="Demo")&&($pwd=="Demo"))
    echo "Wellcome";
    else
    echo "Access Blocked";
    }
    ?>

    Говорят, что это не говнокод.

    kal1sha, 14 Июля 2010

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

    +121

    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
    // то проверяем его куки
        // вдруг там есть логин и пароль к нашему скрипту
    
        if (isset($_COOKIE['login']) && isset($_COOKIE['password'])) {
            // если же такие имеются
            // то пробуем авторизовать пользователя по этим логину и паролю
            $login = mysql_real_escape_string($_COOKIE['login']);
            $password = mysql_real_escape_string($_COOKIE['password']);
    
            // и по аналогии с авторизацией через форму:
    
            // делаем запрос к БД
            // и ищем юзера с таким логином и паролем
    
            $query = "SELECT `id`
                    FROM `users`
                    WHERE `login`='{$login}' AND `password`='{$password}'
                    LIMIT 1";
            $sql = mysql_query($query) or die(mysql_error());
    
            // если такой пользователь нашелся
            if (mysql_num_rows($sql) == 1) {
                // то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)
    
                $row = mysql_fetch_assoc($sql);
                $_SESSION['user_id'] = $row['id'];

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

    Vasiliy, 14 Июля 2010

    Комментарии (67)
  4. C++ / Говнокод #3698

    +160

    1. 1
    2. 2
    3. 3
    4. 4
    m_lActiveTab = GetCurSel();
    for (int i = 0; i < GetItemCount(); i++)
    	m_cItemSelected[m_lActiveTab] = false;
    m_cItemSelected[m_lActiveTab] = true;

    Вот так говнокодят в крупных проектах

    Snake2101, 14 Июля 2010

    Комментарии (19)
  5. PHP / Говнокод #3697

    +167

    1. 1
    2. 2
    3. 3
    4. 4
    ...
    chmod($file, 0777);
    unlink($file);
    ...

    На просторах интернета можно найти функцию для рекурсивного удаления папки со всем содержимым вот с таким фрагментом.

    Uchkuma, 13 Июля 2010

    Комментарии (15)
  6. Куча / Говнокод #3696

    +129

    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
    Author: decker <decker@personal-army>  2010-06-19 05:39:42
    Committer: decker <decker@personal-army>  2010-06-19 05:39:42
    
        fix potential race in reservation id generation
    
    @@ -97,7 +98,7 @@ public class VmInstances extends AbstractNamedRegistry<VmInstance> {
         do {
           MessageDigest digest = Hashes.Digest.MD5.get();
           digest.reset();
    -      digest.update( Long.toString( rsvId + launchIndex + System.currentTimeMillis() ).getBytes() );
    +      digest.update( Long.toString( rsvId + launchIndex + System.nanoTime( ) ).getBytes() );
     
           Adler32 hash = new Adler32();
           hash.reset();

    Вот так суровые калифорнийцы сурово чинят race...

    raorn, 13 Июля 2010

    Комментарии (8)
  7. Си / Говнокод #3695

    +131

    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
    #include <stdio.h>
    
    void factorization(int num, int show) {
        int num1 = num;
        int n = 2;
        while ( n*n <= num1 ) {
            if ( num%n == 0 ) {
                num = num / n;
                if ( show )
                    printf( "%d\n", n );
            } else {
                n ++;
            }
        }
    }
    
    int main() {
        int i = 0;
        while ( i < 1000 ) {
            factorization(999999, 0);
            i ++;
        }
        return 0;
    }

    Опубликовано в одной из ссылок с http://habrahabr.ru/blogs/ruby/48952/ (если надо, точную ссылку найду позже).
    Код раскладывает число на простые множители тупым перебором делителей. Мало того, что этот код медленный, так он иногда последний множитель пропускает. Одновременно и ошибка, и скорость исправляются так:
    - while ( n*n <= num1 ) {
    + while ( n <= num ) {
    Неожиданно, правда?

    inkanus-gray, 13 Июля 2010

    Комментарии (18)
  8. Куча / Говнокод #3694

    +135

    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
    0 DIM P(4): DIM R(4)
    10 DATA 173, 48, 192, 136, 208, 5, 206, 1, 3, 240, 9, 202, 208, 245, 174, 0, 3, 76, 2, 3, 96,,0
    20 FOR X=770 TO 792
    30 READ Y
    40 POKE X, Y
    50 NEXT X
    60 DATA 192, 152, 144, 128, 114
    70 FOR I=0 TO 4
    80 READ P(I)
    90 NEXT I
    100 DATA 255, 128, 64, 64, 128
    FOR I=0 TO 4
    READ R(I)
    NEXT I
    FOR I=0 TO 4
    POKE 768, P(I)
    POKE 769, R(I)
    CALL 770
    NEXT I
    END

    Не совсем ГК, зато выглядит страшно. Шарманка для ПЭВМ «Агат-7». Вторая строка — машинные коды. Выглядит как обфуска. Вот листинг:

    .ORG 768
    L_768: .BYTE 0 ; НОТА
    L_769: .BYTE 0 ; ДЛИТЕЛЬНОСТЬ
    L_770: LDA $C030
    L_773: DEY
    BNE L_781
    DEC L_769
    BEQ L_790
    L_781: DEX
    BNE L_773
    LDX L_768
    JMP L_770
    L_790: RTS
    .BYTE $FF
    .BYTE 0

    Кстати, таблица команд процессора совместима с 6502, поэтому листинг похож на демонстрировавшийся в фильме «Терминатор».
    Строчки 7 и 11 — это массивы нот и длительностей соответственно.
    Самое страшное, что этот код мы набирали на уроке информатики в восьмом классе. Представляете, что может произойти, если ошибиться во второй строке? Хорошо, что у «Агатов» винчестеров не было...

    inkanus-gray, 13 Июля 2010

    Комментарии (23)
  9. Куча / Говнокод #3693

    +129

    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
    for i in 14 15 27 29 38; do # make a sed string to replace special characters
        hexval=$(printf \\\\x%02x $i)
        sedstr=$sedstr"s/'$hexval/chr($i)||'/g;s/$hexval'/'||chr($i)/g;s/$hexval/'||chr($i)||'/g;"
    done
    
    cat <<EOF | sqlplus -S $DB_LOGIN | sed $sedstr | awk -v dbdir=db/data '{print > dbdir"/"$3".sql"}'
    $SPINIT
    BEGIN
      FOR i IN (SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE='TABLE' ORDER BY OBJECT_NAME) LOOP
        DECLARE
          all_cols VARCHAR2(32767) := '';
          TYPE data_cur_type IS REF CURSOR;
          data_cur data_cur_type;
          ins_str VARCHAR2(32767);
        BEGIN
          FOR j IN (SELECT DISTINCT(COLUMN_NAME) FROM USER_TAB_COLUMNS
                    WHERE TABLE_NAME=i.OBJECT_NAME AND
                    DATA_TYPE IN ('VARCHAR2', 'CHAR', 'NUMBER', 'DATE')
                    ORDER BY COLUMN_NAME) LOOP
            all_cols := all_cols || j.column_name || ',';
          END LOOP;
          IF all_cols is null THEN GOTO end_of_loop; END IF;
          all_cols := RTRIM(all_cols,',');
        
          OPEN data_cur FOR 'select ' ||
           '''INSERT INTO ' || i.object_name || ' (' || all_cols || ') VALUES (' || '''''''||' || replace(all_cols, ',', '||'''''',''''''||') || '||'''''');''' ||
           ' from ' || i.object_name || ' order by ' || all_cols;
          LOOP
            FETCH data_cur INTO ins_str;
            EXIT WHEN data_cur%NOTFOUND;
            dbms_output.put_line(ins_str);
          END LOOP;
          CLOSE data_cur;
        END;
    <<end_of_loop>> NULL;
      END LOOP;
    END;
    /
    EOF

    Проблеме экранирования посвящается.
    На стыке технологий: экспорт данных из БД в виде insert-ов. Там еще есть awk-шный код по разбору всего, что получилось, но он не такой ужасный.
    Автор я, если чо:)

    nil, 13 Июля 2010

    Комментарии (4)
  10. bash / Говнокод #3692

    −126

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    .........................................
     if [[ "$rez" = "0%" ]]
     then
     let "i = i + 1"
     else
    #Ещё чуток индийского кода:)
     let "i = i + 0"
     fi
     done
    .........................................

    ccoder, 13 Июля 2010

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